Magdec BGL File
The Magdec.bgl file provides the basis for magnetic variation (declination) calculation by the simulator at current aircraft position.
By convention, East magnetic variation values are POSITIVE, while west values are NEGATIVE.
See this Wikipedia article for some basics regarding magnetic declination meaning as well as this Understanding magnetic variation use in the simulators document for a more in-depth review of its use in the simulator.
File length is 130,468 bytes in FS2004 (offsets 0x0 to 0x1FDA3) and 130,456 bytes in FSX, P3D (all versions) and MSFS (offsets 0x0 to 0x1FD97)
In FS2004, FSX and all P3D versions, the Magdec.bgl file is located in the (SIM DRIVE-FOLDER)\Scenery\Base\Scenery\ subfolder.
In MSFS it is located in:
C:\Users\LOGINNAME\AppData\Local\Packages\Microsoft.FlightSimulator_8wekyb3d8bbwe\LocalCache\Packages\Official\OneStore\fs-base\scenery\Base\scenery\ subfolder (Box/Microsoft Store)
(STEAM DRIVE):\Steam\steamapps\common\MicrosoftFlightSimulator\Official\OneStore\fs-base\scenery\Base\scenery\ subfolder (Steam edition)
Magdec.bgl file includes a header, a latitude/longitude table and optionally (FS2004 only) an ending string.
File header is 136 bytes long (offsets 0x0 to 0x87) and has the following structure
|0x00||1 - BYTE||World set number||0X01|
|0x01||127 - ?||Unknown||All 0, except 0x80 at offset 0x6E|
|0x80||2 - WORD||Number of longitude values||0x168 (360)|
|0x82||2 - WORD||Number of latitude values||0xB5 (181)|
|0x84||1 - BYTE||Unknown - Reference date day (?)||0x01|
|0x85||1 - BYTE||Unknown - Reference date month (?)||0x01 (FS2004) - 0x11 (FSX/P3D/MSFS)|
|0x86||2 - WORD||Unknown - Reference date year (?)||0x1993 (FS2004) - 0x2006 (FSX/P3D/MSFS)|
Latitude/Longitude table is 130,320 bytes length and starts at offset 0x88.
Magnetic variations for all entire degree latitude/longitude values are stored as a WORD list starting at E000-S90.
For each longitude value from E000 to W179, the list tabulates magnetic variations by increasing latitude from S90 to N90.
This organization can be sumarized as follows:
E000 (S90->S89->S88...->S01->N00->N01->...->N90), then
E001 (S90->S89->S88...->S01->N00->N01->...->N90), followed by E002, E003 lines
E180 (S90->S89->S88...->S01->N00->N01->...->N90), then
W179 (S90->S89->S88...->S01->N00->N01->...->N90), followed by W178, W177 lines
W001 (S90->S89->S88...->S01->N00->N01->...->N90) that is the last line
Therefore, for each of the 360 longitude values, there is 181 latitude values for a total of 65,160 consecutive WORD values. First value of this table is at offset 0x88 (E000/S90) and last is at offset 0x1FD96 (W001/N90).
File offset for a given Lat/Long can be obtained using the following formula
For positive (East) longitudes (from 0 to 180):
Offset = (Long*362)+(Lat*2)+316
For negative (West) longitudes (from -1 to -179):
Note that North latitudes should be entered as positive values (0 to 90) and South latitudes as negative values (-1 to -90)
Magnetic variation encoding
Each magnetic variation value is coded on 2 bytes (WORD) using a 16-bit pseudo-degrees representation (360°=0x10000).
East values are positive while West values are negative (complement at 0x10000).
As an example a E03.4° value will be coded as:
MV (E03.4°) = 65536*3.4/360 = 619 (0x26B)
A W01.1° value will be coded as:
MV (W01.1°) = 65536 - (65536*1.1/360) = 65336 (0xFF38)
File end differs in FS2004 and FSX-P3D-MSFS but this doesn't seem to change file usage by the simulator.
In FS2004, file is terminated by the string "End of Data " (offset 0x1FD98 - length: 12 bytes), while there is no ending string in FSX-P3D-MSFS.
Internal calculation of current magnetic variation
Internally, the simulator makes use of this table to calculate current magnetic variation (probably as a FLOAT32 or FLOAT64) at aircraft position using a Bilinear interpolation prodedure from the 4 nearest table values.
As an example calculation of current magnetic variation by the simulator for an aircraft located at KLAX (N33°57' - W118°24') will use the following table values for its calculation:
N33°-W118°,N33°-W119°, N34°-W118° and N34°-W119°
Reliability of simulator data
Magnetic declination changes with time, more or less depending on world area.
From available historical data, it appears coded values in stock simulator files date from 1988 for FS2004 and 2009-2010 for FSX, P3Dv1-4 files and MSFS (stock MSFS magdec.bgl is identical to FSX one). P3DV5 includes a more up-to-date file (2018-2019)
Current values (2021) differ by an average of 3-4° and 1-2° for FS2004 and FSX/P3D/MSFS respectively, although larger variations can be observed in some parts of the world