Skip to content

Surface reflectance (L2A)

drawing

Product Status BETA

Please be aware that L2A processing level is currently an experimental product still in active production. While we are proud of the results, you may encounter minor inconsistencies as we continue to calibrate our algorithms for global scale. Your feedback during this phase is invaluable as we move toward a finalized version.

If you have technical questions, require specific documentation, or wish to provide feedback on the performance of these L2A products, please reach out to your Account Manager, who will be happy to provide the necessary support.

Product description

L2A is a geometrically corrected, orthorectified product, with atmospheric correction applied to provide bottom of atmosphere surface reflectance values in 4 bands. Pixel values are scaled to surface reflectance (0 to 1) multiplied by a factor 10000 (1e4) to avoid float numbers. L2A has a resolution of 1m for Mark IV and 0.7m for Mark V, the same as L1D TOA.

Atmospheric correction method

1. Core Methodology

The processing pipeline utilizes the 6SV2.1 radiative transfer code1 (Second Simulation of the Satellite Signal in the Solar Spectrum) implemented via the Py6S interface2. This model provides a rigorous simulation of the solar radiation path, allowing us to convert Top-of-Atmosphere (TOA) data into accurate Bottom-of-Atmosphere (BOA) surface reflectance by accounting for:

  • Gas Absorption: Removing the effects of Ozone (\(O_3\)) and Water Vapor (\(H_2O\)).
  • Aerosol Scattering: Correcting for particles in the air that diffuse light.

2. Atmospheric Data Sourcing & Hierarchy

Inputs are sourced from VIIRS (Visible Infrared Imaging Radiometer Suite) products, adhering to Landsat Collection 2 standards3. We use a hierarchical logic to ensure the best available data is used for every capture.

Variable Primary Source (Priority 1) Secondary Source (Fallback) Default Value
Ozone (\(O_3\)) NOAA-20 CMG (VJ104ANC) Suomi-NPP (VNP04ANC) 6S Built-in Models
Water Vapor (\(H_2O\)) NOAA-20 CMG (VJ104ANC) Suomi-NPP (VNP04ANC) 6S Built-in Models
Aerosol (AOD) NOAA-20 Level-2 (AERDB_L2_VIIRS_NOAA20) Suomi-NPP (AERDB_L2_VIIRS_SNPP) 0.226

3. Spatial Assignment Logic

To maintain data integrity across different geographies, variables are assigned using the following multi-step logic:

Step 1: Capture-Level Validation

The system first scans the entire footprint of the capture. If valid atmospheric values are entirely missing for a variable, the Default Values (see table above) are applied to the whole capture.

Step 2: Tile-Level Extraction

If valid data is found at the capture level, we refine the data for each tile:

  • Averaging: If multiple VIIRS pixels intersect a tile, we use their mean.
  • Flagging: Tiles with no valid data intersection are marked for the gap-filling phase.
Step 3: Gap-Filling Strategy

Gaps are resolved based on the percentage of data loss:

  • High Data Loss (> 60% of tiles): Gaps are filled with the mean value of all available data from that specific capture.
  • Low Data Loss (< 60% of tiles): We apply a spatial interpolation algorithm to estimate missing values based on neighboring tiles.

4. Surface Reflectance Calculation

The conversion from TOA to BOA for each tile is performed using a polynomial inference method:

  1. Sampling: Calculate the \(5^{th}, 25^{th}, 50^{th}, 75^{th},\) and \(95^{th}\) percentiles of the TOA reflectance for each band.
  2. Simulation: Run the 6S radiative transfer code for these five specific points.
  3. Curve Fitting: Fit a 3rd-order polynomial to the resulting TOA–BOA reflectance pairs.
  4. Inference: Apply this polynomial to every pixel in the tile to derive the final surface reflectance.

5. Metadata Traceability

Each tile is delivered with a BOA_metadata.json file. This ensures every pixel's correction is traceable, documenting:

  • Values: The specific atmospheric variables used.
  • Source: The exact VIIRS product utilized.
  • Method: Whether the data was Directly sourced, Interpolated, or set as a Default.

6. Known Limitations

  • Radiometric Continuity: Because correction is calculated per tile, users may observe mild color jumps at tile boundaries.

Tiles

drawing The L2A tiles are available on the Archive STAC API. Each STAC item is a \(2~\)km by \(2~\)km square tile (plus \(1-1.5~\) meters extra in each direction).
They are aligned to a fixed discrete grid, aligned to the prime meridian of each UTM zone (coordinate \(500000~m\)). Each tile has a designated grid code included in the property grid:code as follows:

SATL-<GRID SIZE>-<UTM ZONE>_ <X>_<Y>,

where X and Y correspond to the easting and northing coordinates of the bottom left corner of the tile.

For example the grid:code SATL-2KM-10N_298_2062 should be interpreted as:

  • SATL grid of \(2~km\) by \(2~km\)
  • On UTM zone 10N
  • With the left bottom corner at \(298,000~m\) easting and \(2062,000~m\) northing.

The tiles have an overlap ranging from \(2-3~\) meters with neighbouring tiles in the grid.

Technical Specifications

Parameter

Mark IV

Mark V

Spectral bands

Blue : 450 - 510 nm
Green: 510 - 580 nm
Red : 590 - 690 nm
NIR : 750 - 900 nm

Blue : 450 - 517 nm
Green: 517 - 583 nm
Red : 597 - 690 nm
NIR : 759 - 890 nm

GSD

1m

0.7m

Scene Swath

4.8 - 5.5 Km1

6.8Km - 8.5Km1

Image bit depth

16 bit

Max Off-Nadir angle

± 25 deg

Algorithms applied

Atmospheric correction

Geolocation Accuracy

10m CE90. Varies with the availability of GCPs and cloud coverage2

Band alignment

<= 2px

Image format

GeoTiff, LZW lossless compression

Ancillary files

Cloud mask (GeoTiff), preview (PNG), thumbnail (PNG), BOA metadata (JSON) and imagery footprint in vector format.

\(^1\) Varies with altitude of the satellites and off-nadir angle.

\(^2\) Varies with terrain and only applicable for terrains with rich features.

STAC item

Assets

  1. thumbnail
  2. preview
  3. analytic
  4. cloud
  5. BOA_metadata

Non documented files or parameters should be ignored.

All assets follow the same basename template.

{DATE}_{TIME}_{SECOND_DECIMALS}_{SATELLITE}_{PRODUCT}_{PAYLOAD}_{VERSION}_{SUFFIX}.{EXTENSION}

  • DATE: Year(4 digits)month(2 digits)day(2 digits)
  • TIME: Hour(2 digits)minute(2 digits)second(2 digits)
  • SECOND_DECIMALS: All the decimal part from the timestamp seconds
  • SATELLITE: Satellite number
  • PRODUCT: L2A
  • PAYLOAD: MS for multispectral (4 bands)
  • VERSION: Check Changelog. Only present in the metadata asset.
  • SUFFIX: depends on the asset, can be empty.
  • EXTENSION: depends on the asset type.

All time values refer to the capture time in UTC. Hence the string 20220619_153346_938represent actually 2022-06-19 15:33:46.938.

Raster, preview and thumbnail

drawing drawing drawing







Cloud

Cloud masks are provided as single band GeoTIFFs. Check here for details and how masks are computed for L1D product. For L2A, the cloud masks are inherited from the corresponding L1D product.

CLOUD_MASKS

Example of clouds detected by Satellogic clouds detector.

BOA metadata

The BOA metadata asset descibes the atmospheric parameters that were used to calculate the atmospheric correction for each item.

Field Name Description Example
aerosol_model 6S model used - currently continental only
continental
aot_value Aerosol optical depth at 550nm
0.2
aot_source The source of the AOT value. Available: AERDB_L2_VIIRS_NOAA20 or AERDB_L2_VIIRS_SNPP or None
AERDB_L2_VIIRS_NOAA20
aot_status Text indicating the availability of AOT data.
  • data found - there was data at this location on this data
  • missing data - no data, using default of 0.226 (clear sky)
  • interpolated data - there was AOT data found of some tiles of the capture, and we used those to interpolate for this tile.
data found
ozone_value Ozone content ($cm-atm$)
0.3025
ozone_source The source of the ozone value. VNP04ANC or VJ104ANC
VJ104ANC
ozone_status Text indicating the availability of ozone concentration data.
  • data found - there was data at this location on this data
  • missing data - no data, in this case a predefined atmospheric model is used
  • interpolated data - there was AOT data found of some tiles of the capture, and we used those to interpolate for this tile.
data found
water_vapor_value Water vapor content ($g/cm^2$)
2.84
water_vapor_source The source of the water vapor value. VNP04ANC or VJ104ANC
VJ104ANC
water_vapor_status Text indicating the availability of water vapor concentration data.
  • data found - there was data at this location on this data
  • missing data - no data, in this case a predefined atmospheric model is used
  • interpolated data - there was water vapor data found of some tiles of the capture, and we used those to interpolate for this tile.
data found
atmospheric_model 6S atmospheric_model used water_vapor_and_ozone - this model is used when there’s ozone and water vapor concentration data available predefined - a predefined model is used based on the latitude and date of the capture.
water_vapor_and_ozone
satellite_azimuth Viewing azimuth angle. The angle measured from the sub-satellite point (point on the ground below the platform) between the scene center and true north. Measured clockwise from north in degrees (0-360)
229.0048668147364
satellite_off_nadir The angle from the sensor between nadir (straight down) and the scene center. Measured in degrees (0-90). In case this angle cannot be computed, a value of -1 will be reported
13.961085570229528
sun_azimuth Sun azimuth angle. From the scene center point on the ground, this is the angle between truth north and the sun. Measured clockwise in degrees (0-360)
222.70165259247
sun_elevation The estimated sun elevation measured at the target at the moment of the capture. Value in degrees.
24.0
latitude The latitude of the target.
33.55891099796737

Item metadata

Prefix Field Name Description Example
n/a id Unique identifier for the STAC item
20250930_025801_143_SN45_L2A_MS_0_0_1
n/a bbox Item bounding box
[
  119.56896495671906,
  23.62805912936759,
  119.65730868533569,
  23.690097800133774
],
n/a geometry Product footprint polygon or multi polygon
{
  "type": "Polygon",
  "coordinates": [
      [
          [-59.39745426956545,
          -14.839874521738926],
          [-59.397653769623574,
          -14.857959361744172],
          [-59.37906678933578,
          -14.858152718581847],
          [-59.37886883226247,
          -14.840067632759192],
          [-59.39745426956545,
          -14.839874521738926]
      ]
  ]
},
n/a assets List of the assets available for a given item
{
  "preview": {
      "href": "link to the file",
      "type": "image/png",
      "roles": [
          "overview"
      ]
  },
  "cloud": {...},
  "analytic": {...},
  "BOA_metadata": {...}
}
n/a collection Collection name
l2a
properties gsd Ground sample distance in meters
0.7
properties proj : shape Dimension of image in pixels (Height x Width)
[2861, 2860]
properties grid:code Satellogic 2x2km grid code
SATL-2KM-21S_242_8356
properties instruments Options are MS for multispectral and HS for hyperspectral
ms
properties datetime Capture time
2025-09-06T18:43:23.402269+00:00
properties platform Satellite name that acquired the imagery
newsat46
properties proj:epsg EPSG code of the Coordinate Reference System in which the image coordinates are
4326
properties view : azimuth Viewing azimuth angle. The angle measured from the sub-satellite point (point on the ground below the platform) between the scene center and true north. Measured clockwise from north in degrees (0-360)
166.1138
properties view : off_nadir The angle from the sensor between nadir (straight down) and the scene center. Measured in degrees (0-90). In case this angle cannot be computed, a value of -1 will be reported
24.9490
properties view : sun_azimuth Sun azimuth angle. From the scene center point on the ground, this is the angle between truth north and the sun. Measured clockwise in degrees (0-360)
72.3332
properties view : sun_elevation The estimated sun elevation measured at the target at the moment of the capture. Value in degrees.
60
properties satl : satellite_generation Satellite generation category, mainly to differentiate between MarkIV and MarkV
MarkV
properties satl : outcome_id The UUID of the entire capture this individual frame is part of
ffbabb4f-3a97-45ec-bca3-0e4d56608c1c
properties satl : valid_pixel Percentage of pixels that are valid, from 0 to 100
100
properties satl : exposure_sec Exposure time of capture in seconds
0.002769
properties satl : product_name The product name
L2A
properties satl : last_modified Timestamp when the product was last processed
2025-09-30T04:30:38.122305+00:00
properties satl : transaction_id Internal processing transaction identifier
l0-pipeline-cw5td
properties satl : product_version Product Version
0.0.1
properties satl : software_version Internal software version used to process the product
0.0.1
properties satl : satellite_altitude Satellite altitude in meters
498240.1195991831
properties satl : ground_lock Boolean value that indicates if the processor was capable to find gcps at the capture
true
properties satl-qa : qa_software_version Quality Control project SW version. Inherited from L1D.
2.11.2
properties satl-qa : alignment_ce95_blue The 95th percentile of the band-to-band alignment error between the green and blue bands is reported in meters, In case this metric cannot be computed, a value of -999 will be reported. Inherited from L1D.
-999
properties satl-qa : geoaccuracy_ce90 The 90th percentile of the geoaccuracy error reported in meters, In case this metric cannot be computed, a value of -999 will be reported. Inherited from L1D.
-999
properties satl-qa : geoaccuracy_rmse The root mean square error of the geoaccuracy error reported in meters, In case this metric cannot be computed, a value of -999 will be reported. Inherited from L1D.
-999
properties satl-qa : alignment_ce95_red The 95th percentile of the band-to-band alignment error between the green and red bands is reported in meters, In case this metric cannot be computed, a value of -999 will be reported. Inherited from L1D.
-999
properties satl-insights : lulc_snow Land use/land cover percentage for snow. Inherited from L1D.
0
properties satl-insights : lulc_urban Land use/land cover percentage for urban areas. Inherited from L1D.
8.1
properties satl-insights : lulc_water Land use/land cover percentage for water. Inherited from L1D.
77.3
properties satl-insights : lulc_forest Land use/land cover percentage for forest. Inherited from L1D.
12.6
properties satl-insights : lulc_bareland Land use/land cover percentage for bare land. Inherited from L1D.
0.5
properties satl-insights : lulc_cropland Land use/land cover percentage for cropland. Inherited from L1D.
0
properties satl-insights : lulc_grassland Land use/land cover percentage for grassland. Inherited from L1D.
1.5
n/a tile_geometry Tile bounding box
{
  "type": "Polygon",
  "coordinates": [
    [
        [-59.39745426956545,
        -14.839874521738926],
        [-59.39765383942619,
        -14.857965685109374],
        [-59.37906035733394,
        -14.858159109401297],
        [-59.37886233153779,
        -14.8400677000418],
        [-59.39745426956545,
        -14.839874521738926]
    ]
  ]
},

Packaging specification

TBD

Changelog

L2A Software Version Release date Change log
0.1.0 17/02/2026
  • First, proof of concept version of the product

  1. https://salsa.umd.edu/6spage.html 

  2. https://py6s.readthedocs.io/en/latest/index.html 

  3. https://www.usgs.gov/landsat-missions/landsat-collection-2-atmospheric-auxiliary-data#SRNCEPNCAR