Hammer projection calculator
Project a latitude and longitude onto the Hammer equal-area world map, or turn x and y back into coordinates: the point at latitude 0 and longitude 0 lands at the center, x 0 and y 0. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Lat deg
- 0
- Lon deg
- 0
- R
- 1
- Decimal places
- 6
- Calculation mode
- Forward
- X
- 0
- Y
- 0
Hammer (Hammer–Aitoff) equal-area projection forward/inverse. Search intent: hammer projection calculator. No network calls or random seeds are required. Failed jobs are not billed.
One world map, two directions
The Hammer projection, also known as Hammer–Aitoff, draws the whole globe on a flat map while keeping areas in proportion: a country twice the size of another on the sphere also takes twice the space on the map. This calculator works in both directions. Forward, you give a latitude and a longitude in degrees and get the map position x and y. Inverse, you give x and y and recover the latitude and longitude. The point at latitude 0 and longitude 0 sits exactly at the center of the map, at x 0 and y 0.
How to avoid the usual mistakes
Enter angles in degrees, not radians, and keep the same sphere radius when you project and when you convert back, or the round trip will not land on the starting point. A radius of 1 gives normalized coordinates that are easy to scale later. If you need fewer digits, ask for a number of decimals; rounding then happens once, half up, from the full result, so repeated conversions do not drift. Invalid values are refused before any calculation, and the same input always returns the same answer, which makes the results safe to reuse in spreadsheets and teaching material.
What you can do with it
Teaching
Pinned goldens.
FAQ
What does the Hammer projection preserve?
It preserves area. Regions that are the same size on the globe also cover the same area on the map, so it suits world maps where you want to compare the size of regions fairly.
Can I turn map x and y back into latitude and longitude?
Yes. Choose the inverse direction, enter x and y with the same radius used to create them, and the calculator recovers the latitude and longitude. Projecting a point and then inverting it brings you back to where you started.
What does the sphere radius change?
It sets the size of the sphere the map is drawn from. With a radius of 1 you get coordinates on the unit sphere, and a larger radius gives proportionally larger x and y. Use the same radius when you convert back.
How are the results rounded?
Only when you ask for a number of decimals, and only once. The calculator works with the unrounded values and rounds half up at the very end, so a value exactly halfway goes up and no rounding error builds up along the way.
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/geo/hammer \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"lat_deg":0,"lon_deg":0}'const res = await fetch("https://api.kit.forhosting.com/geo/hammer", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"lat_deg": 0,
"lon_deg": 0
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/hammer",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"lat_deg": 0,
"lon_deg": 0
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/hammer", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"lat_deg":0,"lon_deg":0}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"lat_deg":0,"lon_deg":0}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/hammer", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"lat_deg": 0,
"lon_deg": 0
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.hammer",
"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. |
Technical notes
The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS hooks, automation, or teaching demos.
How it works
Hammer (Hammer–Aitoff) equal-area projection forward/inverse. x,y from φ,λ on unit sphere; inverse recovers lat/lon. No network calls or random seeds are required. Failed jobs are not billed. No network calls or random seeds are required. Failed jobs are not billed. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS hooks, automation, or teaching demos. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS hooks, automation, or teaching demos.
Inputs, limits and rounding
Optional decimals use half-up once. Optional output fields are omitted, never null. No network calls or random seeds are required. Failed jobs are not billed. No network calls or random seeds are required. Provide required JSON fields with DOM-safe names. Invalid types raise invalid_input. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS hooks, automation, or teaching demos. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS hooks,
When to use it
Use when search intent matches. Hammer (Hammer–Aitoff) equal-area projection forward/inverse. EN-only delivery; Nitro hydrates locales. No network calls or random seeds are required. Failed jobs are not billed. No network calls or random seeds are required. Failed jobs are not The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS hooks, automation, or teaching demos. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS hooks, automation, or teaching demos.
Integration use cases
Quick check
Free widget.
Automation
API same JSON.
Technical questions
Free?
Yes tier A.
Network?
No.
Bad input?
invalid_input.
API?
Yes.
Locales?
EN-only; Nitro hydrates.