Skip to content
View in the app

A better way to browse. Learn more.

The AVSIM Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Sharing a proven template for RNAV approach design

Featured Replies

After nearly two weeks of struggle around designing custom scenery for a set of 25 airports in the Canadian far north that are missing from the Asobo stock scenery, I have finally worked out how to build an RNAV approach that actually works with the Working Title Garmin G-1000 avionics suite that's in several of the Asobo stock General Aviation airplanes. I've tested the following code in the Beech G-36 Bonanza and the Cessna C-172 G1000. I nave NOT tested this in any of the large jet airliners. Before you dig in to the code block, I want to point out a few important tips about it:

  1. All of the Approach code, including the waypoint data, needs to be placed at the end of all other Airport data, typically in between the <ApronEdgeLights/> line, and the </Airport> line, as shown below.

  2. The Scenery Compiler is extremely persnickety about the syntax, punctuation, and ordering of the code. If the compiler throws any error messages whatsoever, do not try to use the resulting Package in the Sim, even if one gets generated. You have to track down and eliminate ALL errors in the code before you copy a package to the Community folder and start testing it.

  3. Although an approach might seem to run okay if you put the waypoints at the end of the approach data, or mixed in with it, there are obscure problems with this; always put all of your waypoint data above the first [<Approach type="RNAV"] line, as shown below in the full code block.

  4. If you want your RNAV approach to have maximum versatility, and use all of the features in the G1000 avionics package, your [<Approach type="RNAV"] lines need to include these four tags: lnav="TRUE" lnavvnav="TRUE" lpv="TRUE" lp="TRUE". If any of these four tags are "FALSE", the Vertical navigation features of the autopilot will probably not work; pressing the VNAV and APR buttons on the autopilot will not put you in VPTH or GP mode to fly down the glide path.

  5. Looking at the Waypoint data, the waypoints that refine the top of the Final Approach leg to the runway threshold need to have the [waypointType="FAF"] tag, the waypoints that define the IF (Initial Fix, i.e. beginning of the approach), and Missed Approach points, need to be [waypointType="NAMED"]. All waypoints must have a valid [waypointRegion=] code; in this example, "CY" is Canada, and a valid magvar value, which you can get from Little Nav Map. You need to verify, again using Little Nav Map with a freshly uploaded database, that your waypoints have unique ID's that don't exist anywhere else, either in stock Asobo or third-party scenery. If any of your waypoints duplicate Stock or other ID's, your airport might compile okay, but the approach will probably malfunction.

  6. Your FAF waypoint needs to have Latitude and Longitude coordinates that line up exactly on the runway centerline, at least 3 miles out from the threshold. The compiler might allow this point to be closer, but the logic processor in the Garmin G1000 might reject the approach if the FAF leg is too short, or it's not lined up accurately enough on the centerline.

  7. The easiest way to get the lat/long coordinates and altitude for the FAF waypoint is to ask Google AI. Tell the AI the latitude and longitude of the runway reference point, the runway length, and the elevation of the threshold points at each end of the runway: you get the Runway ARP coordinates from the airport Source XML file, to 14 decimal places, and the threshold elevations from the Gizmo tool in the Scenery designer. Temporarily place a small single-point object like a traffic cone at each end of the runway, on the centerline, and make a note of it's altitude from the Gizmo tool. In your request to Google AI, include this elevation, and tell the AI to add 50 feet to the runway's [altitude1] tags for the [fixType="RUNWAY"] legs of the approach. This is needed because you want your plane to cross the threshold on final 50 feet above the ground, so that the wheels hit right on the touchdown stripes.

  8. The IF and Intermediate waypoints can either be in line with the runway, or, if your approach heading conflicts with high terrain, you can lay out the approach path off to one side or another, or even design a route that zig-zags through mountain valleys to reach the FAF point, as long as the turns aren't too severe. Just remember that some of the airplanes flying this approach will be flying at 130 knots or more, so the legs have to be long enough to give the plane enough time to make any turns. The Runway 33 approach in this code block actually has 3 legs with 2 such turns. There is high terrain on the approach path, so I had to offset Legs 1 and 2 down the fjord to the southwest of the approach.

Now to the Approach Header tags. [designator="NONE"] and [gpsOverlay="FALSE"] seem to be the standard. The [fixType="WAYPOINT"] refers to the IF point, in this example, I33AB at the top of the approach path. The {heading] tag is the True Heading along the first leg of the Approach, between the IF and the next point down from it (R33AB in this example). The [fixIdent] tag is always the name of the IF waypoint. The [missedAltitude] tag contains the MSL altitude of the target climb-out; i.e. the minimum safe altitude to which you must climb after declaring a missed approach, to be able to orbit safely above the terrain.

And last but most important of all, is the [altitude=] tag. This will be the MSL altitude of the IF point, and you have to derive it by building the approach backwards from the threshold. In step 7 above, you determined the threshold elevation, and added 50 feet to that. Now compute the altitude of the FAF waypoint by taking the horizontal distance in feet between the threshold and the FAF point, multiplying that by tangent of the glide path angle, usually 3.0 degrees, and adding the result to the threshold crossing altitude. For example, your Final Approach leg is exactly 5 nautical miles long, and the glide path is 3.0°. The tangent of 3.0 = 0.052407779283. Multiply this times the distance in feet 30,380.577 = 1,592.18 feet. If your runway threshold ground elevation is 460.2 feet, and you've added 50 feet for clearing the threshold, your grand total altitude for the FAF point is 1592.18+50+460.2=2,102.38 feet. That will be the altitude you code for the FAF point, but now you need to work the same math up the slope for each leg until you get to the IF point. You need to do this with extreme care fo accuracy. If the altitudes don't agree with the leg distances and the math of the 3° glide path, the autopilot will refuse to follow the glide path: the VNV (Vertical Navigation) and APR (Approach) buttons on the Garmin won't put the autopilot in VPTH or GP modes, and you won't see the Pink Diamond in the PFD Glide Slope Indicator that tells you that the Vertical Navigation system is controlling the plane's descent with GPS and WAAS satellite data instead of barometric altitudes. The Working Title G1000 NXi in the Asobo planes is a very accurate simulation of the real thing: it won't tolerate sloppy coding in your XML source file. If the elevations of your Fix points don't agree with the glide path angles and leg distances, it will level off the aircraft at the FAF altitude rather than risk a CFIT, or missing the runway entirely, because of an error in the source code of the airport's scenery file. You can ask Google AI to compute the altitudes. First plan the route of the approach path to avoid high terrain, if need be. Do this in Google Earth, and try to keep the total path length to no more than about 15 miles. This gives you 3 legs of 5 miles each, and puts the IF point about 4,800 feet above the runway. Make note of the Lat/Long coordinates of each point, feed your data to Google AI, and ask it to adjust your FAF point coordinates to exactly line up on the runway centerline, and compute all the point altitudes to maintain a precise 3° glide path.

Onward to the Approach Legs!

  1. The first line is the IF leg. [Leg type="IF"]. You need 6 tags, no more, no fewer: [type="IF"], [fixType="TERMINAL_WAYPOINT"], [fixRegion="??"], [fixIdent="?????"], [altitudeDescriptor="+"], [altitude1=[????F"].

    IMPORTANT! [altitudeDescriptor] must be "+" here. If you put "-" or "A", the Vertical Navigation may not work as expected.

  2. The next one or more lines will be Intermediate Fix points, if any, else the "FAF" point for a simple 2-leg approach. There will be exactly 8 tags in each Intermediate Leg: [type="TF"], [fixType="TERMINAL_WAYPOINT"], [fixRegion="??"], [fixIdent="?????"], [altitudeDescriptor="+"], [altitude1=[????F"], [trueCourse="???.??"], and [flyOver="FALSE"].

  3. After the Intermediate Legs, comes the Final Approach Fix, or FAF. This leg aims you on the correct heading for the runway centerline, and if you programmed the Altitudes correctly, the autopilot should set your plane's wheels down exactly on the touchdown stripes, 950 feet down the runway from the threshold. There are exactly 9 tags in this Leg: [type="TF"], [fixType="TERMINAL_WAYPOINT"], [fixRegion="??"], [fixIdent="?????"], [altitudeDescriptor="+"], [altitude1=[????F"], [trueCourse="???.??"], [flyOver="FALSE"], and [isFAF="TRUE"]. This last one is crucial! The autopilot will not bring you down to the runway in GP mode, or show you that pink diamond indicator in the PFD, without the [isFAF="TRUE] tag.

  4. The last leg is the Runway. There are 8 tags: [type="TF"], [fixType="RUNWAY"], [fixRegion="??"], [fixIdent="????"], [flyOver="TRUE"], [altitudeDescriptor="A"], [trueCourse="???.??]", [altitude1="??"]. The [altitude1] value is the ground elevation of the runway threshold plus 50 feet. NOTE: This is the only Leg where you use "A" instead of "+" for the [altitudeDescriptor=].

The Missed Approach legs are pretty self-explanatory, but take note of these potential pitfalls:

  1. The [time=] tag needs to have 1 decimal place in it, i.e. "1.0", instead of just "1". Otherwise the Garmin software might mis-interpret the tag as a distance instead of 1 minute of time. The [speedLimit=] tag in this exaple is set to 250 knots, which is the general speed limit in all airspaces below 10,000 feet AGL, but setting it to a lower limit, if you want to for some reason, doesn't seem to adversely affect the functioning of the simulation.

A few last words. Waypoint ID's are limited to no more than 5 alphanumeric characters. Capitol Letters and Numbers only, no punctuation marks. You can use whatever letters and numbers you like, just make certain you aren't duplicating an existing waypoint or Navaid ID in the stock Asobo scenery or any third party scenery add-ons in the Community folder. Use True, not Magnetic courses, especially anywhere north or south of the 73rd Latitudes; the convergence of the Longitudinal meridians, and the extreme distortion of the lines of magnetic variation near the Poles, can make the Garmin G1000 malfunction in ways that are not well documented and are difficult to diagnose and correct, if you try and define approach legs with magnetic courses. Remember, when you are descending an RNAV approach, you should see that pink Glide Path diamond in the PFD if the lnavvnav, lpv, and lp tags in the Approach Header line are all set to "TRUE"; if you are still not seeing it when you get to the FAF point, or the plane levels off at the FAF and doesn't continue on down to the runway, something is wrong with your XML coding for the approach. Look through it very carefully, make corrections if you can find the problem, and re-compile the package. Good Luck and happy landings!

		<ApronEdgeLights/>
		
<Waypoint lat="73.11126536241320" lon="-85.51777587748280" waypointType="NAMED" waypointRegion="CY" waypointIdent="I15AB" magvar="24.5" />
<Waypoint lat="73.06079022716540" lon="-85.29010626416480" waypointType="FAF" waypointRegion="CY" waypointIdent="C15AB" magvar="24.5" />
<Waypoint lat="72.9208306350795" lon="-84.6713659765127" waypointType="NAMED" waypointRegion="CY" waypointIdent="M15AB" magvar="24.5" />
<Waypoint lat="72.8600240616" lon="-84.455184653" waypointType="NAMED" waypointRegion="CY" waypointIdent="I33AB" magvar="24.5" />
<Waypoint lat="72.9617097678" lon="-84.8499479159" waypointType="FAF" waypointRegion="CY" waypointIdent="C33AB" magvar="24.5" />
<Waypoint lat="73.09110553491770" lon="-85.42654971513200" waypointType="NAMED" waypointRegion="CY" waypointIdent="M33AB" magvar="24.5" />
<Waypoint lat="72.8880188758" lon="-84.7206286765" waypointType="NAMED" waypointRegion="CY" waypointIdent="R33AB" magvar="24.5" />

<Approach type="RNAV" runway="33" designator="NONE" gpsOverlay="FALSE" fixType="WAYPOINT" fixRegion="CY" fixIdent="I33AB" altitude="4540F" heading="289.83" missedAltitude="2500" lnav="TRUE" lnavvnav="TRUE" lpv="TRUE" lp="TRUE" >

<ApproachLegs>

<Leg type="IF" fixType="TERMINAL_WAYPOINT" fixRegion="CY" fixIdent="I33AB" altitudeDescriptor="+" altitude1="4540F"/>
<Leg type="TF" fixType="TERMINAL_WAYPOINT" fixRegion="CY" fixIdent="R33AB" flyOver="FALSE" altitudeDescriptor="+" altitude1="2950F" trueCourse="289.83" />
<Leg type="TF" fixType="TERMINAL_WAYPOINT" fixRegion="CY" fixIdent="C33AB" flyOver="FALSE" altitudeDescriptor="+" altitude1="1360F" trueCourse="332.80" isFAF="TRUE" verticalAngle="3.00" />
<Leg type="TF" fixType="RUNWAY" fixRegion="CY" fixIdent="RW33" flyOver="TRUE" altitudeDescriptor="A" trueCourse="307.51" altitude1="81F" />

</ApproachLegs>

<MissedApproachLegs>

<Leg type="TF" fixType="TERMINAL_WAYPOINT" fixRegion="CY" fixIdent="M33AB" flyOver="TRUE" trueCourse="307.65" altitudeDescriptor="A" altitude1="2500F" />
<Leg type="HM" fixType="TERMINAL_WAYPOINT" fixRegion="CY" fixIdent="M33AB" trueCourse="307.65" turnDirection="R" time="1.0" speedLimit="250"/>

</MissedApproachLegs>

</Approach>

<Approach type="RNAV" runway="15" designator="NONE" gpsOverlay="FALSE" fixType="WAYPOINT" fixRegion="CY" fixIdent="I15AB" altitude="3275F" heading="127.65" missedAltitude="2500" lnav="TRUE" lnavvnav="TRUE" lpv="TRUE" lp="TRUE" >

<ApproachLegs>

<Leg type="IF" fixType="TERMINAL_WAYPOINT" fixRegion="CY" fixIdent="I15AB" altitudeDescriptor="+" altitude1="3275F" />
<Leg type="TF" fixType="TERMINAL_WAYPOINT" fixRegion="CY" fixIdent="C15AB" altitude1="1751F" altitudeDescriptor="+" trueCourse="127.65" verticalAngle="3.00" isFAF="TRUE" />
<Leg type="TF" fixType="RUNWAY" fixRegion="CY" fixIdent="RW15" flyOver="TRUE" altitudeDescriptor="A" trueCourse="127.65" altitude1="81F" />

</ApproachLegs>

<MissedApproachLegs>

<Leg type="TF" fixType="TERMINAL_WAYPOINT" fixRegion="CY" fixIdent="M15AB" flyOver="TRUE" trueCourse="127.65" altitudeDescriptor="A" altitude1="2500F" />
<Leg type="HM" fixType="TERMINAL_WAYPOINT" fixRegion="CY" fixIdent="M15AB" trueCourse="127.65" turnDirection="R" time="1.0" speedLimit="250"/>

</MissedApproachLegs>

</Approach>

	</Airport>

Guest
This topic is now closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.