libera_utils.footprint_matching.geometry.surface_cell_ecef_km#

libera_utils.footprint_matching.geometry.surface_cell_ecef_km(cell_lats_deg: ndarray, cell_lons_deg: ndarray) → ndarray#

ECEF (km) of surface grid cells, raveled to (N, 3) in the input’s row-major order.

Thin public wrapper over curryer’s closed-form geodetic_to_ecef that flattens the (possibly 2-D) cell coordinate grids the same way project_to_angular() does, so a surface ECEF computed once with it is byte-identical to the one project_to_angular() would compute inline. Because the cells’ geometry is independent of the viewing frame, the result can be reused across every footprint that sees the same cells.

Parameters:
  • cell_lats_deg (np.ndarray) – Grid-cell latitudes/longitudes in degrees (any common shape). Assumed on the surface (ellipsoidal height 0).

  • cell_lons_deg (np.ndarray) – Grid-cell latitudes/longitudes in degrees (any common shape). Assumed on the surface (ellipsoidal height 0).

Returns:

(N, 3) ECEF positions in km, where N = cell_lats_deg.size in row-major order.

Return type:

np.ndarray