Transit altitude from declination calculator
This transit altitude calculator finds how high a celestial object is above or below the astronomical horizon when it crosses the upper meridian.
Run — free
Enter the object's declination and the observer's geographic latitude in decimal degrees. The calculator subtracts their absolute difference from ninety degrees and also reports the corresponding zenith distance. It is useful for quick observing plans, classroom checks, telescope feasibility estimates, and astronomy software tests without requiring a date, time, longitude, ephemeris, network request, or account.
What upper-transit altitude means
Upper transit occurs when a celestial object crosses the observer's meridian at the higher of its two daily culminations. At that instant, the object's angular distance from the zenith is determined by the difference between the observer's latitude and the object's declination. This calculator uses signed decimal degrees: northern latitude and northern declination are positive, while southern latitude and southern declination are negative. It first finds the absolute latitude-declination difference, which is the zenith distance at upper transit, and then subtracts that distance from ninety degrees. A result of ninety degrees places the object at the zenith. A positive altitude places it above the ideal astronomical horizon, zero places it on that horizon, and a negative value means the object remains below the horizon even at upper transit. The calculation describes the geometric position for the supplied coordinates. It does not model buildings, terrain, trees, atmospheric refraction, or the apparent displacement of very nearby Solar System objects.
How to enter latitude and declination correctly
Enter both coordinates in decimal degrees within the inclusive range from minus ninety to plus ninety. Preserve the sign because it identifies the hemisphere. For example, a latitude of 35 means 35 degrees north, while -35 means 35 degrees south. Declination follows the same convention relative to the celestial equator. If your source uses degrees, arcminutes, and arcseconds, convert it to decimal degrees before using this calculator: divide arcminutes by sixty, divide arcseconds by 3,600, add those parts to the degree magnitude, and apply the south or negative sign to the complete value. Do not enter longitude, right ascension, azimuth, or a compass suffix in either numeric field. The observer's longitude and the current time determine when transit happens, but they do not change this ideal upper-transit altitude. Latitude outside the valid terrestrial range is rejected rather than clipped, and invalid or out-of-range declination is rejected as well so a malformed coordinate cannot produce a plausible-looking answer.
Interpreting the result for observing plans
Use the reported altitude as a fast geometric screening value, not as a complete visibility forecast. Higher positive altitudes usually mean a shorter path through the atmosphere, less extinction, and steadier imaging than observations close to the horizon. A low positive result may still be blocked by the local skyline, while a negative result says the object never rises at that latitude under this coordinate model. The companion zenith-distance value is useful when an observing limit or instrument specification is expressed as angular distance from overhead instead of elevation above the horizon. For real sessions, combine the result with the object's transit time, twilight, lunar separation, weather, mount limits, and a measured horizon profile. Stars have nearly fixed catalog declinations for ordinary planning, but the Sun, Moon, planets, comets, and satellites change coordinates with time; obtain an appropriate declination for the intended date before calculating. Browser use is free, while automated API requests use the published base price of $0.002 per request.
What you can do with it
Screen targets for an observing site
Compare catalog declinations with the site's latitude to identify objects that culminate high, low, or below the horizon.
Check telescope planning software
Use a transparent closed-form result as a regression value for meridian-altitude calculations in astronomy applications.
Teach celestial coordinates
Demonstrate how terrestrial latitude and celestial declination determine zenith distance and altitude at culmination.
FAQ
What formula does the calculator use?
It uses altitude = 90 degrees - |latitude - declination|. The absolute difference is also returned as the zenith distance.
Can the transit altitude be negative?
Yes. A negative result means the object is below the ideal astronomical horizon even at its upper transit for that observer latitude.
Why are longitude and time not required?
Longitude, date, and time determine when an object transits. Once declination and observer latitude are known, the geometric altitude at upper transit follows from those two coordinates alone.
Does the result include atmospheric refraction?
No. It is a geometric altitude. Refraction depends on atmospheric conditions and matters most near the horizon.
Which sign convention should I use?
Use positive values for north latitude and north declination, and negative values for south latitude and south declination.
What does an altitude of 90 degrees mean?
The object's declination equals the observer's latitude, so it passes through the zenith at upper transit.
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/astro/transit-altitude \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"declination":20,"latitude":52}'const res = await fetch("https://api.kit.forhosting.com/astro/transit-altitude", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"declination": 20,
"latitude": 52
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/astro/transit-altitude",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"declination": 20,
"latitude": 52
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/astro/transit-altitude", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"declination":20,"latitude":52}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"declination":20,"latitude":52}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/astro/transit-altitude", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"declination": 20,
"latitude": 52
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "astro.transit_altitude",
"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. |