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
Calculate the area inside of any GeoJSON geometry. This is a port of Mapbox's geojson-area for Python

geojson-area Calculate the area inside of any GeoJSON geometry. This is a port of Mapbox's geojson-area for Python. Installation $ pip install area U

Alireza 87 Dec 14, 2022
Django model field that can hold a geoposition, and corresponding widget

django-geoposition A model field that can hold a geoposition (latitude/longitude), and corresponding admin/form widget. Prerequisites Starting with ve

Philipp Bosch 324 Oct 17, 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 06, 2022
Platform for building statistical models of cities and regions

UrbanSim UrbanSim is a platform for building statistical models of cities and regions. These models help forecast long-range patterns in real estate d

Urban Data Science Toolkit 419 Dec 30, 2022
A ready-to-use curated list of Spectral Indices for Remote Sensing applications.

A ready-to-use curated list of Spectral Indices for Remote Sensing applications. GitHub: https://github.com/davemlz/awesome-ee-spectral-indices Docume

David Montero Loaiza 488 Jan 03, 2023
A bot that tweets info and location map for new bicycle parking added to OpenStreetMap within a GeoJSON boundary.

Bike parking tweepy bot app A twitter bot app that searches for bicycle parking added to OpenStreetMap. Relies on AWS Lambda/S3, Python3, Tweepy, Flas

Angelo Trivisonno 1 Dec 19, 2021
geobeam - adds GIS capabilities to your Apache Beam and Dataflow pipelines.

geobeam adds GIS capabilities to your Apache Beam pipelines. What does geobeam do? geobeam enables you to ingest and analyze massive amounts of geospa

Google Cloud Platform 61 Nov 08, 2022
Python bindings to libpostal for fast international address parsing/normalization

pypostal These are the official Python bindings to https://github.com/openvenues/libpostal, a fast statistical parser/normalizer for street addresses

openvenues 651 Dec 16, 2022
FDTD simulator that generates s-parameters from OFF geometry files using a GPU

Emport Overview This repo provides a FDTD (Finite Differences Time Domain) simulator called emport for solving RF circuits. Emport outputs its simulat

4 Dec 15, 2022
Histogram matching plugin for rasterio

rio-hist Histogram matching plugin for rasterio. Provides a CLI and python module for adjusting colors based on histogram matching in a variety of col

Mapbox 75 Sep 23, 2022
This GUI app was created to show the detailed information about the weather in any city selected by user

WeatherApp Content Brief description Tools Features Hotkeys How it works Screenshots Ways to improve the project Installation Brief description This G

TheBugYouCantFix 5 Dec 30, 2022
A package built to support working with spatial data using open source python

EarthPy EarthPy makes it easier to plot and manipulate spatial data in Python. Why EarthPy? Python is a generic programming language designed to suppo

Earth Lab 414 Dec 23, 2022
Spectral decomposition for characterizing long-range interaction profiles in Hi-C maps

Inspectral Spectral decomposition for characterizing long-range interaction prof

Nezar Abdennur 6 Dec 13, 2022
Pure python WMS

Ogcserver Python WMS implementation using Mapnik. Depends Mapnik = 0.7.0 (and python bindings) Pillow PasteScript WebOb You will need to install Map

Mapnik 130 Dec 28, 2022
Replace MSFS2020's bing map to google map

English verison here 中文 免责声明 本教程提到的方法仅用于研究和学习用途。我不对使用、拓展该教程及方法所造成的任何法律责任和损失负责。 背景 微软模拟飞行2020的地景使用了Bing的卫星地图,然而卫星地图比较老旧,很多地区都是几年前的图设置直接是没有的。这种现象在全球不同地区

hesicong 272 Dec 24, 2022
Pandas Network Analysis: fast accessibility metrics and shortest paths, using contraction hierarchies :world_map:

Pandana Pandana is a Python library for network analysis that uses contraction hierarchies to calculate super-fast travel accessibility metrics and sh

Urban Data Science Toolkit 321 Jan 05, 2023
Introduction to Geospatial Analysis in Python

Introduction to Geospatial Analysis in Python This repository is in support of a talk on geospatial data. Data To recreate all of the examples, the da

Dillon Gardner 6 Oct 19, 2022
Summary statistics of geospatial raster datasets based on vector geometries.

rasterstats rasterstats is a Python module for summarizing geospatial raster datasets based on vector geometries. It includes functions for zonal stat

Matthew Perry 437 Dec 23, 2022
Digital Earth Australia notebooks and tools repository

Repository for Digital Earth Australia Jupyter Notebooks: tools and workflows for geospatial analysis with Open Data Cube and xarray

Geoscience Australia 335 Dec 24, 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