True ground track from heading calculator
Heading 90° at 120 knots with wind from 270° at 30 knots gives a ground track of 90° and a ground speed of 150 knots. Enter heading, true airspeed and wind to see where the aircraft really goes and how fast. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Heading
- 90
- True airspeed
- 120
- Wind direction
- 270
- Wind speed
- 30
- Ground track deg
- 90
- Ground speed
- 150
- Wind correction angle deg
- 0
- Headwind component
- -30
True ground track and ground speed are what the aircraft actually does over the ground once wind drifts the flight path away from the nose. Pilots, flight students, and automation scripts need the full wind triangle—not only a pure-crosswind crab angle—when heading, true airspeed, and a meteorological wind vector are known and the question is where the path goes and how fast. This true ground track from heading calculator accepts heading, TAS, wind-from direction, and wind speed in matching units, resolves north and east components of the air and wind vectors, and returns ground track in degrees, ground speed, the signed wind correction angle between track and heading, plus headwind and crosswind components relative to the nose. No weather fetch, no magnetic variation table, and no network call—only the deterministic wind-triangle solve from four numbers.
What the wind triangle solves when heading is known
In flight navigation the wind triangle relates three velocity vectors: the air vector (true airspeed along true heading), the wind vector (how the air mass moves over the ground), and the ground vector (ground speed along ground track). When you already hold a heading—because that is what the compass or autopilot is maintaining—the unknown is the ground vector: the path and speed relative to the Earth. True heading is the direction the nose points through the air mass, measured clockwise from true north.
True airspeed is the magnitude of motion through that air mass. Meteorological wind is stated as a from-direction and a speed: wind from two-seven-zero at thirty knots means the air mass moves toward zero-nine-zero at thirty knots. Decompose the air vector into north and east components with cosine and sine of heading times TAS.
Decompose the wind velocity the same way but with opposite sign of the from-direction trig functions, because the velocity points one-hundred-eighty degrees from the reported from-bearing. Add the components to get ground north and ground east. Ground speed is the hypotenuse of those two components.
Ground track is the two-argument arctangent of east over north, normalized into the zero-to-three-hundred-sixty degree circle used on charts. The signed difference between track and heading is the wind correction angle for this heading-known problem: it tells how far the path has drifted left or right of the nose. Headwind and crosswind components relative to heading quantify how much of the wind opposes the nose versus comes from the right, matching the language used in takeoff and landing performance checks even when the full track solve is the primary result.
Where solving the wind triangle helps
Flight schools and ground-school apps need a deterministic oracle so every student browser and every LMS auto-grader agree on track and ground speed for the same heading, TAS, and wind. Dispatch and mission-planning tools estimate actual path and time en route when the aircraft will fly a fixed heading rather than a constant track. Failed validation does not consume balance.
Keep requests small, pin the rounded track and ground speed in tests, and you get reproducible wind-triangle results for training worksheets, route estimators, and edge workers without standing up weather or navigation infrastructure of your own. Related tools that only solve pure-crosswind crab angle or only split wind into cross and head components answer different search intents; this capability answers the heading-known ground track and ground speed question end to end.
What you can do with it
Flight training and ground school
Compute true ground track and ground speed from heading, TAS, and METAR-style wind so students and auto-graders share one deterministic wind-triangle answer.
Mission and en-route planners
Estimate actual path over ground and ground speed when the aircraft will hold a fixed true heading through a known wind field.
FAQ
Which units should I use for TAS and wind speed?
Any consistent pair—knots, m/s, mph, or other. Ground speed and wind components use the same unit as the inputs. The calculator does not convert between units.
What does wind from 270° mean?
Wind is reported by the direction it blows from. Wind from 270° at 30 knots is a westerly: the air mass moves toward 90°, so on a heading of 90° it becomes a pure tailwind.
Does it apply magnetic variation?
No. Heading, wind and track are all true directions measured clockwise from true north. If you need a magnetic track, apply your local variation afterwards; the tool also does not fetch weather reports.
What is the wind correction angle in the result?
It is the signed difference between ground track and heading, showing how far the path has drifted left or right of the nose. With the wind straight behind or ahead, as in the 270° example, it is zero.
What do the headwind and crosswind figures mean?
They split the wind into the part that opposes the nose and the part that pushes from the side. A negative headwind is a tailwind: in the example, minus 30 means 30 knots pushing from behind.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/travel/ground-track-from-heading \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"heading":90,"true_airspeed":120,"wind_direction":270,"wind_speed":30}'const res = await fetch("https://api.kit.forhosting.com/travel/ground-track-from-heading", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"heading": 90,
"true_airspeed": 120,
"wind_direction": 270,
"wind_speed": 30
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/travel/ground-track-from-heading",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"heading": 90,
"true_airspeed": 120,
"wind_direction": 270,
"wind_speed": 30
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/travel/ground-track-from-heading", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"heading":90,"true_airspeed":120,"wind_direction":270,"wind_speed":30}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"heading":90,"true_airspeed":120,"wind_direction":270,"wind_speed":30}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/travel/ground-track-from-heading", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"heading": 90,
"true_airspeed": 120,
"wind_direction": 270,
"wind_speed": 30
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "travel.ground_track_from_heading",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Input contract, response shape, and error behaviour
Example: heading ninety degrees, TAS one hundred twenty, wind from two hundred seventy at thirty is a pure tailwind on an easterly heading, so ground track stays ninety and ground speed becomes one hundred fifty. Floats are rounded for stable cross-runtime comparison so goldens and client tests pin the same digits. The calculator does not convert units, does not apply magnetic variation, and does not fetch METARs; pair the numbers with your own charting code if you need magnetic track or forecast winds. POST a JSON body with four required finite numbers: heading (true heading in degrees, any finite value is accepted and normalized into zero inclusive through three hundred sixty exclusive), true_airspeed (true airspeed magnitude strictly greater than zero), wind_direction (meteorological wind-from direction in degrees, likewise normalized), and wind_speed (non-negative wind magnitude in the same unit as true airspeed). Each field may arrive as a JSON number or as a numeric string. Aliases hdg, true_heading, and course_heading map to heading; tas, airspeed, air_speed, and va map to true_airspeed; wind_from, wind_dir, and from_direction map to wind_direction; wind, ws, and wind_vel map to wind_speed. Missing fields, empty strings, NaN, Infinity, non-positive true airspeed, and negative wind speed fail with invalid_input messages that name the field. On success the body echoes cleaned heading, true_airspeed, wind_direction, and wind_speed; returns ground_track_deg and ground_speed; returns wind_correction_angle_deg as the signed track minus heading difference in the open-closed interval from negative one hundred eighty through one hundred eighty; returns headwind_component (positive means headwind opposing the nose) and crosswind_component (positive means from the right); sets unit to same_as_input; and includes formula and method strings naming the component wind-triangle approach.
Where a ground-track-from-heading API earns its keep
Small unmanned aircraft planners and hobby flight computers call a tiny parse endpoint instead of re-deriving atan2 conventions in every client language.
Integration use cases
Worksheets and live SEO widgets
Power a free browser true ground track calculator whose results match the paid API on the same pure module for demos and homework checks.
Technical questions
How do I calculate ground track from heading and wind?
Send heading, true_airspeed, wind_direction (from), and wind_speed in matching units. The API adds N/E air and wind components, then returns ground_track_deg = atan2(Ve,Vn) and ground_speed = hypot(Vn,Ve).
Is wind_direction the direction the wind is going to?
No. It is the meteorological from-direction (where the wind comes from), as on METARs and ATIS. Wind from 270 means a west wind blowing toward the east.
What is wind_correction_angle_deg in the response?
It is the signed difference track minus heading in degrees, normalized to about −180…+180. Positive means the ground track lies to the right of the nose for the heading you flew.
What does the true ground track from heading calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.