Skip to content

Clarification on Input files (loc, obs, rdn), and about isofit.core.geometry lines 88-89 #609

@sreid19

Description

@sreid19

Clarification Needed on Input Data for Isofit

It is difficult to find comprehensive documentation from NEON on all these parameters. Below is my current understanding of the required input data for Isofit, based on NEON documents and the Isofit source code. I am requesting confirmation or clarification on the correctness of these interpretations.

Data Generation for Isofit

LOC File

The loc file contains three channels:

  1. Longitude (loc_img[:, :, 0]):
    Range: -180 to 180 degrees. West being negative and east being positive.

  2. Latitude (loc_img[:, :, 1]):
    Range: -90 to 90 degrees. South being negative and north being positive.

  3. Surface Elevation (loc_img[:, :, 2]):
    Elevation in meters.

OBS File

The obs file contains multiple channels describing the observation geometry and related parameters:

  1. Path Length (obs_img[:, :, 0]):

    • Units: meters
    • Definition: Distance from sensor to ground.

    Using this publication, I derived:

    $$d = R_E \left[ \sqrt{\left( \frac{H + R_E}{R_E}\right)^2 - \cos^2(\epsilon_0)} - \sin(\epsilon_0) \right]$$

    Where:

    • $R_E$: Earth's radius in meters
    • $H$: Satellite's altitude in meters
    • $\epsilon_0$: Elevation angle (in degrees)

    Note: The WorldView metadata gives an elevation angle from -90 to +90 degrees. This formula expects 0–90 degrees, so I take the absolute value of the provided angle.

  2. To-Sensor Azimuth (obs_img[:, :, 1]):

    • Units: degrees
    • Range: 0 to 360, clockwise from North. As measured by an observer sitting on the point being measured.
  3. To-Sensor Zenith (obs_img[:, :, 2]):

    • Units: degrees
    • Range: 0 to 90 from zenith. As measured by an observer sitting on the point being measured.
      The metadata has -90-90 degrees; convert as:
      $\text{Converted Zenith} = -( \text{Satellite Elevation Angle} ) + 90$
      If this exceeds 90, Isofit should fail.
  4. To-Sun Azimuth (obs_img[:, :, 3]):

    • Units: degrees
    • Range: 0 to 360, clockwise from North. As measured by an observer sitting on the point being measured.
  5. To-Sun Zenith (obs_img[:, :, 4]):

    • Units: degrees
    • Range: 0 to 90 from zenith. As measured by an observer sitting on the point being measured.
      The metadata has -90-90 degrees; convert as:
      $\text{Converted Zenith} = -(\text{Sun Elevation Angle}) + 90$
  6. Phase Angle (obs_img[:, :, 5]):

    • Units: degrees
    • Represented as the solar phase angle.

    Calculation:
    $n_{sun} = \sin \phi_s \cos \theta_s \hat{x} + \sin \phi_s \sin \theta_s \hat{y} + \cos \phi_s \hat{z}$
    $n_{obs} = \sin \phi_o \cos \theta_o \hat{x} + \sin \phi_o \sin \theta_o \hat{y} + \cos \phi_o \hat{z}$
    $\theta_{\text{phase}} = \arccos(n_{\text{sun}} \cdot n_{\text{obs}})$

    I'm using this interpretation based on available references, but would appreciate confirmation.

  7. Slope (obs_img[:, :, 6]):

    • Units: degrees
    • Slope of the DEM. Currently set to 0 to assume flat ground.
  8. Aspect (obs_img[:, :, 7]):

    • Units: degrees
    • Aspect of the DEM, set to 0 (North), shouldn't matter since the slope is 0.
  9. Cosine I (obs_img[:, :, 8]):

    • Dimensionless
    • Cosine of the effective solar zenith angle:
      $\cos(i) = \cos(\theta_s)\cos(\theta_n) + \sin(\theta_s)\sin(\theta_n)\cos(\phi_s - \phi_n)$
      Where:
      $\theta_s$ is the Solar zenith angle (in degrees)
      $\theta_n$ is the Terrain slope (in degrees)
      $\phi_s$ is the Solar azimuth angle (in degrees)
      $\phi_n$ is the Topographic azimuth (in degrees)
  10. GPS Time (obs_img[:, :, 9]):

    • Units: hours (0–23)
    • The float time when the collection occurred.
  11. Earth-Sun Distance (obs_img[:, :, 10]):

    • Units: AU
    • Computed using Astropy with the given time.

RDN File

The rdn file contains three channels:

  1. Radiance (rdn_img[:, :, 0]):

    • Units: $\mu W cm^{-2} Sr^{-1} nm^{-1}$
    • Derived using ENVI and the TIL file.
  2. Wavelength (rdn_img[:, :, 1]):

    • Units: nm
  3. FWHM (rdn_img[:, :, 2]):

    • Units: nm

isofit.core.geometry

    if loc is not None:
        self.surface_elevation_km = loc[2] / 1000.0
        self.latitude = loc[1]  # Northing
        self.longitude = loc[0]  # Westing
        if self.longitude < 0:
            self.longitude = 360.0 - self.longitude
This code block indicates the loc info should have the longitude increasing in the west direction? Also, if longitude is negative wouldn't subtracting it from 360 make it larger than 360?

Request:

  • Could anyone familiar with the Isofit input format confirm whether these interpretations and conversions are correct? Any additional clarification or official references would be greatly appreciated.
  • Help understanding this block in the source code.

I have gotten through the errors and have started getting some results. They are starting to look good, and before I start trying to tune isofit settings and MODTRAN settings, I want to ensure my input is correctly formatted. Thank you!

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions