libera_utils.footprint_matching.geometry.compute_viewing_frames#

libera_utils.footprint_matching.geometry.compute_viewing_frames(boresight_lat_deg: ArrayLike, boresight_lon_deg: ArrayLike, subsatellite_lat_deg: ArrayLike, subsatellite_lon_deg: ArrayLike, *, satellite_radius_km: ndarray) → ViewingFrame#

Build every footprint’s viewing frame in one batched call.

Uses the same viewing geometry and scan-plane axes as the bounding box, so the angles project_to_angular() reads off a frame are consistent with the box. Off-Earth views have no frame: drop them (e.g. the None entries of compute_footprint_bounding_boxes()) before calling.

Parameters:
  • boresight_lat_deg (array_like) – Per-footprint boresight centroids, degrees.

  • boresight_lon_deg (array_like) – Per-footprint boresight centroids, degrees.

  • subsatellite_lat_deg (array_like) – Per-footprint geodetic spacecraft sub-points (L1B Subsatellite_Latitude / Subsatellite_Longitude), degrees.

  • subsatellite_lon_deg (array_like) – Per-footprint geodetic spacecraft sub-points (L1B Subsatellite_Latitude / Subsatellite_Longitude), degrees.

  • satellite_radius_km (np.ndarray) – 1-D array of each footprint’s spacecraft distance from Earth’s center (L1B Radius_of_Satellite_from_Center_of_Earth), km, one per footprint.

Returns:

The N batched frames.

Return type:

ViewingFrame

Raises:
  • ValueError – If an input is more than 1-D, the inputs do not share a length, or satellite_radius_km does not hold one radius per footprint.

  • MissingGeolocationError – If any footprint’s ephemeris fields are unusable or the footprint is not visible from its satellite.

  • OffLimbError – If any boresight latitude or longitude is fill, non-finite or out of range (an off-Earth view).