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:
-
Longitude (loc_img[:, :, 0]):
Range: -180 to 180 degrees. West being negative and east being positive.
-
Latitude (loc_img[:, :, 1]):
Range: -90 to 90 degrees. South being negative and north being positive.
-
Surface Elevation (loc_img[:, :, 2]):
Elevation in meters.
OBS File
The obs file contains multiple channels describing the observation geometry and related parameters:
-
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.
-
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.
-
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.
-
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.
-
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$
-
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.
-
Slope (obs_img[:, :, 6]):
- Units: degrees
- Slope of the DEM. Currently set to 0 to assume flat ground.
-
Aspect (obs_img[:, :, 7]):
- Units: degrees
- Aspect of the DEM, set to 0 (North), shouldn't matter since the slope is 0.
-
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)
-
GPS Time (obs_img[:, :, 9]):
- Units: hours (0–23)
- The float time when the collection occurred.
-
Earth-Sun Distance (obs_img[:, :, 10]):
- Units: AU
- Computed using Astropy with the given time.
RDN File
The rdn file contains three channels:
-
Radiance (rdn_img[:, :, 0]):
- Units: $\mu W cm^{-2} Sr^{-1} nm^{-1}$
- Derived using ENVI and the TIL file.
-
Wavelength (rdn_img[:, :, 1]):
-
FWHM (rdn_img[:, :, 2]):
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!
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
locfile contains three channels:Longitude (
loc_img[:, :, 0]):Range: -180 to 180 degrees. West being negative and east being positive.
Latitude (
loc_img[:, :, 1]):Range: -90 to 90 degrees. South being negative and north being positive.
Surface Elevation (
loc_img[:, :, 2]):Elevation in meters.
OBS File
The
obsfile contains multiple channels describing the observation geometry and related parameters:Path Length (
obs_img[:, :, 0]):Using this publication, I derived:
Where:
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.
To-Sensor Azimuth (
obs_img[:, :, 1]):To-Sensor Zenith (
obs_img[:, :, 2]):The metadata has -90-90 degrees; convert as:
If this exceeds 90, Isofit should fail.
To-Sun Azimuth (
obs_img[:, :, 3]):To-Sun Zenith (
obs_img[:, :, 4]):The metadata has -90-90 degrees; convert as:
Phase Angle (
obs_img[:, :, 5]):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.
Slope (
obs_img[:, :, 6]):Aspect (
obs_img[:, :, 7]):Cosine I (
obs_img[:, :, 8]):Where:
GPS Time (
obs_img[:, :, 9]):Earth-Sun Distance (
obs_img[:, :, 10]):RDN File
The
rdnfile contains three channels:Radiance (
rdn_img[:, :, 0]):Wavelength (
rdn_img[:, :, 1]):FWHM (
rdn_img[:, :, 2]):isofit.core.geometry
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:
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!