Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

earth and related environmental sciences

Sentinel-1 SLC Burst GCP Geolocation with EOPFZARR Driver

Ground Control Point (GCP) based geolocation for Sentinel-1 SLC burst subdatasets using the EOPFZARR GDAL driver

European Space Agency
ESA EOPF Zarr Logo

Sentinel-1 SLC Burst GCP Geolocation with EOPFZARR Driver

🚀 Launch in JupyterHub

Run this notebook interactively with all dependencies pre-installed

Introduction

Sentinel-1 SLC (Single Look Complex) products in IW (Interferometric Wide) mode store data as individual bursts — short, overlapping strips within three subswaths (IW1, IW2, IW3). Each burst subdataset carries its own Ground Control Points (GCPs) for geolocation.

GCPs are a sparse grid of pixel/line → longitude/latitude/height correspondences stored in conditions/gcp/ arrays within the EOPF Zarr structure:

  • pixel and line define image-space positions

  • latitude, longitude, height define geographic positions

The EOPFZARR driver reads these arrays and automatically attaches them as GDAL GCPs when you open a burst subdataset with the BURST open option. This enables:

  • Pixel-to-geographic coordinate transformation via GDAL’s GCP transformer

  • Reprojection to WGS 84 (or any CRS) using gdal.Warp()

  • Correct display in GIS tools like QGIS

See also: Sentinel-1 SLC Burst Selection for burst structure exploration, and Sentinel-1 GRD GCP Geolocation for the equivalent GCP workflow on GRD products.

Setup

GDAL version: 3.12.0dev-209c099c56
EOPFZARR driver: Registered
/home/yadagale/.local/lib/python3.10/site-packages/matplotlib/projections/__init__.py:63: UserWarning: Unable to import Axes3D. This may be due to multiple versions of Matplotlib being installed (e.g. as a system package and as a pip package). As a result, the 3D projection is not available.
  warnings.warn("Unable to import Axes3D. This may be due to multiple versions of "

Dataset Configuration

We use a Sentinel-1C IW SLC product with dual VV/VH polarization, stored in EOPF Zarr format. The product is hosted on the EODC notebook-data stable bucket.

Dataset: S1C_IW_SLC__1SDV
  Platform:      Sentinel-1C
  Mode:          IW (Interferometric Wide)
  Level:         L1 SLC
  Polarizations: VV, VH
  Date:          2025-10-16

Open an SLC Burst Subdataset

Use the BURST open option to directly open a single burst by its friendly name: {subswath}_{polarization}_{index} (e.g. IW1_VV_001).

GCPs are automatically attached to the opened burst dataset.

Burst:     IW1_VV_001
Size:      23261 x 1501 px
Bands:     1
Data type: CFloat32
GCP count: 210
GCP SRS:   WGS 84 (EPSG:4326)

Inspect GCPs

The driver automatically reads GCPs from the burst’s conditions/gcp/ arrays.

GCP Count: 210
GCP SRS:   WGS 84 (EPSG:4326)
Lon range: [12.9673, 14.4821]
Lat range: [40.0726, 41.7453]

First 10 GCPs:
  ID        Pixel     Line        Lon        Lat   Height
  GCP_1       0.5      0.5    13.3555    40.0726      0.0
  GCP_2    1163.5      0.5    13.4168    40.0816      0.0
  GCP_3    2326.5      0.5    13.4774    40.0905      0.0
  GCP_4    3489.5      0.5    13.5374    40.0993      0.0
  GCP_5    4652.5      0.5    13.5969    40.1080      0.0
  GCP_6    5815.5      0.5    13.6557    40.1166      0.0
  GCP_7    6978.5      0.5    13.7140    40.1250      0.0
  GCP_8    8141.5      0.5    13.7717    40.1334      0.0
  GCP_9    9304.5      0.5    13.8290    40.1416      0.0
  GCP_10  10467.5      0.5    13.8858    40.1497      0.0

Visualize GCP Grid

The GCPs form a sparse grid across the burst. Let’s visualize their distribution in both image space (pixel/line) and geographic space (lon/lat).

<Figure size 1400x500 with 2 Axes>

Pixel-to-Geographic Coordinate Transformation

With GCPs attached, GDAL can transform between pixel/line coordinates and geographic coordinates using a polynomial GCP transformer.

Corner            Pixel     Line        Lon        Lat
-------------------------------------------------------
Top-Left              0        0    13.3555    40.0710
Top-Right         23261        0    14.4823    40.2318
Bottom-Left           0     1501    13.3135    40.2397
Bottom-Right      23261     1501    14.4423    40.4005

Warp Burst to Geographic Projection

Using the GCPs, we can reproject the SLC amplitude to WGS 84. SLC data is complex-valued (CFloat32); we compute amplitude for visualization.

Warped size:  512 x 142 px
Origin:       lon=13.3147  lat=40.3989
Pixel size:   0.002277° x 0.002277°
<Figure size 1000x600 with 2 Axes>

Compare GCPs Across Subswaths

Each subswath (IW1, IW2, IW3) covers a different range of incidence angles and a different geographic footprint. Let’s check GCP counts and extents for the three VV bursts.

Burst                 Size         GCPs       Lon range             Lat range      
----------------------------------------------------------------------------------
IW1_VV_001         23261x1501       210     [12.97, 14.48]        [40.07, 41.75]   
IW2_VV_001         27012x1511       210     [13.98, 15.49]        [40.27, 41.93]   
IW3_VV_001         25954x1516       210     [14.99, 16.36]        [40.47, 42.10]   
<Figure size 1000x600 with 1 Axes>
/usr/lib/python3/dist-packages/scipy/__init__.py:146: UserWarning: A NumPy version >=1.17.3 and <1.25.0 is required for this version of SciPy (detected version 1.26.4
  warnings.warn(f"A NumPy version >={np_minversion} and <{np_maxversion}"
<Figure size 1000x600 with 1 Axes>

Command Line Usage

GCPs are visible via gdalinfo when you open a specific burst subdataset.

Inspect GCPs on an SLC burst:

  gdalinfo "EOPFZARR:'/vsicurl/https://objects.eodc.eu/e05ab01a9d56408d82ac32d69a5aae2a:notebook-data/tutorial_data/cpm_v262/S1C_IW_SLC__1SDV_20251016T165627_20251016T165654_004590_00913B_30C4.zarr'" -oo BURST=IW1_VV_001

Warp burst to WGS 84:

  gdalwarp -t_srs EPSG:4326 -ts 512 0 \
    "EOPFZARR:'/vsicurl/https://objects.eodc.eu/e05ab01a9d56408d82ac32d69a5aae2a:notebook-data/tutorial_data/cpm_v262/S1C_IW_SLC__1SDV_20251016T165627_20251016T165654_004590_00913B_30C4.zarr' -oo BURST=IW1_VV_001" \
    output_burst_wgs84.tif

Summary

GCP Geolocation on SLC Bursts

FeatureDescription
Automatic ExtractionGCPs read from conditions/gcp/ arrays (pixel, line, latitude, longitude, height)
Burst AccessUse BURST=IW1_VV_001 open option to select a specific burst
GCP SRSWGS 84 (EPSG:4326) with traditional GIS axis ordering (lon, lat)
Reprojectiongdal.Warp() uses GCPs via polynomial transformer
Per-SubswathEach of IW1/IW2/IW3 has its own GCP grid with distinct geographic extent

Cleanup