geodesy op• Data kinds: none → points (an op determined by its arguments alone — it takes no image or data input)
• Call: import fullseye as fs; fs.ledger.dem_enu_from_geodetic(lat_deg, lon_deg, h_m, lat0_deg, lon0_deg, h0_m) (to call the implementation directly, import demops; demops.dem_enu_from_geodetic(lat_deg, lon_deg, h_m, lat0_deg, lon0_deg, h0_m); from the registry, opsdem.get("dem_enu_from_geodetic"))
Geodetic coordinates → local ENU (east, north, up) around a reference point [m] (points).
Most site drawings, robot maps and point clouds are written as "east, north, up from an origin". The conversion from ECEF is 1 rotation at the reference point: ENU = R(lat0, lon0) (X - X0).
★ It is not plane rectangular coordinates (a projection). ENU corresponds to orthographic projection onto the plane tangent at the reference point, and the farther the distance, the more it drops in height by the Earth's curvature —— about 7.8 m at 10 km, about 780 m at 100 km. Treating a wide area as "flat xy" means throwing this drop away.
Args:
lat_deg / lon_deg: latitude/longitude of the points [deg]. Arrays allowed.
h_m: ellipsoidal height of the points [m].
lat0_deg / lon0_deg / h0_m: geodetic coordinates of the reference point (origin).
Returns:
(n, 3) of (east, north, up) [m]. The reference point itself is exactly (0, 0, 0).
Checkable by closed form: (0, 0, 0) at the reference point, round trip with dem_geodetic_from_enu at the 1e-9 m level, and agreement with the result of rotating it oneself via the existing dem_geodetic_to_ecef (cross-check via a separate path).
ValueError: non-finite values, latitude outside ±90, length mismatch.
• dem_terrain_analysis family guide
• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).
• Operator provenance and references — the sources of the research/methods this op family came from.
• The canonical algorithm (author, year) and its uses are named in the family usage guide above.
• poc_geodetic_benchmarks_real — py -3.11 examples/poc_geodetic_benchmarks_real.py
• poc_geodetic_height_frames — py -3.11 examples/poc_geodetic_height_frames.py
points as input)dem_ecef_to_geodetic · dem_geodetic_from_enu
geodesy)dem_geodetic_to_ecef · dem_ecef_to_geodetic · dem_geocentric_grid · dem_earth_curvature_drop · dem_cell_size_webmercator · dem_geodetic_slope · dem_geoid_height · dem_height_frame_convert
*Provenance: demops.py — DEM operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.