Point to local ENU, NED, and AER
Expresses a target point in a local tangent plane at an origin: east-north-up, north-east-down, and azimuth-elevation-range, with the rotation matrix on request.
The target is at azimuth 0°, elevation 90°, range 1,000 m. It is straight up or down, so the azimuth is shown as 0.
- The target is straight above or below the origin, so azimuth is undefined; 0 is returned.
- Elevation
- Slant range
- East
- North
- Up
- Down
Provenance
- Computed by
- geodesy.frame.to-local 1.0.0, core 0.1.0
- Model
- Local east-north-up frame, WGS 84
- Accuracy
- Round trips within 1e-8 m for targets within 1,000 km
- Notes
- 1 shown with the answer
- Cites
- Karney, C. F. F., GeographicLib, GeographicLib Geocentric and LocalCartesian classes
Something look off?
How we got thisFormula, worked example, sources, and proof
Model: ECEF difference rotated into the origin's east-north-up frame (GeographicLib LocalCartesian)
Accuracy: Round trips within 1e-8 m for targets within 1,000 km
When to use this: Use this when you want a target described the way an observer at a station sees it: east, north and up, north, east and down, or an azimuth, elevation and range. It is the tool behind sky plots, antenna and camera aiming, and any check of where one point lies relative to another.
Limitations: The plane is tangent at the origin, so it is a local description rather than a map projection, and it takes no account of refraction, which bends both light and radio near the horizon, or of obstacles between the two points. The azimuth is true, and heights are above the ellipsoid rather than above sea level.
Worked example: A point 1,000 m overhead. Source: add-geodesy-suite scenario: elevation 90°, range 1,000 m, azimuth 0 with AZIMUTH_UNDEFINED. It is golden test vector v001, and every build checks the tool still gives its answer within its tolerance.
You enter
- Origin height
- 300 m
- Target height
- 1300 m
- Target latitude
- 40.446111 deg
- Origin latitude
- 40.446111 deg
- Target longitude
- -79.982222 deg
- Origin longitude
- -79.982222 deg
You get
- Azimuth
- 0°
- Elevation
- 90°
- Slant range
- 1,000 m
- East
- 0 m
- North
- 0 m
- Up
- 1,000 m
- Down
- -1,000 m
- Horizontal distance
- 0 m
Review: Not yet independently reviewed by a geodesist.
Last verified: 2026-09-18, when a maintainer last confirmed this tool's sources at the issuer. See the sources ledger.
Status: version 1.0.0, core 0.1.0. See this tool in the verification report.
Changes
- 2026-09-19, changed: The four frame conversions are stable: geodetic to ECEF and back, and to and from a local east-north-up frame. They reproduce the IOGP Guidance Note 7-2 worked examples and agree with GeographicLib's CartConvert within 15 nm on 1,000 ECEF points (poles to beyond geostationary orbit) and 500 local targets. Results are unchanged. Changelog
Checked against: 21 golden test vectors (download the test vectors, each with its source and tolerance). See how results are checked and every source.
Sources
- GeographicLib Geocentric and LocalCartesian classes, Karney, C. F. F., GeographicLib, GeographicLib 2.x. Geocentric.cpp: Vermeille's closed-form inverse; LocalCartesian.cpp: ENU rotation. Read free.
Terms
- AER: azimuth, elevation, range
- Direction and distance from a point: azimuth from north, elevation above the horizontal, and straight-line range. Source: GeographicLib
- ECEF: Earth-centered, Earth-fixed
- Cartesian X, Y, Z coordinates in meters from Earth's center, turning with the Earth. X points to 0° longitude on the equator and Z to the North Pole. Source: Department of Defense World Geodetic System 1984
- ENU: east, north, up
- Local Cartesian coordinates centered on a chosen point, with axes toward east, north, and up. Source: GeographicLib
- NED: north, east, down
- Local Cartesian axes toward north, east, and down, as aircraft navigation uses them. Source: GeographicLib