geodesy op• Data kinds: depth → signal
• Call: import fullseye as fs; fs.ledger.dem_geoid_height(geoid, lat_deg, lon_deg, lat0_deg, lon0_deg, d_lat_deg, d_lon_deg) (to call the implementation directly, import demops; demops.dem_geoid_height(geoid, lat_deg, lon_deg, lat0_deg, lon0_deg, d_lat_deg, d_lon_deg); from the registry, opsdem.get("dem_geoid_height"))
Bilinearly interpolates a geoid-height grid at a latitude/longitude and returns N [m] (signal).
GNSS returns the ellipsoidal height h; maps and design drawings use the orthometric height H. The difference is the geoid height N (H = h - N), which near Japan is roughly +30 to +40 m. This op is a tool for reading published geoid model grids (equally spaced grids like the GSIGEO / EGM family), and does not hold the model itself —— which version was used is the caller's responsibility, and when the version changes the heights move by a few cm.
Args:
geoid: (H, W) geoid height [m]. geoid[0, 0] is
(lat0_deg, lon0_deg); as the row increases the latitude increases by d_lat_deg,
as the column increases the longitude increases by d_lon_deg (either sign is fine).
lat_deg / lon_deg: latitude/longitude of the points to look up [degrees]. Arrays allowed.
lat0_deg / lon0_deg: grid origin [degrees].
d_lat_deg / d_lon_deg: grid step [degrees]. 0 is rejected.
Returns:
(n,) geoid heights [m].
What can be checked with a closed formula: for a grid where N is a linear function of latitude and longitude, bilinear interpolation is exact (machine precision). With quadratic terms, the error is bounded above by |∂²N| * d² / 8.
ValueError: grid not 2-D / smaller than 2x2 / non-finite, step 0 or non-finite, latitude outside ±90, and points outside the grid (sea areas or out-of-range are not silently filled with edge values —— an extrapolated geoid height is not a survey value).
• 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
signal as input)dem_height_frame_convert · dem_height_frame_residual
geodesy)dem_geodetic_to_ecef · dem_ecef_to_geodetic · dem_geocentric_grid · dem_earth_curvature_drop · dem_cell_size_webmercator · dem_geodetic_slope · dem_height_frame_convert · dem_height_frame_residual
*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.