Xarray backend to Copernicus Sentinel-1 satellite data products

Overview

xarray-sentinel

WARNING: this product is a "technology preview" / pre-Alpha

Xarray backend to explore and load Copernicus Sentinel-1 satellite data products.

This Open Source project is sponsored by B-Open - https://www.bopen.eu

Features

  • access to SLC burst data - technology preview
  • access to metadata: product, orbit, attitude, GCPs - technology preview
  • access to metadata: calibration, deramp - in roadmap
  • products:
    • Sentinel-1 SLC IW (Interferometric Wide Swath): technology preview
    • Sentinel-1 SLC EW (Extended Wide Swath): technology preview
    • Sentinel-1 SLC SM (Stripmap): in roadmap
    • Sentinel-1 GRD SM/IW/EW: in roadmap
    • Sentinel-2 L1C/L2A: in roadmap

Install

The easiest way to install xarray-sentinel is via conda. Create a new environment, activate it, install the package and its dependencies, as follows:

    conda create -n xarray-sentinel
    conda activate xarray-sentinel
    conda install -c conda-forge rioxarray xmlschema
    pip install xarray-sentinel

Sentinel-1 SLC IW

Data

Currently, xarray-sentinel provides access as Xarray datasets to the following data:

  • burst data
  • gcp
  • orbit
  • attitude

using azimuth_time and slant_range_time dimensions.

Examples:

Open root dataset

>>> from xarray_sentinel import sentinel1
>>> product_path = "tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE"
>>> sentinel1.open_dataset(product_path)
<xarray.Dataset>
Dimensions:  ()
Data variables:
    *empty*
Attributes: (12/15)
    constellation:              sentinel-1
    platform:                   sentinel-1b
    instrument:                 ['c-sar']
    sat:orbit_state:            descending
    sat:absolute_orbit:         26269
    sat:relative_orbit:         168
    ...                         ...
    sar:polarizations:          ['VV', 'VH']
    sar:product_type:           SLC
    xs:instrument_mode_swaths:  ['IW1', 'IW2', 'IW3']
    groups:                     ['IW1', 'IW1/calibration', 'IW1/gcp', 'IW1/at...
    Conventions:                CF-1.7
    history:                    created by xarray_sentinel-...

The attribute groups shows the available groups to be loaded. The key group shall be used to select the dataset to be loaded.

Open gcp dataset

To load the gcp relative to the first swath use the key group="IW1/gcp":

>>> sentinel1.open_dataset(product_path, group="IW1/gcp")
<xarray.Dataset>
Dimensions:           (azimuth_time: 10, slant_range_time: 21)
Coordinates:
  * azimuth_time      (azimuth_time) datetime64[ns] 2021-04-01T05:26:24.20973...
  * slant_range_time  (slant_range_time) float64 0.005343 0.00536 ... 0.005679
    line              (azimuth_time) int64 0 1501 3002 ... 10507 12008 13508
    pixel             (slant_range_time) int64 0 1082 2164 ... 19476 20558 21631
Data variables:
    latitude          (azimuth_time, slant_range_time) float64 ...
    longitude         (azimuth_time, slant_range_time) float64 ...
    height            (azimuth_time, slant_range_time) float64 ...
    incidenceAngle    (azimuth_time, slant_range_time) float64 ...
    elevationAngle    (azimuth_time, slant_range_time) float64 ...
Attributes:
    Conventions:  CF-1.7
    title:        Geolocation grid
    comment:      The dataset contains geolocation grid point entries for eac...
    history:      created by xarray_sentinel-...

Open attitude dataset

>>> sentinel1.open_dataset(product_path, group="IW1/attitude")
<xarray.Dataset>
Dimensions:       (azimuth_time: 25)
Coordinates:
  * azimuth_time  (azimuth_time) datetime64[ns] 2021-04-01T05:26:24.750001 .....
Data variables:
    q0            (azimuth_time) float64 ...
    q1            (azimuth_time) float64 ...
    q2            (azimuth_time) float64 ...
    q3            (azimuth_time) float64 ...
    wx            (azimuth_time) float64 ...
    wy            (azimuth_time) float64 ...
    wz            (azimuth_time) float64 ...
    pitch         (azimuth_time) float64 ...
    roll          (azimuth_time) float64 ...
    yaw           (azimuth_time) float64 ...
Attributes:
    Conventions:  CF-1.7
    title:        Attitude information used by the IPF during processing
    comment:      The dataset contains a sets of attitude data records that a...
    history:      created by xarray_sentinel-...

Open orbit dataset

>>> sentinel1.open_dataset(product_path, group="IW1/orbit")
<xarray.Dataset>
Dimensions:       (azimuth_time: 17)
Coordinates:
  * azimuth_time  (azimuth_time) datetime64[ns] 2021-04-01T05:25:19 ... 2021-...
Data variables:
    x             (azimuth_time) float64 ...
    y             (azimuth_time) float64 ...
    z             (azimuth_time) float64 ...
    vx            (azimuth_time) float64 ...
    vy            (azimuth_time) float64 ...
    vz            (azimuth_time) float64 ...
Attributes:
    reference_system:  Earth Fixed
    Conventions:       CF-1.7
    title:             Orbit information used by the IPF during processing
    comment:           The dataset contains a sets of orbit state vectors tha...
    history:           created by xarray_sentinel-...

Open a single burst

>>> sentinel1.open_dataset(product_path, group="IW1/R168-N459-E0115")
<xarray.Dataset>
Dimensions:           (azimuth_time: 1501, slant_range_time: 21632)
Coordinates:
    line              (azimuth_time) float64 1.051e+04 1.051e+04 ... 1.201e+04
    pixel             (slant_range_time) float64 0.5 1.5 ... 2.163e+04 2.163e+04
  * azimuth_time      (azimuth_time) datetime64[ns] 2021-04-01T05:26:43.51577...
  * slant_range_time  (slant_range_time) float64 0.005343 0.005343 ... 0.005679
Data variables:
    VH                (azimuth_time, slant_range_time) complex128 ...
    VV                (azimuth_time, slant_range_time) complex128 ...
Attributes: (12/14)
    constellation:              sentinel-1
    platform:                   sentinel-1b
    instrument:                 ['c-sar']
    sat:orbit_state:            descending
    sat:absolute_orbit:         26269
    sat:relative_orbit:         168
    ...                         ...
    sar:instrument_mode:        IW
    sar:polarizations:          ['VV', 'VH']
    sar:product_type:           SLC
    xs:instrument_mode_swaths:  ['IW1', 'IW2', 'IW3']
    Conventions:                CF-1.7
    history:                    created by xarray_sentinel-...

With the upcoming release of Xarray v0.18.0, xarray-sentinel will be automatically available as an Xarray backend:

>>> import xarray as xr
>>> ds = xr.open_dataset(product_path, engine="sentinel-1")

Contributing

The main repository is hosted on GitHub, testing, bug reports and contributions are highly welcomed and appreciated:

https://github.com/bopen/xarray-sentinel

Lead developer:

Main contributors:

See also the list of contributors who participated in this project.

License

Copyright 2021, B-Open Solutions srl and the xarray-sentinel authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • Identify bursts groups also using the burst number

    Identify bursts groups also using the burst number

    Scheme proposed by @alexamici:

    • [x] remove the (slow) parsing of GCP on open_dataset(..., group=None) and only report available groups by burst_id, e.g. ["IW1/1", "IW1/2", ...]
    • [ ] move the naming logic to an external function in xarray_sentinel that takes either the filename or the gcp dataset (whatever is more reasonable) and returns the mapping between the label and the burst_id
    enhancement 
    opened by aurghs 8
  • ASF or .zip support?

    ASF or .zip support?

    I have a bunch of S1 data from the Alaska Satellite Facility in .zip format. I tried seeing what happens if I load in the .zip but it of course didn't work. Are there plans to support ASF data? Or am I doing something wrong? Does it need to be SLC?

    opened by TheJeran 4
  • Add initial sentinel1 accessor that raises when not used on backend Dataset (more or less)

    Add initial sentinel1 accessor that raises when not used on backend Dataset (more or less)

    Objectives for the accessors are:

    • [ ] exposes a hierarchical dataset tree where accessing group datasets without the need to open_dataset again #7
    • [ ] exposes original product exploration functions, especially the one that may require slow access when on a network #15
    • [ ] exposes a way to get as much as possible of the original metadata #7
    • [ ] exposes API to write STAC catalogs to the product folder
    • [x] raises a user-friendly error message when not used on a sentinel-1 Dataset
    opened by alexamici 3
  • Add sample data for tests

    Add sample data for tests

    For testing burst opening, we need real data to pass to rioxarray. Of course using the original TIFF files is not feasible, as they can easily be very big, order of GiBs.

    I played a bit to solve this issue and I have a few options:

    1. Put in the repository an all-zeros TIFF file with the same geometric properties of the original ones. By using the compression facility of TIFFs (method ZSTD gave the best result), I cut down 1.1GiB to 384KiB.
    2. Same as before, but changing the block size to the whole image (the rational is that compression is performed at block level). In this way the same TIFF as before reduce to 344KiB.
    3. Add setup code to tests that generates the needed TIFF on-the-fly. The code would be very simple, we could put the destination file name under .gitignore to avoid mistakes and we could also "cache" the produced file to avoid generating it repeatedly.

    Personally I think the second option is not worth losing the original blocksize, while the third option is more code to maintain and it slightly complicates the tests. Nonetheless, the third option could be useful should we need more meainingful data to put in, for example for calibration.

    help wanted design 
    opened by corrado9999 3
  • Group names do not uniquely identify a burst

    Group names do not uniquely identify a burst

    Group names do not uniquely identify a burst, it possible (even if unlikely) that two relative orbits will have identical group names for different bursts, e.g. group="IW2/N433_W0120_VV".

    @aurghs: "The relative orbit is useful mainly to identify uniquely the bursts, I would rather add the orbit in the burst name, for example: group="IW2/N433_W0120_VV_T22""

    @alexamici: "I agree with the idea, but prefer: group="IW2/R022_N433_W0120_VV" (R for "relative orbit" and keep the name to a fixed length).

    I also noticed that the polarisations should really be bands of the same dataset, not different datasets, but that is another issue (they have identical dimensions and coordinates)"

    Originally posted by @alexamici in https://github.com/bopen/xarray-sentinel/pull/8#issuecomment-819350889

    design 
    opened by alexamici 3
  • Expose burst level data via GDAL / rasterio / rioxarray

    Expose burst level data via GDAL / rasterio / rioxarray

    The lowest level in exposing the data is to create bursts datasets with the data contained in the measurements TIFF files (real and imaginary part scaled to int16 aa "distribution" digital number, not the original DN).

    The step needed are:

    1. parse burst information from the product annotation
    2. build the burst window into the original TIFF file (line_min, sample_min, line_max, sample_max)
    3. map the burst data to a xr.Dataset

    Step 3. can be done quickly by creating a VRT on disk and opening it with rioxarray.

    Longer term we wan to support products on read-only file-systems or zip files, but there is no way (that I found) to pass the VRT XML to GDAL without saving it first to a file.

    enhancement 
    opened by alexamici 3
  • Propose adding the relative orbit to the group name

    Propose adding the relative orbit to the group name

    Group names do not uniquely identify a burst, it possible (even if unlikely) that two relative orbits will have identical group names for different bursts, e.g. group="IW2/N433_W0120_VV". Adding the relative orbit to the group structure will make all group names longer and more complex, but unique: e.g. group="22/IW2/N433_W0120_VV" and group="169/IW2/N433_W0120_VV".

    This is a trade-off. I'm not sure what naming scheme is best.

    We could even accept both (causing even more confusion).

    enhancement 
    opened by alexamici 3
  • Provide GCPs or at least extent with burst data

    Provide GCPs or at least extent with burst data

    At the moment the only way to link the burst to the associated GCPs is to match the azimuth_times and slant_range_times.

    It would be helpful to attach some information on localisation of the burst (computed to define the burst name) to the burst dataset.

    enhancement 
    opened by alexamici 2
  • Resource .xsd files not included in pip install

    Resource .xsd files not included in pip install

    I'm able to have this run when I git clone and pip install . inside the repository. But when I pip install xarray-sentinel, it successfully installs but throws the error

    sentinel1.open_dataset( "S1A_IW_SLC__1SDV_20191130T235546_20191130T235613_030147_0371D0_AEE1.SAFE")
    ...
    URLError: <urlopen error [Errno 2] No such file or directory: '/home/scott/miniconda3/envs/mapping/lib/python3.8/site-packages/xarray_sentinel/resources/sentinel1/s1-level-1-product.xsd'>
    
    $ ls /home/scott/miniconda3/envs/mapping/lib/python3.8/site-packages/xarray_sentinel
    conventions.py  esa_safe.py  __init__.py  __pycache__  sentinel1.py  version.py
    

    The .xsd files aren't in the directory pip creates, and this is true even after disabling installs from wheel.

    I think this might involve setting package_data=True and including a MANIFEST.in file to specify the non-python files to include.

    opened by scottstanie 2
  • Proposal for open_dataset interface

    Proposal for open_dataset interface

    Draft for open open_dataset inferface. open_dataset takes in input both the manifest.safe and the directory.

    Open without a group:

    manifest_path = (
        DATA_FOLDER
        / "S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE"
    )
    xr.open_dataset(manifest_path, engine="sentinel-1")
    
    <xarray.Dataset>
    Dimensions:  ()
    Data variables:
        *empty*
    Attributes: (12/13)
        constellation:              sentinel-1
        platform:                   sentinel-1b
        instrument:                 ['c-sar']
        sat:orbit_state:            descending
        sat:absolute_orbit:         26269
        sat:relative_orbit:         168
        ...                         ...
        sar:frequency_band:         C
        sar:instrument_mode:        IW
        sar:polarizations:          ['VV', 'VH']
        sar:product_type:           SLC
        xs:instrument_mode_swaths:  ['IW1', 'IW2', 'IW3']
        groups:                     ['IW1/gcp', 'IW1/attitude', 'IW1/orbit', 'IW2...]
    

    Open with group = 'IW1':

    manifest_path = (
        DATA_FOLDER
        / "S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE"
    )
    xr.open_dataset(manifest_path, engine="sentinel-1", group="IW1")  
    <xarray.Dataset>
    Dimensions:  ()
    Data variables:
        *empty*
    Attributes:
        groups:   ['orbit', 'attitude', 'gcp']
    

    Open with group = 'IW1/orbit':

    manifest_path = (
        DATA_FOLDER
        / "S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE"
    )
    xr.open_dataset(manifest_path, engine="sentinel-1", group="IW1/orbit")  # type: ignore
    
    <xarray.Dataset>
    Dimensions:  (time: 17)
    Coordinates:
      * time     (time) datetime64[ns] 2021-04-01T05:25:19 ... 2021-04-01T05:27:59
    Data variables:
        x        (time) float64 ...
        y        (time) float64 ...
        z        (time) float64 ...
        vx       (time) float64 ...
        vy       (time) float64 ...
        vz       (time) float64 ...
    Attributes:
        Conventions:       CF-1.7
        reference_system:  Earth Fixed
    

    TBC:

    • groups to be displayed in case group=None:
      • [IW1, IW2...]
      • [IW1/orbit, IW1/attitude, IW1/gcp, IW2/orbit...]
      • [IW1, IW1/orbit, IW1/attitude, IW1/gcp, IW2, IW2/orbit...]
    • attributes to expose in case group=None
    • attributes to expose in case group='IW1'
    • Support for zip? Nice to have but I would postpone the implementation.
    opened by aurghs 2
  • Parse the XML files via `xmlschema` and the XSD definitions

    Parse the XML files via `xmlschema` and the XSD definitions

    Most metadata are distributed in XML files (e.g. manifest.safe, product/swath and calibration files) and the product zip file contains part of the XSD definition to use.

    As the XSD schemas are required when using xmlschema we need a way to always have a set of files. Strategy is:

    1. allow the user to specify a set of XSD files as a mapping from namespace to path to the schema file
    2. look for the distributed schema files based on a predefined product folder structure e.g. top_dir/support/s1-level-1-product.xsd
    3. use a mapping from namespace to shipped schema file
    reafactor 
    opened by alexamici 2
  • Full support for fsspec urlpaths is broken due to rioxarray / rasterio not accepting a file-like object

    Full support for fsspec urlpaths is broken due to rioxarray / rasterio not accepting a file-like object

    Until some releases ago we had full fsspec thanks to the following line working:

    ds = xr.open_dataset(fs.open(urlpath), engine="rasterio")
    

    This broke with some recent release of rioxarray or xarray, I think due to the fact that the open file is assumed to be a simple python object not a fsspec one.

    At the moment a workaround is in place that attempt to use rasaterio remote URLs, but it is very fragile.

    bug 
    opened by alexamici 0
  • Detected Memory leaks in code numpy as_type() (working on PR)

    Detected Memory leaks in code numpy as_type() (working on PR)

    as type copies arrays when not specified otherwise see: https://numpy.org/doc/stable/reference/generated/numpy.ndarray.astype.html

    • https://github.com/bopen/xarray-sentinel/blob/main/xarray_sentinel/sentinel1.py#L741
    • https://github.com/bopen/xarray-sentinel/blob/main/xarray_sentinel/sentinel1.py#L746

    Seems to be reason for tests failing in sarsen, will try working more on this and PR is "underway"

    opened by Scartography 0
  • Add option to crop a burst precisely via `firstValidSample` and `lastValidSample`

    Add option to crop a burst precisely via `firstValidSample` and `lastValidSample`

    Useful enhancements:

    • [ ] read the firstValidSample and lastValidSample tags and expose them (possibly making them more readable)
    • [ ] provide and option to crop the burst to the border of the actual image
    enhancement 
    opened by alexamici 2
Releases(v0.9.5)
  • v0.9.5(Nov 18, 2022)

    Easily explore and access the SAR data products of the Copernicus Sentinel-1 satellite mission in Python.

    This Open Source project is sponsored by B-Open - https://www.bopen.eu.

    What's new:

    • Acknowledge that full fsspec support is now broken, see #127, and implement a workaround that work in simple cases.

    Overview:

    xarray-sentinel is a Python library and Xarray backend with the following functionalities:

    • supports the following data products as distributed by ESA:
      • Sentinel-1 Ground Range Detected (GRD):
        • Stripmap (SM)
        • Interferometric Wide Swath (IW)
        • Extra Wide Swath (EW)
      • Sentinel-1 Single Look Complex (SLC) SM/IW/EW
    • creates ready-to-use Xarray Datasets that map the data lazily and efficiently in terms of both memory usage and disk / network access
    • reads all SAR imagery data: GRD images, SLC swaths and SLC bursts
    • reads several metadata elements: satellite orbit and attitude, ground control points, radiometric calibration look up tables, Doppler centroid estimation and more
    • (partially broken, see #127) reads uncompressed and compressed SAFE data products on the local computer or on a network via fsspec - depends on rasterio >= 1.3.0
    • supports larger-than-memory and distributed data access via Dask and rioxarray / rasterio / GDAL
    • provides a few helpers for simple operations involving metadata like cropping individual bursts out of IW SLC swaths applying radiometric calibration polynomials and converting slant to ground range for GRD products

    Overall, the software is in the beta phase and the usual caveats apply.

    Source code(tar.gz)
    Source code(zip)
  • v0.9.4(Nov 1, 2022)

  • v0.9.3(Jul 26, 2022)

  • v0.9.2(Jul 13, 2022)

    Easily explore and access the SAR data products of the Copernicus Sentinel-1 satellite mission in Python.

    This Open Source project is sponsored by B-Open - https://www.bopen.eu.

    What's new:

    • Add geospatial_* attributes from ACDD-1.3 to full images and bursts #54
    • Update documentation and tests following the release of rasterio 1.3.0 that enable the full support for accessing compressed and remote data via fsspec,
    • Improve performance of calibrate_* and slant_range_time_to_ground_range helpers in several real scenarios,
    • Add ground_range_to_slant_range_time helper.

    Overview:

    xarray-sentinel is a Python library and Xarray backend with the following functionalities:

    • supports the following data products as distributed by ESA:
      • Sentinel-1 Ground Range Detected (GRD):
        • Stripmap (SM)
        • Interferometric Wide Swath (IW)
        • Extra Wide Swath (EW)
      • Sentinel-1 Single Look Complex (SLC) SM/IW/EW
    • creates ready-to-use Xarray Datasets that map the data lazily and efficiently in terms of both memory usage and disk / network access
    • reads all SAR imagery data: GRD images, SLC swaths and SLC bursts
    • reads several metadata elements: satellite orbit and attitude, ground control points, radiometric calibration look up tables, Doppler centroid estimation and more
    • reads uncompressed and compressed SAFE data products on the local computer or on a network via fsspec - depends on rasterio >= 1.3.0
    • supports larger-than-memory and distributed data access via Dask and rioxarray / rasterio / GDAL
    • provides a few helpers for simple operations involving metadata like cropping individual bursts out of IW SLC swaths applying radiometric calibration polynomials and converting slant to ground range for GRD products

    Overall, the software is in the beta phase and the usual caveats apply.

    Source code(tar.gz)
    Source code(zip)
  • v0.9.1(Apr 25, 2022)

  • v0.9.0(Apr 25, 2022)

    Easily explore and access the SAR data products of the Copernicus Sentinel-1 satellite mission in Python.

    This Open Source project is sponsored by B-Open - https://www.bopen.eu.

    What's new:

    • first beta release, the code is in excellent shape with respect to features, stability and performance
    • breaking change: naming is now always modelled from SAFE XML tags ported to snake_case #101
    • add the option to select a burst by its burst_id in crop_burst_dataset #100
    • add a make_stac_item(ds.attrs) helper function
    • add group metadata attributes to data arrays #101
    • added a CF compliance checker to the test suite and fixed several CF issues #98

    Overview:

    xarray-sentinel is a Python library and Xarray backend with the following functionalities:

    • supports the following data products as distributed by ESA:
      • Sentinel-1 Ground Range Detected (GRD):
        • Stripmap (SM)
        • Interferometric Wide Swath (IW)
        • Extra Wide Swath (EW)
      • Sentinel-1 Single Look Complex (SLC) SM/IW/EW
    • creates ready-to-use Xarray Datasets that map the data lazily and efficiently in terms of both memory usage and disk / network access
    • reads all SAR imagery data: GRD images, SLC swaths and SLC bursts
    • reads several metadata elements: satellite orbit and attitude, ground control points, radiometric calibration look up tables, Doppler centroid estimation and more
    • reads uncompressed and compressed SAFE data products on the local computer or on a network via fsspec - depends on rasterio>=1.3a3
    • supports larger-than-memory and distributed data access via Dask and rioxarray / rasterio / GDAL
    • provides a few helpers for simple operations involving metadata like croppping individual bursts out of IW SLC swaths applying radiometric calibration polynomials and converting slant to ground range for GRD products

    Overall, the software is in the beta phase and the usual caveats apply.

    Source code(tar.gz)
    Source code(zip)
  • v0.4.2(Mar 21, 2022)

  • v0.4.1(Mar 15, 2022)

  • v0.4(Mar 8, 2022)

    What's new:

    • Fixed chunking of measurement data
    • Added a helper functions for simple operations involving metadata
    • Start adding metadata to variables

    Overview:

    Overall the software is in the alpha phase and the usual caveats apply.

    • supports the following data products as distributed by ESA:
      • Sentinel-1 Ground Range Detected (GRD):
        • Stripmap (SM)
        • Interferometric Wide Swath (IW)
        • Extra Wide Swath (EW)
      • Sentinel-1 Single Look Complex (SLC) SM/IW/EW
    • creates ready-to-use Xarray Datasets that map the data lazily and efficiently in terms of both memory usage and disk / network access
    • reads all SAR imagery data: GRD images, SLC swaths and SLC bursts
    • reads several metadata elements: satellite orbit and attitude, ground control points, radiometric calibration look up tables, Doppler centroid estimation and more
    • reads uncompressed and compressed SAFE data products on the local computer or on a network via fsspec - depends on rasterio>=1.3a3
    • supports larger-than-memory and distributed data access via Dask and rioxarray / rasterio / GDAL
    • provides a few helpers for simple operations involving metadata like croppping individual bursts out of IW SLC swaths applying radiometric calibration polynomials and converting slant to ground range for GRD products
    Source code(tar.gz)
    Source code(zip)
  • v0.3(Feb 7, 2022)

    Overall the software is in the alpha phase and the usual caveats apply.

    • supports the following data products as distributed by ESA:
      • Sentinel-1 Ground Range Detected (GRD): NEW
        • Stripmap (SM)
        • Interferometric Wide Swath (IW)
        • Extra Wide Swath (EW)
      • Sentinel-1 Single Look Complex (SLC) SM/IW/EW
    • creates ready-to-use Xarray Datasets that map the data lazily and efficiently in terms of both memory usage and disk / network access
    • reads all SAR imagery data: GRD images, SLC swaths and SLC bursts
    • reads several metadata elements: satellite orbit and attitude, ground control points, radiometric calibration look up tables, Doppler centroid estimation and more
    • reads uncompressed and compressed SAFE data products on the local computer or on a network via fsspec - depends on rasterio>=1.3a3
    • supports larger-than-memory and distributed data access via Dask and rioxarray / rasterio / GDAL
    Source code(tar.gz)
    Source code(zip)
  • v0.2.1(Jan 18, 2022)

  • v0.2(Jan 11, 2022)

    Overall the software is in the alpha phase and the usual caveats apply. A few features, identified as technology preview below, are not fully usable yet.

    • supports the following data products as distributed by ESA:
      • Sentinel-1 Single Look Complex (SLC):
        • Stripmap (SM)
        • Interferometric Wide Swath (IW)
        • Extra Wide Swath (EW)
        • Wave (WV) - technology preview
      • Sentinel-1 Ground Range Detected (GRD) SM/IW/EW/WV - technology preview
    • creates ready-to-use Xarray Datasets that map the data lazily and efficiently in terms of both memory usage and disk / network access
    • reads all SAR imagery data: GRD images, SLC swaths and SLC bursts
    • reads several metadata elements: satellite orbit and attitude, ground control points, radiometric calibration look up tables, Doppler centroid estimation and more
    • reads uncompressed and compressed SAFE data products on the local computer or on a network via fsspec - technology preview
    • allows larger-than-memory and distributed processing via dask
    Source code(tar.gz)
    Source code(zip)
  • v0.1.1(Apr 27, 2021)

  • v0.1(Apr 22, 2021)

Owner
B-Open
B-Open
A package to fetch sentinel 2 Satellite data from Google.

Sentinel 2 Data Fetcher Installation Create a Virtual Environment and activate it. python3 -m venv venv . venv/bin/activate Install the Package via pi

null 1 Nov 18, 2021
Download and process satellite imagery in Python using Sentinel Hub services.

Description The sentinelhub Python package allows users to make OGC (WMS and WCS) web requests to download and process satellite images within your Py

Sentinel Hub 659 Dec 23, 2022
A Python interface between Earth Engine and xarray

eexarray A Python interface between Earth Engine and xarray Description eexarray was built to make processing gridded, mesoscale time series data quic

Aaron Zuspan 159 Dec 23, 2022
Using Global fishing watch's data to build a machine learning model that can identify illegal fishing and poaching activities through satellite and geo-location data.

Using Global fishing watch's data to build a machine learning model that can identify illegal fishing and poaching activities through satellite and geo-location data.

Ayush Mishra 3 May 6, 2022
Python package for earth-observing satellite data processing

Satpy The Satpy package is a python library for reading and manipulating meteorological remote sensing data and writing it to various image and data f

PyTroll 882 Dec 27, 2022
framework for large-scale SAR satellite data processing

pyroSAR A Python Framework for Large-Scale SAR Satellite Data Processing The pyroSAR package aims at providing a complete solution for the scalable or

John Truckenbrodt 389 Dec 21, 2022
EOReader is a multi-satellite reader allowing you to open optical and SAR data.

Remote-sensing opensource python library reading optical and SAR sensors, loading and stacking bands, clouds, DEM and index.

ICube-SERTIT 152 Dec 30, 2022
Script that allows to download data with satellite's orbit height and create CSV with their change in time.

Satellite orbit height ◾ Requirements Python >= 3.8 Packages listen in reuirements.txt (run pip install -r requirements.txt) Account on Space Track ◾

Alicja Musiał 2 Jan 17, 2022
A utility to search, download and process Landsat 8 satellite imagery

Landsat-util Landsat-util is a command line utility that makes it easy to search, download, and process Landsat imagery. Docs For full documentation v

Development Seed 681 Dec 7, 2022
Satellite imagery for dummies.

felicette Satellite imagery for dummies. What can you do with this tool? TL;DR: Generate JPEG earth imagery from coordinates/location name with public

Shivashis Padhi 1.8k Jan 3, 2023
QLUSTER is a relative orbit design tool for formation flying satellite missions and space rendezvous scenarios

QLUSTER is a relative orbit design tool for formation flying satellite missions and space rendezvous scenarios, that I wrote in Python 3 for my own research and visualisation. It is currently unfinished (95%) but the core algorithm and app works. Here's an example snippet of the GUI where four deputy satellites are orbiting a single chief in LEO.

Samuel Low 9 Aug 23, 2022
Google Maps keeps old satellite imagery around for a while – this tool collects what's available for a user-specified region in the form of a GIF.

google-maps-at-88-mph The folks maintaining Google Maps regularly update the satellite imagery it serves its users, but outdated versions of the image

Noah Doersing 111 Sep 27, 2022
Build, deploy and extract satellite public constellations with one command line.

SatExtractor Build, deploy and extract satellite public constellations with one command line. Table of Contents About The Project Getting Started Stru

Frontier Development Lab 70 Nov 18, 2022
A simple python script that, given a location and a date, uses the Nasa Earth API to show a photo taken by the Landsat 8 satellite. The script must be executed on the command-line.

What does it do? Given a location and a date, it uses the Nasa Earth API to show a photo taken by the Landsat 8 satellite. The script must be executed

Caio 42 Nov 26, 2022
LEOGPS - Satellite Navigation with GPS on Python!

LEOGPS is an open-source Python software which performs relative satellite navigation between two formation flying satellites, with the objective of high accuracy relative positioning. Specifically, LEOGPS solves for the double-differenced baseline (using float ambiguity resolution) between satellites flying in formation in Low Earth Orbit (LEO).

Samuel Low 50 Dec 13, 2022
Calculate & view the trajectory and live position of any earth-orbiting satellite

satellite-visualization A cross-platform application to calculate & view the trajectory and live position of any earth-orbiting satellite in 3D. This

Space Technology and Astronomy Cell - Open Source Society 3 Jan 8, 2022
Open Data Cube analyses continental scale Earth Observation data through time

Open Data Cube Core Overview The Open Data Cube Core provides an integrated gridded data analysis environment for decades of analysis ready earth obse

Open Data Cube 410 Dec 13, 2022
A public data repository for datasets created from TransLink GTFS data.

TransLink Spatial Data What: TransLink is the statutory public transit authority for the Metro Vancouver region. This GitHub repository is a collectio

Henry Tang 3 Jan 14, 2022
Python Data. Leaflet.js Maps.

folium Python Data, Leaflet.js Maps folium builds on the data wrangling strengths of the Python ecosystem and the mapping strengths of the Leaflet.js

null 6k Jan 2, 2023