Geodesic polygon area calculator on the WGS84 ellipsoid
A one-degree square at the equator, from 0° to 1° of latitude and longitude, covers 12308776177.673 m², or 1230877.6177673 hectares. List at least three vertices in order around the boundary and get the true area on WGS84. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Runs in your browser. Free, unlimited — your data never leaves this page.
The geodesic polygon area calculator measures a boundary drawn from latitude and longitude vertices on the WGS84 ellipsoid. Instead of treating coordinates as points on a flat map, it joins each consecutive pair with an ellipsoidal geodesic and evaluates the enclosed surface area. The result includes both square meters and hectares, making it immediately useful for land, environmental, mapping, and survey-adjacent workflows. Supply vertices in boundary order; the final edge back to the first point is added automatically.
Prepare a clear ordered boundary
Provide at least three vertices, with every vertex containing a latitude and longitude in decimal degrees. List them in the order that a person would walk around the boundary, either clockwise or counterclockwise. You do not need to repeat the first point at the end, because the calculator closes the polygon automatically; if you do repeat it, the duplicate closing point is recognized.
Longitude must remain between minus 180 and 180, and latitude between minus 90 and 90. Consecutive duplicate points are rejected because they do not define a usable edge. This capability assumes a simple boundary.
A self-crossing bow-tie, duplicated loops, or an unordered cloud of points does not have the ordinary parcel-style meaning most users expect, so clean those geometries before calculating. The returned value is the smaller positive enclosed area and does not depend on winding direction.
Understand geodesic edges and WGS84 area
Map coordinates live on a curved reference surface, while a screen map is a projection. Measuring a projected polygon can therefore introduce distortion that changes with location, scale, and the projection selected. This calculator works on the WGS84 ellipsoid itself.
For every neighboring pair of vertices it solves the ellipsoidal inverse geodesic, follows that shortest geodesic edge, and integrates the ellipsoid surface enclosed by the complete path. That detail matters because a geodesic between two locations is generally not the same curve as a straight segment in Web Mercator, nor is it always a line of constant latitude. The deterministic computation uses bounded distance-based subdivision of each solved geodesic and an ellipsoidal strip-area integral.
Results are rounded to the nearest thousandth of a square meter, with hectares derived from that value.
Use the result responsibly in applications
Square meters are convenient for engineering calculations and direct comparisons, while hectares are often easier to read for farms, conservation zones, parks, and larger parcels. Both fields describe exactly the same computed area, so choose one canonical field when storing results and use the other for display. A practical workflow is to validate coordinate ranges at collection time, preserve an immutable copy of the submitted boundary, calculate its area, and store the capability result beside the source geometry and its coordinate reference system.
If boundaries may cross the antimeridian, retain their natural traversal order; the edge solver unwraps longitude along each geodesic rather than treating the date line as a planar discontinuity. Before using area for billing, title, taxation, construction, or compliance, compare it with the governing data and accuracy rules. GPS precision, digitizing choices, uncertain boundaries, and source datum conversion can dominate the small numerical error of the calculation itself.
What you can do with it
Measure a field boundary
Turn ordered GPS or mapping vertices into square meters and hectares without choosing a local map projection.
Check conservation areas
Calculate the ellipsoidal surface area of an environmental boundary for reports and dataset validation.
Validate mapping imports
Recompute polygon area during ingestion and flag records whose supplied area differs materially from the WGS84 result.
FAQ
Must I repeat the first vertex at the end?
No. The final vertex is automatically connected to the first. A repeated closing vertex is also accepted.
Does clockwise order produce a negative area?
No. Clockwise and counterclockwise traversal return the same smaller positive enclosed area.
Are the edges straight on a map?
They are shortest geodesics on the WGS84 ellipsoid, so they may appear curved in a projected map.
Can I submit a self-intersecting polygon?
The input is intended for a simple ordered boundary. Repair or split self-intersections before relying on the result.
Can I use the result for a legal land survey?
No. It is a geographic area calculation on the WGS84 ellipsoid, useful for land, environmental and mapping work, but it does not replace a legally controlled cadastral survey.
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/geodesic-polygon-area \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"vertices":[{"latitude":0,"longitude":0},{"latitude":0,"longitude":1},{"latitude":1,"longitude":1},{"latitude":1,"longitude":0}]}'const res = await fetch("https://api.kit.forhosting.com/geo/geodesic-polygon-area", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"vertices": [
{
"latitude": 0,
"longitude": 0
},
{
"latitude": 0,
"longitude": 1
},
{
"latitude": 1,
"longitude": 1
},
{
"latitude": 1,
"longitude": 0
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/geodesic-polygon-area",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"vertices": [
{
"latitude": 0,
"longitude": 0
},
{
"latitude": 0,
"longitude": 1
},
{
"latitude": 1,
"longitude": 1
},
{
"latitude": 1,
"longitude": 0
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/geodesic-polygon-area", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"vertices":[{"latitude":0,"longitude":0},{"latitude":0,"longitude":1},{"latitude":1,"longitude":1},{"latitude":1,"longitude":0}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"vertices":[{"latitude":0,"longitude":0},{"latitude":0,"longitude":1},{"latitude":1,"longitude":1},{"latitude":1,"longitude":0}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/geodesic-polygon-area", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"vertices": [
{
"latitude": 0,
"longitude": 0
},
{
"latitude": 0,
"longitude": 1
},
{
"latitude": 1,
"longitude": 1
},
{
"latitude": 1,
"longitude": 0
}
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.geodesic_polygon_area",
"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_vertices | 1000 |
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
Prepare a clear ordered boundary
For a reproducible automation, keep the original coordinate precision and boundary order rather than rounding or sorting points before the request. This preserves the geometry that was actually observed or exported by the source system.
Understand geodesic edges and WGS84 area
Extremely close-to-antipodal endpoints can make the shortest edge ambiguous or prevent the iterative WGS84 solution from converging; such an edge is rejected with a clear input error instead of returning a plausible but unreliable number. This is a geographic area calculation, not a replacement for a legally controlled cadastral survey.
Technical questions
What does a request cost?
The API base price is $0.002 per request.