UTM zone number from longitude
This UTM zone number calculator turns a longitude into one of the 60 longitudinal Universal Transverse Mercator zones.
Run — free
Add latitude when the coordinate may fall in Norway or Svalbard, where the standard six-degree strips are adjusted to keep important land areas within suitable zones. The result includes the zone number, its central meridian, and a clear indication of whether a special case changed the ordinary longitude-only answer. It is deterministic, requires no map service, and can be used interactively or through the API for $0.002 per request.
How longitude becomes a UTM zone number
The Universal Transverse Mercator system divides most of Earth between 80 degrees south and 84 degrees north into 60 numbered zones. Under the ordinary rule, each zone spans six degrees of longitude, beginning with zone 1 at 180 degrees west and continuing eastward to zone 60. This calculator validates the longitude, applies that division, and returns the selected number together with the zone's central meridian. The exact antimeridian endpoints need deliberate handling: negative 180 degrees belongs to zone 1, while positive 180 degrees is reported as zone 60. A latitude is not necessary for an ordinary lookup. If you omit it, the result is strictly the zone implied by longitude. That makes the tool useful for quickly classifying a meridian, checking a dataset whose region cannot trigger an exception, or generating a baseline result before more coordinate details are available. Decimal numbers and numeric strings are accepted, but values outside the published longitude range are rejected instead of silently wrapped around the globe.
Why Norway and Svalbard also require latitude
A longitude alone cannot identify every official UTM zone because two northern regions use widened or shifted boundaries. In southwest Norway, coordinates from 56 degrees inclusive to 64 degrees exclusive latitude and from 3 degrees inclusive to 12 degrees exclusive longitude use zone 32. Farther north, Svalbard coordinates from 72 degrees inclusive to 84 degrees exclusive latitude use four widened zones: longitudes from 0 to 9 use zone 31, 9 to 21 use zone 33, 21 to 33 use zone 35, and 33 to 42 use zone 37. These intervals are treated as half-open so a coordinate exactly on a boundary has one unambiguous answer. Supply latitude whenever either region is possible; the response labels the applied exception. Elsewhere, latitude leaves the ordinary zone unchanged. The accepted latitude range matches standard UTM coverage. Locations farther north or south normally use the Universal Polar Stereographic system, so rejecting those values prevents a plausible-looking UTM number from being mistaken for a complete projection choice.
Using the result correctly in mapping workflows
The returned zone number is one component of a projected coordinate reference, not a complete coordinate conversion. A practical UTM reference also needs a hemisphere or latitude band, a datum such as WGS 84, and projected easting and northing values. Use this result when selecting a zone, validating metadata, routing records to a projection process, or checking whether two locations are likely to share the same UTM grid. Do not treat the central meridian as the input longitude; it is the reference meridian assigned to the selected zone. Near a zone boundary, two nearby points can legitimately receive different numbers, and forcing an entire cross-boundary dataset into individually selected zones may make measurements awkward. Many projects instead choose one consistent projected coordinate reference system after considering their full geographic extent. The calculator does not transform coordinates, infer a datum, or return an EPSG code because latitude and hemisphere context may be absent. Its narrow output stays auditable: input longitude, optional latitude, zone, central meridian, exception label, and a concise human-readable explanation.
What you can do with it
Select a projection zone
Find the candidate UTM zone before configuring a GIS export or coordinate transformation.
Validate coordinate metadata
Compare a stored zone number with the longitude and apply northern special cases when latitude is available.
Route spatial records
Assign incoming coordinates to zone-specific processing while preserving an explicit exception indicator.
FAQ
Can a UTM zone be found from longitude alone?
Yes for the ordinary six-degree rule. Latitude is needed to determine whether the Norway or Svalbard exception changes that result.
What happens at longitude 180 degrees?
Positive 180 degrees returns zone 60. Negative 180 degrees returns zone 1, making the two antimeridian endpoints explicit.
Why is latitude limited to the UTM coverage range?
Standard UTM covers latitudes from 80 degrees south through 84 degrees north. Polar locations normally use UPS instead.
Does the result include an EPSG code?
No. An EPSG choice also depends on hemisphere and datum, so a longitude-only lookup does not contain enough information.
Does this convert latitude and longitude to easting and northing?
No. It identifies the zone number and central meridian; use a coordinate conversion tool for projected coordinates.
What does the API request cost?
Each API request costs $0.002. The same deterministic calculation is also available in the browser.
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/utm-zone-from-lon \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"lon":6}'const res = await fetch("https://api.kit.forhosting.com/geo/utm-zone-from-lon", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"lon": 6
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/utm-zone-from-lon",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"lon": 6
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/utm-zone-from-lon", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"lon":6}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"lon":6}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/utm-zone-from-lon", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"lon": 6
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.utm_zone_from_lon",
"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. |