Horizontal sextant angle distance calculator
This horizontal sextant angle distance calculator estimates how far an observer is from the straight baseline joining two charted landmarks.
Run — free
Enter the known distance between the landmarks and the horizontal angle measured from one landmark to the other. The calculation uses the exact isosceles-triangle relationship, reports perpendicular distance off and equal slant range to each landmark, and preserves the length unit you select. It is intended for position-fixing exercises and planning checks where the observer is assumed to lie on the perpendicular bisector of the landmark baseline.
How the horizontal-angle geometry works
Two charted landmarks form a known baseline, while the observer and those landmarks form a triangle. This calculator treats the observer as lying on the perpendicular bisector of that baseline, so the sight lines to the two landmarks have equal length. Drawing a perpendicular from the observer to the baseline midpoint divides the triangle into two right triangles. Each has an opposite side equal to half the charted landmark distance and an angle at the observer equal to half the measured horizontal sextant angle. The perpendicular distance off is therefore half the baseline divided by the tangent of half the angle. The equal slant range to either landmark is half the baseline divided by the sine of half the angle. These are exact trigonometric relationships for the stated geometry, rather than a small-angle approximation. A narrow measured angle produces a large distance off; a wider angle places the observer closer to the baseline. All distances retain the selected input unit, so a baseline entered in nautical miles produces nautical-mile results without an intermediate conversion.
Taking and entering a useful observation
Choose two distinct landmarks that are clearly identifiable on the chart and visible at the same time. Read their charted separation in a suitable unit, then use the sextant horizontally to measure the included angle from one object to the other. Enter the full angle in degrees, not the half-angle used internally by the formula. The angle must be greater than zero and less than 180 degrees, and the landmark distance must be positive. Select the same unit used for the chart measurement; the calculator labels its results but does not silently convert the baseline. The decimals control changes only the displayed rounding and does not reduce the precision of the internal trigonometry. Small observational errors matter most when the angle is narrow, because the tangent changes slowly there and a tiny angle difference can imply a substantial range difference. For practical navigation, use an observation taken carefully, avoid landmarks whose chart positions are uncertain, and retain enough decimals for the chart scale. Repeat measurements can reveal an unstable sight or a mistaken object before the result is used alongside another position line.
Limits of a one-angle distance fix
A known landmark separation and one measured horizontal angle do not uniquely locate an observer anywhere on the chart. In general, every point on a particular circle through the two landmarks sees their chord under the same angle. This calculator returns a single distance because it applies the common symmetric construction: the observer is on the perpendicular bisector of the landmark baseline, equally distant from both objects. Use the result when that construction matches the intended distance-off problem, a training diagram, or an independently known line of position. Do not treat it as a complete vessel fix when the observer may be displaced toward either landmark. An operational fix needs additional information, such as a second horizontal angle involving a third charted object, a bearing, a transit, radar range, or another independent position line. The result also assumes planar chart geometry over the local area and does not correct sextant index error, object identification, chart datum, refraction, vessel motion, or height of eye. Those limitations are usually negligible in classroom examples but can dominate real navigation. Verify observations and use approved navigation procedures before making safety-critical decisions.
What you can do with it
Work a coastal navigation exercise
Calculate the perpendicular distance from an observer to a two-landmark baseline in a symmetric horizontal-angle construction.
Check a hand calculation
Compare a plotted or manually computed distance-off result with deterministic full-precision trigonometry.
Explore angle sensitivity
Change the measured angle while holding the charted landmark separation constant to see how observation error affects distance.
FAQ
What does distance off mean here?
It is the perpendicular distance from the observer to the straight baseline joining the two landmarks.
Why must the observer be on the perpendicular bisector?
One baseline and one angle define a locus rather than a unique point. The perpendicular-bisector assumption selects the symmetric point where both landmark ranges are equal.
Does the calculator convert between units?
No. Choose the unit used for landmark_distance, and both returned distances use that same unit.
Can this provide a complete position fix?
Not by itself. A complete fix requires another independent observation or position line unless the observer's perpendicular-bisector position is already established.
How much does the API calculation cost?
The browser calculation is free, and an API request starts from $0.002. Failed validation requests are not billed.
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/horizontal-sextant-distance \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"landmark_distance":2,"angle_deg":30}'const res = await fetch("https://api.kit.forhosting.com/travel/horizontal-sextant-distance", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"landmark_distance": 2,
"angle_deg": 30
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/travel/horizontal-sextant-distance",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"landmark_distance": 2,
"angle_deg": 30
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/travel/horizontal-sextant-distance", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"landmark_distance":2,"angle_deg":30}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"landmark_distance":2,"angle_deg":30}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/travel/horizontal-sextant-distance", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"landmark_distance": 2,
"angle_deg": 30
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "travel.horizontal_sextant_distance",
"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. |