Grid declination offset calculator
This grid declination offset calculator combines grid convergence with magnetic declination so bearings can be moved consistently among grid north, geographic or true north, and magnetic north.
Run — free
Enter both angles in decimal degrees using the stated east-positive convention. The result reports grid declination plus every forward and reverse offset, removing the need to remember whether a particular conversion requires addition or subtraction. It is useful for map work, survey checks, navigation worksheets, and software that must keep north references explicit.
Understand the three north references
A map bearing is incomplete unless its north reference is known. True north, also called geographic north, follows the meridian toward the geographic pole. Grid north follows the vertical lines of a projected coordinate grid. Those lines generally do not point exactly along the local meridian, so grid convergence describes their angular separation. Magnetic north follows the local direction of the magnetic field and changes with position and time; magnetic declination describes its separation from true north. This calculator expects both supplied angles to use one unambiguous convention: clockwise, or east, is positive and counterclockwise, or west, is negative. In that convention, grid convergence is the angle from true north to grid north, while magnetic declination is the angle from true north to magnetic north. The calculator does not derive either input from a coordinate, map projection, date, or magnetic model. Use values applicable to the same location and observation date. Its purpose is to combine known inputs and expose the signed corrections between all three references without hiding their direction.
Apply the offsets without guessing the sign
Each returned conversion field is an additive correction. To convert a bearing, add the field whose name starts with the bearing's current reference and ends with the desired reference. For example, add <code>grid_to_true_offset_deg</code> to a grid bearing to obtain a true bearing. Add <code>grid_to_magnetic_offset_deg</code> to move directly from grid to magnetic without performing two separate steps. The reverse fields are exact signed inverses before rounding. Under the declared convention, true bearing equals grid bearing plus convergence, and magnetic bearing equals true bearing minus declination. Combining those equations gives magnetic bearing equals grid bearing plus convergence minus declination. The reported <code>grid_declination_deg</code> is the signed angle from grid north to magnetic north, calculated as magnetic declination minus grid convergence; consequently, the correction applied to a grid bearing to obtain a magnetic bearing is its negative. After adding an offset, normalize the final bearing into the interval your workflow uses, commonly zero inclusive to 360 exclusive. The offsets themselves are normalized to the signed interval from greater than minus 180 through 180 degrees.
Choose and verify suitable source values
Grid convergence belongs to a particular projected coordinate reference system and point. Do not reuse a convergence value from another grid zone or assume that the neatline of a printed map has the same relationship to true north everywhere on the sheet. Magnetic declination also belongs to a place and epoch because the magnetic field changes over time. Obtain it from a current authoritative magnetic model, chart, or field record, and check whether that source uses east-positive signed degrees or an east/west label. Convert west values to negative numbers before submission. A practical verification is to take any test bearing, convert it around a closed loop, and confirm that it returns to its starting value after bearing normalization. For instance, apply grid-to-true and then true-to-grid; their offsets should cancel. Likewise, grid-to-magnetic and magnetic-to-grid should cancel. The optional precision controls only the displayed decimal places, not a claim about survey accuracy. Preserve enough decimals for your work, but do not imply that rounded or approximate source inputs are more accurate merely because the calculator can print additional digits. API use is priced at $0.002 per request.
What you can do with it
Prepare a navigation worksheet
Turn published convergence and declination values into explicit corrections for grid, true, and magnetic bearings.
Check survey calculations
Verify that a field or office workflow applies the correct sign when changing the north reference of an azimuth.
Build reference-aware mapping software
Generate deterministic conversion constants and retain the input angles and sign convention alongside the result.
FAQ
What is grid declination?
Here it is the signed angle from grid north to magnetic north. With east-positive convergence and declination, it equals magnetic declination minus grid convergence.
Which sign convention does the calculator use?
Clockwise or east angles are positive; counterclockwise or west angles are negative. Every named offset is added to a bearing in the source reference.
How do I convert a grid bearing to a magnetic bearing?
Add grid_to_magnetic_offset_deg to the grid bearing, then normalize the resulting bearing to your preferred range.
Does this calculate convergence or magnetic declination from coordinates?
No. It combines values you already have. Determine convergence from the relevant projection and obtain declination for the correct place and date.
What does an API request cost?
Each API request costs $0.002. The calculation is also suitable for the free browser executor because it uses deterministic local arithmetic.
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/grid-to-geographic-offset \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"grid_convergence_deg":2.25,"magnetic_declination_deg":7.5}'const res = await fetch("https://api.kit.forhosting.com/geo/grid-to-geographic-offset", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"grid_convergence_deg": 2.25,
"magnetic_declination_deg": 7.5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/grid-to-geographic-offset",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"grid_convergence_deg": 2.25,
"magnetic_declination_deg": 7.5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/grid-to-geographic-offset", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"grid_convergence_deg":2.25,"magnetic_declination_deg":7.5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"grid_convergence_deg":2.25,"magnetic_declination_deg":7.5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/grid-to-geographic-offset", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"grid_convergence_deg": 2.25,
"magnetic_declination_deg": 7.5
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.grid_to_geographic_offset",
"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. |