Great-circle maximum latitude calculator using Clairaut's relation
This great-circle maximum latitude calculator finds the northern and southern latitude limits reached by the complete spherical great circle defined by a starting latitude and initial bearing.
Run — free
It applies Clairaut's relation directly, so longitude is not needed and no route sampling is involved. The result is useful for navigation checks, route envelopes, mapping, education, and independent verification of geodesic software. Values use decimal degrees and a spherical Earth model, with north positive and south negative.
Describe the great circle with two values
Enter the starting latitude in decimal degrees and the initial bearing measured clockwise from true north. The latitude must fall between minus 90 and 90 degrees, while the bearing may be any finite number because it is normalized into the conventional zero-to-360-degree interval. A bearing of zero points north, 90 points east, 180 points south, and 270 points west. Longitude is deliberately absent. Changing the starting longitude rotates the same geometrical situation around Earth's polar axis, but it does not change how far north or south the resulting great circle can reach. The calculator returns the maximum latitude, the corresponding negative minimum latitude, the normalized bearing, and the signed Clairaut constant. Those limits describe the complete great circle, not merely the forward segment between the starting point and some destination. If your application concerns a finite journey, compare its endpoints and direction of travel with the full-circle limits before assuming that both extrema occur on the traveled portion. Inputs and outputs are angles in degrees, which makes the result straightforward to use with navigation notes, map software, or a separate route calculation.
How Clairaut's relation determines the limit
For motion along a great circle on a sphere, Clairaut's relation states that the product of the cosine of latitude and the sine of course remains constant. The calculator first evaluates that constant at the supplied starting point and initial bearing. At a northern or southern vertex, the great circle is momentarily traveling due east or due west, so the absolute sine of its course equals one. The cosine of the vertex latitude therefore equals the absolute value of the starting Clairaut constant. Taking the inverse cosine gives a nonnegative latitude limit between zero and 90 degrees. Symmetry of a plane through the sphere's center means the same complete great circle also reaches the negative of that value in the opposite hemisphere. An east-west course on the equator produces a limit of zero because that route is the equator itself. A meridional great circle produces limits of plus and minus 90 degrees because it crosses both poles. The implementation clamps the computed magnitude before inverse cosine to protect against tiny floating-point excursions beyond the mathematical interval, then rounds reported numbers consistently for deterministic JSON output. It does not step along the route, choose a distance increment, or estimate a peak from sampled points.
Interpret the result and its spherical assumption
The returned maximum and minimum are theoretical latitude extrema for a spherical great circle. They are ideal for classroom calculations, aviation or marine planning approximations, map QA, and tests where software should reproduce Clairaut's relation exactly. They should not be confused with extrema on an ellipsoidal geodesic. Real Earth reference systems such as WGS 84 model flattening, and an ellipsoidal geodesic can require different methods when operational precision matters. Likewise, a vehicle may follow winds, currents, restricted airspace, traffic separation schemes, or waypoint legs rather than one uninterrupted great circle. Use this result as a clear geometrical envelope and state the model when sharing it. The signed Clairaut constant is included so you can audit the calculation: its sign reflects the eastward or westward component of the initial course, while its magnitude controls the latitude limit. Reversing that east-west component changes the constant's sign but leaves both extrema unchanged. Starting in the Southern Hemisphere does not force the maximum to remain south; the complete great circle extends through both hemispheres unless it is the equator. For automated calls, the base request price is $0.002. The algorithm is deterministic, performs no network requests, and returns the same output for identical inputs.
What you can do with it
Check a planned route envelope
Estimate the furthest north and south a full spherical great-circle track can extend before performing detailed route work.
Verify navigation software
Compare another implementation's latitude vertex against a direct, deterministic calculation from Clairaut's relation.
Teach spherical navigation
Show how starting latitude and course determine a great circle's symmetric latitude limits without numerical sampling.
FAQ
Why is longitude not required?
Longitude rotates the great circle around the polar axis but does not alter its maximum or minimum latitude.
Are the maximum and minimum always symmetric?
Yes. A complete great circle is the intersection of a sphere and a plane through its center, so its latitude extrema are equal in magnitude and opposite in sign.
Does the result apply only to the forward journey?
No. It describes the complete great circle. A finite forward segment may end before reaching either vertex.
Does this use the WGS 84 ellipsoid?
No. It uses an ideal spherical Earth and Clairaut's great-circle relation. Use an ellipsoidal geodesic method when that distinction matters.
What does an API request cost?
The base price is $0.002 per request.
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/geo/great-circle-max-latitude \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"latitude":40,"bearing":60}'const res = await fetch("https://api.kit.forhosting.com/geo/great-circle-max-latitude", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"latitude": 40,
"bearing": 60
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/great-circle-max-latitude",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"latitude": 40,
"bearing": 60
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/great-circle-max-latitude", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"latitude":40,"bearing":60}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"latitude":40,"bearing":60}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/great-circle-max-latitude", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"latitude": 40,
"bearing": 60
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.great_circle_max_latitude",
"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. |