Vertical exaggeration factor calculator for terrain profiles
A terrain cross section often uses one scale for distance along the ground and another for elevation, making slopes and landforms appear taller or flatter than their true proportions.
Run — free
This vertical exaggeration factor calculator compares the two representative-fraction scales and reports the multiplier directly. Enter each scale as its denominator: for example, enter 10000 for a vertical scale of 1:10,000 and 50000 for a horizontal scale of 1:50,000. The result is deterministic, includes a plain-language interpretation, and helps readers document how a profile differs from an equal-scale view.
Enter both scales in the same representative-fraction form
Start with the scale printed for the elevation axis and the scale printed for the distance axis. Enter only each denominator, without the leading 1, colon, commas, or unit symbols. A vertical scale written as 1:5,000 therefore becomes 5000, while a horizontal scale written as 1:25,000 becomes 25000. Both scales must describe consistent real and plotted units. Representative fractions are naturally unitless, so a correctly written pair can be compared even if you think in metres, feet, centimetres, or inches. Do not enter an elevation range, profile height, map distance, or conversion factor in place of a denominator. If one axis is expressed as a statement such as one centimetre equals 100 metres, convert it first: 100 metres equals 10,000 centimetres, so the representative fraction is 1:10,000 and the denominator is 10000. Careful normalization prevents the most common error, which is comparing unlike units and obtaining a plausible but incorrect multiplier.
Understand the ratio and the reported factor
The calculation divides the horizontal scale denominator by the vertical scale denominator. This is equivalent to dividing the vertical scale fraction by the horizontal scale fraction: (1 divided by the vertical denominator) divided by (1 divided by the horizontal denominator). For a vertical scale of 1:10,000 and a horizontal scale of 1:50,000, the factor is 50000 divided by 10000, or 5. A factor greater than 1 means the cross section enlarges vertical dimensions relative to horizontal dimensions; slopes look steeper and relief looks taller. A factor of exactly 1 means both axes share the same scale and the profile has no vertical exaggeration. A factor below 1 indicates vertical compression rather than exaggeration, and the result remains useful because it states that reduced proportion explicitly. The calculator retains enough decimal precision for practical documentation while removing insignificant trailing zeros. It also echoes both interpreted scales so you can check that the intended denominators reached the calculation.
Use exaggeration responsibly when reading terrain
Vertical exaggeration is a presentation property, not a correction to surveyed elevations. It can reveal subtle relief in a long regional profile, but it also changes the apparent angle of every slope and may make gentle landforms look dramatic. Record the factor beside the cross section so readers can distinguish visual emphasis from actual geometry. When comparing several profiles, use the same factor when possible, or label each profile clearly if their purposes require different scales. The factor alone does not calculate true slope, line-of-sight, cut-and-fill volume, geologic dip, or travel difficulty; those tasks require original horizontal and vertical measurements in compatible units. Very large factors deserve particular caution because small elevation noise, interpolation artifacts, and line thickness become visually prominent. This tool performs only the scale-ratio calculation and does not assess the accuracy of the underlying elevation model, survey, map, or digitized profile. For automated reports, the API returns the factor, normalized scale labels, and an interpretation for $0.002 per request.
What you can do with it
Label a topographic cross section
Calculate and publish the factor beside a profile so readers know how strongly its relief has been emphasized.
Check profiles before comparison
Identify whether two terrain sections use equal vertical proportions before comparing their apparent slopes and landforms.
Document a GIS export
Add an auditable scale ratio and interpretation to a map layout, field report, classroom exercise, or generated profile.
FAQ
What formula does the calculator use?
It divides the horizontal scale denominator by the vertical scale denominator. For vertical 1:10,000 and horizontal 1:50,000, the factor is 5.
What does a factor of 1 mean?
Both axes use the same scale, so the cross section shows terrain without vertical exaggeration or compression.
Can the result be less than 1?
Yes. A value below 1 means the elevation axis is vertically compressed relative to the horizontal axis.
Do the two scales need the same units?
Representative fractions are unitless when each side uses the same unit. Convert statement scales to valid representative fractions before entering their denominators.
How much does the API calculation cost?
Each API request costs $0.002. The same deterministic calculation is also available free 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/vertical-exaggeration \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"vertical_scale_denominator":10000,"horizontal_scale_denominator":50000}'const res = await fetch("https://api.kit.forhosting.com/geo/vertical-exaggeration", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"vertical_scale_denominator": 10000,
"horizontal_scale_denominator": 50000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/vertical-exaggeration",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"vertical_scale_denominator": 10000,
"horizontal_scale_denominator": 50000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/vertical-exaggeration", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"vertical_scale_denominator":10000,"horizontal_scale_denominator":50000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"vertical_scale_denominator":10000,"horizontal_scale_denominator":50000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/vertical-exaggeration", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"vertical_scale_denominator": 10000,
"horizontal_scale_denominator": 50000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.vertical_exaggeration",
"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. |