Atmospheric refraction correction calculator for surveying
This atmospheric refraction correction calculator converts a surveyed vertical angle into an estimated geometric angle by accounting for the downward bending of a long sight line through the air.
Run — free
Enter the observed vertical angle and horizontal distance, then use the standard coefficient or supply a coefficient appropriate to measured conditions. The result reports the signed angular correction in degrees and arcseconds, the corrected angle, and the apparent height shift, making the calculation easy to review or carry into a survey reduction workflow.
Why long survey sights need a refraction correction
A vertical angle observed through the atmosphere is not exactly the angle that would be measured along a perfectly straight ray. Air density usually decreases with height, so a near-horizontal light ray curves downward and makes a distant target appear slightly higher than its purely geometric position. The effect is small over a short construction sight, but it accumulates with distance and matters in trigonometrical levelling, reciprocal observations, geodetic control, monitoring across water, and long-distance alignment. This calculator treats positive vertical angles as above the horizontal and applies a signed correction to the observed value. With a positive refraction coefficient, the reported correction is negative because the apparent elevation must be reduced to estimate the unrefracted geometric angle. The output includes degrees and arcseconds so it can be compared directly with field-book observations, instrument specifications, and adjustment software. It also expresses the effect as an apparent height shift at the stated horizontal distance, which helps reveal whether the angular change is material for the accuracy class of the job.
How the standard surveying model is calculated
The calculation uses the conventional terrestrial-refraction coefficient k. First, horizontal sight distance d is divided by the selected Earth radius R to obtain the small central angle subtended by the sight. The refraction angle is then k multiplied by d divided by R. The calculator subtracts that angle from the observed vertical angle: corrected angle equals observed angle minus k d over R. A default coefficient of 0.13 represents a commonly used standard-atmosphere assumption, while the default radius is the mean Earth radius of 6,371,000 metres. The displayed apparent height shift is evaluated from the difference between the tangents of the observed and corrected angles rather than by merely multiplying the correction by distance; this preserves the geometry for steep observations as well as near-horizontal ones. All computations use the supplied horizontal distance, not slope distance. The algorithm is deterministic, performs no lookup, and rounds only the reported values. Its sign convention is explicit: a negative correction lowers the observed angle, while a negative coefficient can model an unusual gradient that bends the ray in the opposite direction.
Choose inputs carefully and interpret the result
Use a horizontal distance reduced to the same survey reference system as the rest of the observation. If only slope distance is available, reduce it before using this calculator, especially where the vertical angle is large. The coefficient is not a universal physical constant: it changes with temperature gradients, pressure structure, terrain, time of day, height above the surface, and whether the sight crosses land or water. Keep 0.13 for a standard planning calculation or when the governing survey specification explicitly requires it. For precision work, use a coefficient derived from reciprocal observations, contemporaneous meteorology, or the method prescribed by the project authority. Apply the returned signed correction once; do not add a separate refraction term from software that already performs the same reduction. This result addresses atmospheric refraction only. Curvature, instrument height, target height, collimation, vertical-circle index error, deflection of the vertical, and projection or datum reductions remain separate considerations. Over very long, strongly inclined, or rapidly changing paths, a single-coefficient model may be inadequate, so report the assumption with the reduced observation and retain the original field measurement for later adjustment.
What you can do with it
Reduce a long trigonometrical-levelling sight
Convert a measured vertical angle to a geometric estimate before deriving an elevation difference across a valley or inaccessible span.
Check a survey specification
Quantify the arcsecond and height effect of the coefficient required by a project and decide whether the correction is significant.
Compare field conditions
Run the same sight with standard and locally derived coefficients to see how atmospheric assumptions affect the reduced angle.
FAQ
What sign does the correction use?
For a positive coefficient, the correction is negative and is added to the observed angle. Equivalently, the calculator subtracts the positive refraction angle from the observation.
Why is 0.13 the default coefficient?
It is a common conventional value for standard terrestrial surveying calculations, not a guarantee of actual conditions along a particular sight.
Should I enter slope distance or horizontal distance?
Enter horizontal distance. Reduce slope distance first so the angular model uses the ground-centred horizontal separation.
Does this include Earth-curvature correction?
No. It calculates the atmospheric refraction component applied to a vertical angle. Any curvature or combined curvature-and-refraction height correction must be handled separately.
Can the coefficient be negative?
Yes. The accepted range permits unusual atmospheric gradients that reverse the usual bending direction, although such a value should be supported by observations or a project method.
What does the API calculation cost?
The API price is $0.002 per calculation. The browser version runs locally for interactive checks.
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/refraction-correction \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"observed_angle_deg":1.25,"distance_m":5000}'const res = await fetch("https://api.kit.forhosting.com/geo/refraction-correction", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"observed_angle_deg": 1.25,
"distance_m": 5000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/refraction-correction",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"observed_angle_deg": 1.25,
"distance_m": 5000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/refraction-correction", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"observed_angle_deg":1.25,"distance_m":5000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"observed_angle_deg":1.25,"distance_m":5000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/refraction-correction", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"observed_angle_deg": 1.25,
"distance_m": 5000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.refraction_correction",
"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. |