Earth curvature calculator
Over 20,000 m the surface falls a few tens of metres, but from an eye height of 1.7 m part of that bulge is still in view. Enter eye height and distance in metres to get the drop and the hidden height. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Height
- 1.7
- Distance
- 20,000
- Earth radius
- 6,371,000
- Horizon distance
- 4,654.1812266
- Horizon arc
- 4,654.18039857
- Drop
- 31.392220335
- Hidden
- 18.4817727618
An object several kilometres away can sit fully in line with your eye and still vanish behind the round Earth. This earth curvature calculator turns observer height, ground distance, and Earth's radius into two lengths people actually search for: the geometric drop of the surface and the hidden height of a distant object below the line of sight. Surveyors, sailors, radio planners, and anyone checking the eight-inches-per-mile-squared rule need those drops, not only the distance to the horizon.
What drop and hidden height mean on a spherical Earth
Treat Earth as a sphere of radius R. Stand at a point on that sphere and look toward a target whose great-circle surface distance is d. The central angle between your feet and the target is theta equals d over R.
The geometric drop is how far the surface has fallen away from the tangent plane that sits at your standing point: exactly R times one minus cosine of theta, or equivalently two R times the square of sine of theta over two. That is the classic earth-curvature bulge, the quantity behind the folk rule of eight inches per mile squared, which is just the small-angle form d squared over two R written in imperial units. Drop does not yet know that your eyes are above the ground.
Hidden height does. From eye height h the line of sight first grazes the sphere at the geometric horizon, whose central angle alpha is the inverse cosine of R over R plus h. Past the horizon the remaining angle is theta minus alpha, and the hidden height of a vertical object is R over cosine of that remainder minus R.
That length is how much of the object sits below the grazing ray and cannot be seen even in clear air. Pair it with a refraction k-factor in your own notes if you are doing radio or optical planning; do not bake a weather guess into a geometric answer.
Where an earth curvature calculator earns its keep
Line-of-sight surveys for masts, lighthouses, and microwave links need the hidden height of the far end, not a slogan about the horizon. Coastal and marine observers use the same pair of numbers when a hull or a headland disappears from the bottom up, which is the everyday meaning of hidden by Earth curvature.
Educators and fact-checkers use the drop field to show that eight inches per mile squared is the quadratic approximation of R times one minus cosine of d over R, then compare it with the exact hidden height once an observer stands up. Failed validation does not consume balance. Keep requests in metres, pin the rounded drop and hidden values in tests, and you get reproducible curvature geometry without standing up a GIS stack.
If you only need how far the geometric horizon is and not how much of an object is hidden, the sibling distance-to-horizon calculator is the narrower tool; search intent for earth curvature is the drop and the hidden height, which is why this capability exists on its own landing.
What you can do with it
Mast and microwave line-of-sight checks
Enter observer height and the ground range to a distant tower to obtain the hidden height below the grazing ray before you commit to antenna size.
Coastal and marine observation
Quantify how much of a hull, headland, or lighthouse is hidden by Earth curvature from a known eye height and surface distance.
Teaching the eight-inches-per-mile rule
Compare the exact spherical drop with the quadratic approximation and with hidden height once the observer stands above the surface.
FAQ
How do I calculate how much of an object is hidden by Earth curvature?
Send observer height, surface distance, and optionally Earth's radius.
What is the difference between drop and hidden height?
Drop is the surface falling away from the tangent at your feet: R(1−cos(d/R)).
Why is observer height not allowed to be negative?
A negative eye height is not a physical observer on or above the sphere.
Does this use the eight inches per mile squared rule?
No. That rule is the small-angle form d²/(2R) in imperial units. This calculator uses the exact spherical drop and the hidden-height formula, which recover the rule only as an approximation at short range with zero eye height.
Does the calculator include atmospheric refraction?
No. It uses pure spherical geometry with no weather guess, and hills and waves are not modelled either. For radio or optical planning, apply a refraction factor in your own notes.
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/phys/earth-curvature \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"height":1.7,"distance":20000}'const res = await fetch("https://api.kit.forhosting.com/phys/earth-curvature", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"height": 1.7,
"distance": 20000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/phys/earth-curvature",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"height": 1.7,
"distance": 20000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/phys/earth-curvature", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"height":1.7,"distance":20000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"height":1.7,"distance":20000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/phys/earth-curvature", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"height": 1.7,
"distance": 20000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "phys.earth_curvature",
"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.
Limits
max_abs | 1000000000000 |
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
Negative observer height fails with invalid_input. Successful API calls are billed at $0.002; validation failures are not billed.
What drop and hidden height mean on a spherical Earth
If the target still lies inside that horizon, curvature hides nothing of it: hidden is zero and beyond_horizon is false. Hills, waves, and atmospheric refraction are out of scope: this endpoint is the spherical geometric model used by survey textbooks and earth-curvature pages, not a weather or terrain engine.
Input contract, formulas, units, and error behaviour
Example: height one point seven metres, distance twenty thousand metres, and the default Earth radius yield a horizon a few kilometres out, a drop of a few tens of metres, and a smaller hidden height because you can already see over part of the bulge. Negative observer height is the product rule: the task fails with a message that height cannot be negative and is not billed. All lengths are metres; convert miles or feet on your side before calling, and convert the drop and hidden fields back if you need inches. POST a JSON body with two required finite numbers in metres and one optional radius. height is the observer eye height above the local spherical surface and must be greater than or equal to zero; aliases observer_height, h, and eye_height are accepted. distance is the great-circle surface range to the object and must be non-negative and shorter than half the planetary circumference; aliases d, range, and target_distance are accepted. earth_radius is the mean planetary radius of the model, default six million three hundred seventy-one thousand metres, which is the usual spherical mean Earth radius; aliases radius, R, and planet_radius are accepted. On success the body echoes height, distance, and earth_radius, then reports horizon_distance as the tangent length sqrt of two R h plus h squared, horizon_arc as the surface distance to that tangent point, drop as the geometric bulge, hidden as the hidden height, beyond_horizon as a boolean, and a formula string you can display next to the numbers. Missing fields, non-finite values, a non-positive radius, a distance that wraps past a hemisphere, or a range more than ninety degrees past the horizon fail with invalid_input naming the field.
Where an earth curvature calculator earns its keep
A planner who only computes distance to the horizon still does not know how much of a twenty-metre tower at twenty kilometres is below the grazing ray; this endpoint returns that length directly from observer height, range, and Earth's radius. Every successful call costs the published $0.002 base price.
Technical questions
What does the earth curvature calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.