Download and process satellite imagery in Python using Sentinel Hub services.

Overview

Package version Conda version Supported Python versions Build status Docs status Overall downloads Last month downloads Code coverage

Description

The sentinelhub Python package allows users to make OGC (WMS and WCS) web requests to download and process satellite images within your Python scripts. It supports Sentinel-2 L1C and L2A, Sentinel-1, Landsat 8, MODIS and DEM data source.

The package also supports obtaining data from Amazon Web Service. It can either provide data from public bucket with Sentinel-2 L1C imagery or requester pays bucket with Sentinel-2 L2A imagery. If specified the downloaded data can be stored in ESA .SAFE format (all types of .SAFE format are supported).

Installation

The package requires a Python version >= 3.6 and installed C/C++ compiler. The package is available on the PyPI package manager and can be installed with

$ pip install sentinelhub --upgrade

Alternatively, the package can be installed with Conda from conda-forge channel

conda install -c conda-forge sentinelhub 

To install the package manually, clone the repository and

$ python setup.py build
$ python setup.py install

Before installing sentinelhub-py on Windows it is recommended to install package shapely from Unofficial Windows wheels repository

Once installed or updated the package can be configured according to instructions in documentation.

Content

OGC web service

Some of the major features are linked to one's Sentinel Hub account:

  • support for Web Map Service (WMS) and Web Coverage Service (WCS) requests using your Sentinel Hub account;
  • support for standard and custom multi-spectra layers, such as unprocessed bands, true color imagery, or NDVI;
  • support for multi-temporal requests;
  • support for cloud coverage filtering;
  • support for different Coordinate Reference Systems;
  • support to read and write downloaded data to disk in the most common image and data formats;
  • support for various data sources:
    • Sentinel-2 L1C,
    • Sentinel-2 L2A,
    • Sentinel-1,
    • Landsat 8,
    • MODIS,
    • DEM.

AWS data download

The package allows to download Sentinel-2 data from Sentinel-2 on AWS and reconstruct data into ESA .SAFE format.

The following are implemented:

  • support for Sentinel-2 L1C and Sentinel-2 L2A data;
  • support of old and new (i.e. compact) .SAFE format;
  • support for downloading of either entire product, or a map of the .SAFE structure only;
  • support of command lines entries;
  • adjustable threaded downloads, and optional redownloads of existing data (not default);
  • requires either S-2 product ID, or tile name and date of a product.

In case of Sentinel-2 L2A data AWS access key is required.

Documentation

For more information on the package and to access the documentation, visit readthedocs.

Examples

Jupyter notebooks on how to use the modules to execute OGC requests, or download raw data from AWS in .SAFE format can be found in the examples folder, or viewed in the docs:

  • Using OGC web services (link)
  • Using utilities for large geographical areas (link)
  • AWS data download (link)
  • AWS data download from command line in .SAFE format (link)

Blog posts

Questions and Issues

Feel free to ask questions about the package and its use cases at Sentinel Hub forum or raise an issue on GitHub.

You are welcome to send your feedback to the package authors, Sentinel Hub research team, through any of Sentinel Hub communication channel.

License

See LICENSE.

Comments
  • [BUG] `MissingTokenError` setting `config.sh_base_url` to point to CREODIAS

    [BUG] `MissingTokenError` setting `config.sh_base_url` to point to CREODIAS

    Hi everyone,

    This issue has been reported and described here. In my case, this happens setting config.sh_base_url to "https://creodias.sentinel-hub.com" to include Sentinel-3 and get a search iterator through a catalog.search() which is then used in a process API request as described here.

    Thank you a lot in advance for your help!

    bug 
    opened by AdrienWehrle 20
  • Segfault on import

    Segfault on import

    Hi maintainers

    On AWS-hosted Ubuntu 18.04 server,

    import sentinelhub
    

    fails with a segfault. On strace, something seems to be repeatedly opening and closing the same file:

    openat(AT_FDCWD, "/home/ubuntu/tools/miniconda/envs/pyeo_env/share/proj/epsg", O_RDONLY) = 6
    close(6)
    

    Using sentinelhub in a conda environment, installed with pip. Python 3.7.3, numpy 1.16.4 - everything else as installed in the pip. I'll put my whole environment in the first comment.

    Thanks,

    bug 
    opened by Thingus 10
  • [HELP] I am creating an api endpoint to return an Image

    [HELP] I am creating an api endpoint to return an Image

    How can I return an image I am using sentinelhub-py using a Process API for NDVI it returns an array how do I convert this array to an image.

    I can't seem to get it work with PIL

    some please help me

    help wanted question 
    opened by femiir 9
  • don't create bbox if not specified by user

    don't create bbox if not specified by user

    bbox is not created if the user doesn't specify it. I modified an already existing test in order to avoid doing too many requests. The modified test is test_multipart_geometry, since the results doesn't change from the previous version, where bbox was specified explicitly, I would say that there is no reason to create the bbox.

    opened by DomagojKorais 9
  • Applying SI_LULC_pipeline for different AOI

    Applying SI_LULC_pipeline for different AOI

    Hi @mlubej , I am trying to use the SI_LULC_pipeline.ipynb for a different AOI, namely, a state in India. When I read the shape file using GeoPandas, and print the dimensions, it displays that the dimensions are like 2 X 1 m^2. Then I tried using the filename.buffer(500), which is part of the code. Then when I plot it, I get the following output:

    /opt/anaconda3/envs/geopython-environment/lib/python3.6/site-packages/ipykernel_launcher.py:4: UserWarning: Geometry is in a geographic CRS. Results from 'buffer' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.

    after removing the cwd from sys.path.

    Additionally, the plot of the state looks like a ball sometimes, or a crescent moon sometimes. How do I get the correct plot and correctly scaled dimensions so that I can apply the algorithm for this AOI?

    opened by vpbajaj 8
  • Error of Sentinel-5P data request

    Error of Sentinel-5P data request

    Python 3.7.3.
    >> pip freeze
    aenum==2.2.3
    boto3==1.10.47
    botocore==1.13.47
    certifi==2019.11.28
    chardet==3.0.4
    Click==7.0
    cycler==0.10.0
    docutils==0.15.2
    idna==2.8
    imagecodecs-lite==2019.12.3
    jmespath==0.9.4
    kiwisolver==1.1.0
    matplotlib==3.1.2
    numpy==1.18.1
    Pillow==7.0.0
    pyparsing==2.4.6
    pyproj==2.4.2.post1
    python-dateutil==2.8.1
    requests==2.22.0
    s3transfer==0.2.1
    sentinelhub==2.6.1
    Shapely==1.6.4.post2
    six==1.13.0
    tifffile==2019.7.26.2
    urllib3==1.25.7
    utm==0.5.0
    

    I tried to create default SEntinel-5P template and custom empty template with 1 layer using SENTINEL-5P data. INSTANCE_ID is correct. in layer selected Source Sentinel-5P - L2. Try make request like this:

        conf_id = '%Here my instance id of default sentinel-hub SENTINEL-5P template%'
        layer = 'AER_AI_340_380'
        coords = [46.16, -16.15, 46.51, -15.58]
        bbox = BBox(bbox=coords, crs=CRS.WGS84)
        request = WcsRequest(data_folder='test_dir',
                                       data_source=DataSource.SENTINEL5P,
                                       layer=layer,
                                       bbox=bbox,
                                       time=('2018-12-15', '2020-01-08'),
                                       image_format=MimeType.TIFF_d32f,
                                       instance_id=conf_id)
        img = request.get_data(save_data=True)
    

    But I get an Error

    /home/mishka/Documents/python/venvs/sentinelhub/lib/python3.7/site-packages/pyproj/crs.py:77: FutureWarning: '+init=<authority>:<code>' syntax is deprecated. '<authority>:<code>' is the preferred initialization method.
      return _prepare_from_string(" ".join(pjargs))
    /home/mishka/Documents/python/venvs/sentinelhub/lib/python3.7/site-packages/pyproj/crs.py:77: FutureWarning: '+init=<authority>:<code>' syntax is deprecated. '<authority>:<code>' is the preferred initialization method.
      return _prepare_from_string(" ".join(pjargs))
    Traceback (most recent call last):
      File "/home/mishka/Documents/python/venvs/sentinelhub/lib/python3.7/site-packages/sentinelhub/download.py", line 236, in execute_download_request
        response.raise_for_status()
      File "/home/mishka/Documents/python/venvs/sentinelhub/lib/python3.7/site-packages/requests/models.py", line 940, in raise_for_status
        raise HTTPError(http_error_msg, response=self)
    requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://services.sentinel-hub.com/ogc/wfs/2c14d0df-74cd-477e-88e1-da5e711c6c48?SERVICE=wfs&REQUEST=GetFeature&TYPENAMES=S5p_L2.TILE&BBOX=-16.15%2C46.16%2C-15.58%2C46.51&OUTPUTFORMAT=application%2Fjson&SRSNAME=EPSG%3A4326&TIME=2018-12-15T00%3A00%3A00%2F2020-01-08T23%3A59%3A59&MAXCC=100.0&MAXFEATURES=100&FEATURE_OFFSET=0
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/home/mishka/Documents/python/venvs/sentinelhub/lib/python3.7/site-packages/sentinelhub/download.py", line 257, in execute_download_request
        raise DownloadFailedException(_create_download_failed_message(exception, request.url))
    sentinelhub.download.DownloadFailedException: Failed to download from:
    https://services.sentinel-hub.com/ogc/wfs/2c14d0df-74cd-477e-88e1-da5e711c6c48?SERVICE=wfs&REQUEST=GetFeature&TYPENAMES=S5p_L2.TILE&BBOX=-16.15%2C46.16%2C-15.58%2C46.51&OUTPUTFORMAT=application%2Fjson&SRSNAME=EPSG%3A4326&TIME=2018-12-15T00%3A00%3A00%2F2020-01-08T23%3A59%3A59&MAXCC=100.0&MAXFEATURES=100&FEATURE_OFFSET=0
    with HTTPError:
    400 Client Error: Bad Request for url: https://services.sentinel-hub.com/ogc/wfs/2c14d0df-74cd-477e-88e1-da5e711c6c48?SERVICE=wfs&REQUEST=GetFeature&TYPENAMES=S5p_L2.TILE&BBOX=-16.15%2C46.16%2C-15.58%2C46.51&OUTPUTFORMAT=application%2Fjson&SRSNAME=EPSG%3A4326&TIME=2018-12-15T00%3A00%3A00%2F2020-01-08T23%3A59%3A59&MAXCC=100.0&MAXFEATURES=100&FEATURE_OFFSET=0
    Server response: "TYPENAME=S5p_L2.TILE is invalid!"
    
    opened by IBunDem 7
  • Failed to load resource: the server responded with a status of 503 (Service Unavailable)

    Failed to load resource: the server responded with a status of 503 (Service Unavailable)

    Hi,

    I have been trying to fetch data using WMS, however, I get 503 status every time. Can someone help?

    EDIT 1: The image returned in a blank white image. Also, server still returns a 503 status

    opened by achyutjoshi 7
  • Error when `pip install sentinelhub`

    Error when `pip install sentinelhub`

    Hi, I'm installing your model using pip in a Conda environment, like I did about a month ago where it worked. However, today it failed with this error.

    λ pip install sentinelhub --upgrade
    Collecting sentinelhub
      Using cached sentinelhub-1.1.1.tar.gz
    Requirement already up-to-date: click in c:\users\user\appdata\local\continuum\anaconda3\envs\data_science\lib\site-packages (from sentinelhub)
    Collecting cython (from sentinelhub)
      Using cached Cython-0.28.1-cp36-cp36m-win_amd64.whl
    Collecting matplotlib (from sentinelhub)
      Using cached matplotlib-2.2.2-cp36-cp36m-win_amd64.whl
    Collecting numpy (from sentinelhub)
      Using cached numpy-1.14.2-cp36-none-win_amd64.whl
    Collecting opencv-python (from sentinelhub)
      Using cached opencv_python-3.4.0.12-cp36-cp36m-win_amd64.whl
    Collecting pip==9.0.1 (from sentinelhub)
      Using cached pip-9.0.1-py2.py3-none-any.whl
    Collecting pyproj (from sentinelhub)
      Using cached pyproj-1.9.5.1.tar.gz
        Complete output from command python setup.py egg_info:
        nad2bin.c
        nad2bin.c(129): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
        nad2bin.c(130): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
        nad2bin.c(137): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
        nad2bin.c(138): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
        nad2bin.c(352): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
        nad2bin.c(353): warning C4244: '=': conversion from 'double' to 'float', possible loss of data
        pj_malloc.c
        Generating code
        Finished generating code
        LINK : fatal error LNK1158: cannot run 'rc.exe'
        using bundled proj4..
        Traceback (most recent call last):
          File "C:\Users\user\AppData\Local\Continuum\anaconda3\envs\data_science\lib\distutils\_msvccompiler.py", line 519, in link
            self.spawn([self.linker] + ld_args)
          File "C:\Users\user\AppData\Local\Continuum\anaconda3\envs\data_science\lib\distutils\_msvccompiler.py", line 542, in spawn
            return super().spawn(cmd)
          File "C:\Users\user\AppData\Local\Continuum\anaconda3\envs\data_science\lib\distutils\ccompiler.py", line 909, in spawn
            spawn(cmd, dry_run=self.dry_run)
          File "C:\Users\user\AppData\Local\Continuum\anaconda3\envs\data_science\lib\distutils\spawn.py", line 38, in spawn
            _spawn_nt(cmd, search_path, dry_run=dry_run)
          File "C:\Users\user\AppData\Local\Continuum\anaconda3\envs\data_science\lib\distutils\spawn.py", line 81, in _spawn_nt
            "command %r failed with exit status %d" % (cmd, rc))
        distutils.errors.DistutilsExecError: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\link.exe' failed with exit status 1158
    
        During handling of the above exception, another exception occurred:
    
        Traceback (most recent call last):
          File "<string>", line 1, in <module>
          File "C:\Users\user\AppData\Local\Temp\pip-build-opj49wbm\pyproj\setup.py", line 74, in <module>
            cc.link_executable(objects, execname, extra_postargs = [ '/MANIFEST' ] if os.name == 'nt' else  None)
          File "C:\Users\user\AppData\Local\Continuum\anaconda3\envs\data_science\lib\distutils\ccompiler.py", line 734, in link_executable
            debug, extra_preargs, extra_postargs, None, target_lang)
          File "C:\Users\user\AppData\Local\Continuum\anaconda3\envs\data_science\lib\distutils\_msvccompiler.py", line 522, in link
            raise LinkError(msg)
        distutils.errors.LinkError: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\link.exe' failed with exit status 1158
    
        ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in C:\Users\user\AppData\Local\Temp\pip-build-opj49wbm\pyproj\
    

    I asked Google about the error and found this fix, https://stackoverflow.com/a/44563421/7796217, which lets me install the model without any errors. However, this requires that I'm running the installation in a terminal with administrator permissions, else I get the following error:

    Exception:
    Traceback (most recent call last):
      File "c:\users\user\appdata\local\continuum\anaconda3\envs\data_science\lib\shutil.py", line 387, in _rmtree_unsafe
        os.unlink(fullname)
    PermissionError: [WinError 5] Access is denied: 'C:\\Users\\user\\AppData\\Local\\Temp\\pip-ba9_depc-uninstall\\users\\user\\appdata\\local\\continuum\\anaconda3\\envs\\data_science\\lib\\site-packages\\matplotlib\\backends\\_backend_agg.cp36-win_amd64.pyd
    '```
    
    I hope you can find a solution such that the installation only requires to run `pip install sentinelhub --upgrade`.
    enhancement 
    opened by PeterFogh 7
  • [BUG] Unable to download Sentinel images earlier than 2018

    [BUG] Unable to download Sentinel images earlier than 2018

    Describe the bug

    Unable to download Sentinel images from aws S3 that are earlier than 2018 as the productInfo.json url is invalid on roda.sentinel-hub.com

    To Reproduce

    Steps to reproduce the behavior:

    1. Setup the aws credentials
    2. Run sentinelhub.aws --product S2A_MSIL1C_20151125T095332_N0204_R079_T33TXL_20151125T095500
    3. Check the error message on the terminal output

    Expected behavior

    A product with name: S2A_MSIL1C_20151125T095332_N0204_R079_T33TXL_20151125T095500.SAFE should have been downloaded on the current working directory.

    Environment

    Python 3.6.9 Dependencies:

    aenum==3.1.0
    asn1crypto==0.24.0
    boto3==1.18.62
    botocore==1.21.62
    certifi==2021.10.8
    chardet==4.0.0
    click==7.1.2
    cryptography==2.1.4
    dataclasses==0.8
    dataclasses-json==0.5.6
    GDAL==2.2.2
    geojson==2.5.0
    geomet==0.3.0
    html2text==2020.1.16
    idna==2.6
    jmespath==0.10.0
    keyring==10.6.0
    keyrings.alt==3.0
    marshmallow==3.14.0
    marshmallow-enum==1.5.1
    mypy-extensions==0.4.3
    numpy==1.19.5
    oauthlib==3.1.1
    Pillow==8.4.0
    psycopg2==2.8.6
    pycrypto==2.6.1
    PyGObject==3.26.1
    pyproj==3.0.1
    python-apt==1.6.5+ubuntu0.7
    python-dateutil==2.8.2
    pyxdg==0.25
    requests==2.25.1
    requests-oauthlib==1.3.0
    s3transfer==0.5.0
    SecretStorage==2.3.1
    sentinelhub==3.4.0
    sentinelsat==0.13
    Shapely==1.7.0
    six==1.11.0
    tifffile==2020.9.3
    tqdm==4.62.3
    typing-extensions==3.10.0.2
    typing-inspect==0.7.1
    unattended-upgrades==0.1
    urllib3==1.26.7
    utm==0.7.0
    

    Stack trace or screenshots

    root@b745121c67a8:/eo-tools/downloader/sentinelhub-downloader# sentinelhub.aws --product S2A_MSIL1C_20151125T095332_N0204_R079_T33TXL_20151125T095500
    Traceback (most recent call last):
      File "/usr/local/lib/python3.6/dist-packages/sentinelhub/download/handlers.py", line 22, in new_download_func
        return download_func(self, request)
      File "/usr/local/lib/python3.6/dist-packages/sentinelhub/download/client.py", line 152, in _execute_download
        response.raise_for_status()
      File "/usr/local/lib/python3.6/dist-packages/requests/models.py", line 943, in raise_for_status
        raise HTTPError(http_error_msg, response=self)
    requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://roda.sentinel-hub.com/sentinel-s2-l1c/products/2015/11/25/S2A_MSIL1C_20151125T095332_N0204_R079_T33TXL_20151125T095500/productInfo.json
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "/usr/local/bin/sentinelhub.aws", line 8, in <module>
        sys.exit(aws())
      File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 829, in __call__
        return self.main(*args, **kwargs)
      File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 782, in main
        rv = self.invoke(ctx)
      File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 1066, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 610, in invoke
        return callback(*args, **kwargs)
      File "/usr/local/lib/python3.6/dist-packages/sentinelhub/commands.py", line 67, in aws
        download_safe_format(product_id=product, folder=folder, redownload=redownload, bands=band_list)
      File "/usr/local/lib/python3.6/dist-packages/sentinelhub/data_request.py", line 945, in download_safe_format
        AwsProductRequest(product_id, data_folder=folder, bands=bands, safe_format=True)
      File "/usr/local/lib/python3.6/dist-packages/sentinelhub/data_request.py", line 802, in __init__
        super().__init__(**kwargs)
      File "/usr/local/lib/python3.6/dist-packages/sentinelhub/data_request.py", line 758, in __init__
        super().__init__(AwsDownloadClient, **kwargs)
      File "/usr/local/lib/python3.6/dist-packages/sentinelhub/data_request.py", line 47, in __init__
        self.create_request()
      File "/usr/local/lib/python3.6/dist-packages/sentinelhub/data_request.py", line 807, in create_request
        metafiles=self.metafiles, config=self.config)
      File "/usr/local/lib/python3.6/dist-packages/sentinelhub/aws.py", line 338, in __init__
        self.product_info = client.get_json(self.get_url(AwsConstants.PRODUCT_INFO))
      File "/usr/local/lib/python3.6/dist-packages/sentinelhub/download/client.py", line 209, in get_json
        return self._single_download(request, decode_data=True)
      File "/usr/local/lib/python3.6/dist-packages/sentinelhub/download/client.py", line 119, in _single_download
        response_content = self._execute_download(request)
      File "/usr/local/lib/python3.6/dist-packages/sentinelhub/download/handlers.py", line 72, in new_download_func
        return download_func(self, request)
      File "/usr/local/lib/python3.6/dist-packages/sentinelhub/download/aws_client.py", line 29, in _execute_download
        return super()._execute_download(request)
      File "/usr/local/lib/python3.6/dist-packages/sentinelhub/download/handlers.py", line 44, in new_download_func
        return download_func(self, request)
      File "/usr/local/lib/python3.6/dist-packages/sentinelhub/download/handlers.py", line 27, in new_download_func
        raise DownloadFailedException(_create_download_failed_message(exception, request.url)) from exception
    sentinelhub.exceptions.DownloadFailedException: Failed to download from:
    https://roda.sentinel-hub.com/sentinel-s2-l1c/products/2015/11/25/S2A_MSIL1C_20151125T095332_N0204_R079_T33TXL_20151125T095500/productInfo.json
    with HTTPError:
    404 Client Error: Not Found for url: https://roda.sentinel-hub.com/sentinel-s2-l1c/products/2015/11/25/S2A_MSIL1C_20151125T095332_N0204_R079_T33TXL_20151125T095500/productInfo.json
    Server response: ""
    

    Desktop (please complete the following information):

    • OS: Linux b745121c67a8 4.14.246-187.474.amzn2.x86_64 #1 SMP Tue Sep 7 21:48:11 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

    Additional context The same happens for all these products :

    • S2A_MSIL2A_20160327T100012_N0201_R122_T33TWL_20160327T100012
    • S2A_MSIL2A_20160426T100032_N0213_R122_T33TWL_20210121T125921
    • S2A_MSIL2A_20170227T095021_N0204_R079_T33TWL_20170227T095613
    • S2B_MSIL2A_20170804T100029_N0213_R122_T33TWL_20210107T074849
    bug 
    opened by thanastasiadis 6
  • [FEAT] Explicit setting of tile id for the Batch processing API

    [FEAT] Explicit setting of tile id for the Batch processing API

    What is the problem? Please describe.

    I want to explicitly specify the tile identifiers (tile id) instead of setting the region geometry in the Python Batch Processing API (as I understand it in the REST API the same thing) to setup the region for data processing.

    What i tried to do

    I want to download raw Senitnel1 (orthirectified, sigma0) & Sentinel2 (L1C) timed data. For this I am using a grid to slice the data. Since the data for Sentinel-Hub is prepared according to one of the GRIDs (tiling-grids), I decided to use the grid from sentinelhub.

    Since I want to download data sliced by dates, I first select those tiles for which there is data for a certain date. Then I would like to download the tiles after selecting them. However, all selected tiles combined into one multipolygon cannot be given as geometry for downloading (geometry parameter in SeninelHubRequest) due to the constraint on geometry complexity. I would like to explicitly pass the Tiles IDs of the tiles to which I want to crawl the data (and independently control their selection), instead of implicitly specifying them through geometry.

    enhancement 
    opened by gakarak 6
  • Error install sentinelhub

    Error install sentinelhub

    Hello! Docker + Ubuntu 18.04 + Python 3.7:

    FROM ubuntu:18.04 RUN apt-get update && apt-get install -y software-properties-common python3.7 python3-pip RUN pip3 install sentinelhub --upgrade

    produces error:
    imagecodecs/_aec.c:602:10: fatal error: libaec.h: No such file or directory #include "libaec.h" compilation terminated.

    Will be grateful for the help. Sergey

    opened by skemaikin 6
  • [FEAT] Enable BBoxSplitter to accept bbox_size parameter

    [FEAT] Enable BBoxSplitter to accept bbox_size parameter

    What is the problem? Please describe.

    Opposed to the UTM splitters, the BBoxSplitter does not accept a parameter bbox_size, but only a split_shape, splitting the AOI into n x m equally sized boxes. This limitation makes obtaining boxes of a certain pixel size unnecessarily complicated.

    Here's the solution Below sample solution is basically a copy of the existing BBoxSplitter, the only change being the call

    self.area_bbox.get_partition(size_x=size_x, size_y=size_y)
    

    instead of

    bbox_partition = self.area_bbox.get_partition(num_x=columns, num_y=rows)
    

    as get_partition() already implements the necessary functionality to realize this feature request.

    Sample solution:

    class BBoxSplitterSize(AreaSplitter):
        """A tool that splits the given area into smaller parts. Given the area it calculates its bounding box and splits
        it into smaller bounding boxes of equal size. Then it filters out the bounding boxes that do not intersect the
        area. If specified by user it can also reduce the sizes of the remaining bounding boxes to best fit the area.
        """
    
        def __init__(
            self,
            shape_list: Iterable[Union[Polygon, MultiPolygon, _BaseGeometry]],
            crs: CRS,
            split_shape: Union[int, Tuple[int, int]],
            **kwargs: Any,
        ):
            """
            :param shape_list: A list of geometrical shapes describing the area of interest
            :param crs: Coordinate reference system of the shapes in `shape_list`
            :param split_shape: Parameter that describes the size of patches (in meters) into which the area bounding box will be split.
                It can be a tuple of the form `(width, height)` which means the area bounding box will be split into patches
                of size (width, height). It can also be a single integer `size` which is the same as `(size, size)`.
            :param reduce_bbox_sizes: If `True` it will reduce the sizes of bounding boxes so that they will tightly fit
                the given area geometry from `shape_list`.
            """
            self.split_shape = _parse_to_pair(split_shape, allowed_types=(int,), param_name="split_shape")
            super().__init__(shape_list, crs, **kwargs)
    
        def _make_split(self) -> Tuple[List[BBox], List[Dict[str, object]]]:
            size_x, size_y = self.split_shape
            bbox_partition = self.area_bbox.get_partition(size_x=size_x, size_y=size_y)
    
            columns = len(bbox_partition)
            rows = len(bbox_partition[0])
    
            bbox_list, info_list = [], []
            for i, j in itertools.product(range(columns), range(rows)):
                if self._intersects_area(bbox_partition[i][j]):
                    bbox_list.append(bbox_partition[i][j])
    
                    info = {"parent_bbox": self.area_bbox, "index_x": i, "index_y": j}
                    info_list.append(info)
    
            return bbox_list, info_list
    
    

    Alternatively, this behavior can of course be integrated into the existing BBoxSplitter.

    Best, Colin

    enhancement 
    opened by ColinMoldenhauer 1
  • [BUG] BatchSplitter doesn't work with bbox, only with geometry

    [BUG] BatchSplitter doesn't work with bbox, only with geometry

    Describe the bug

    The above happens if a batch request is defined with the bbox parameter and not the geometry parameter. This causes issues with the following code.

    from sentinelhub import BatchSplitter
    from matplotlib.patches import Patch
    
    splitter = BatchSplitter(batch_request=batch_request, config=config)
    splitter.get_bbox_list()
    

    the error

    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    /var/folders/f7/wf5f4ngj0mxd5xrdjzqz7vyr0000gn/T/ipykernel_57279/4253228497.py in <module>
          2 from matplotlib.patches import Patch
          3 
    ----> 4 splitter = BatchSplitter(batch_request=batch_request, config=config)
          5 splitter.get_bbox_list()
    
    ~/.pyenv/versions/3.8.7/envs/am/lib/python3.8/site-packages/sentinelhub/areas.py in __init__(self, request_id, batch_request, config)
        714         self.batch_request = batch_request
        715 
    --> 716         batch_geometry = batch_request.geometry
        717         super().__init__([batch_geometry.geometry], batch_geometry.crs)
        718 
    
    ~/.pyenv/versions/3.8.7/envs/am/lib/python3.8/site-packages/sentinelhub/sentinelhub_batch.py in geometry(self)
        648         _, geometry, crs = self._parse_bounds_payload()
        649         if geometry is None:
    --> 650             raise ValueError('Geometry is not defined for this batch request')
        651         return Geometry(geometry, crs)
        652 
    
    ValueError: Geometry is not defined for this batch request
    

    The issue is in the assumption made in https://github.com/sentinel-hub/sentinelhub-py/blob/develop/sentinelhub/areas.py#L647

    To Reproduce

    Steps to reproduce the behavior:

    1. define request with bbox
    2. define batch request
    3. use batch splitter

    Expected behavior

    no crash

    Environment

    • Python 3.8.7
    • latest develop of sentinelhub-py

    Stack trace or screenshots

    image

    Desktop (please complete the following information):

    • macOS Monterey 12.6
    • VSCode
    bug 
    opened by mlubej 0
  • POSTPONED: Dependency handling to support QGIS plugin

    POSTPONED: Dependency handling to support QGIS plugin

    A QGIS Python environment doesn't have all dependencies of sentinelhub-py and some are too complicated to be shipped with the plugin. Therefore, this solution handles missing dependencies with a warning instead of an error. Therefore the package can work without them.

    opened by AleksMat 0
  • [FEAT] Option to have multiple SH profiles and switch between them

    [FEAT] Option to have multiple SH profiles and switch between them

    What is the problem? Please describe.

    Sometimes we're working with multiple SH credentials on multiple projects. In order not to have multiple files or repos cloned, it would be beneficial to have a profiles file, like in AWS case, and just provide the profile name.

    enhancement 
    opened by mlubej 0
  • [FEAT] 1st example cannot be replicated because of missing `utils.plot_image`

    [FEAT] 1st example cannot be replicated because of missing `utils.plot_image`

    What is the problem? Please describe.

    I tried to follow the first example provided in the documentation https://sentinelhub-py.readthedocs.io/en/latest/examples/process_request.html#Imports and got stuck when trying to render the downloaded image - the example notebook references utils.plot_image which I have no idea how to get to.

    Here's the solution ?

    Alternatives

    • Provide the utility function on each example page.
    • provide the plot_image as part of the sentinelhub-py package
    • make some other mention (e.g. in the imports section) to help the user get to this function (e.g. link to https://github.com/sentinel-hub/sentinelhub-py/blob/master/examples/utils.py)
    enhancement 
    opened by mkadunc 1
  • [FEAT] Official batch plot tool and monitoring

    [FEAT] Official batch plot tool and monitoring

    What is the problem? Please describe.

    It would be really cool if the batch status plotting functionality would be available officially, and perhaps even possible to use it in the monitor_batch_job, which already regularly updates the progress bar (it could also regularly produce plots). They are sometimes more intuitive in cases where things go wrong (or just nice to look at/create a timelapse/..)

    Here's the solution

    I can help once the updates start happening to the repo

    enhancement 
    opened by mlubej 0
Releases(v3.8.0)
  • v3.8.0(Oct 6, 2022)

    Changelog:

    • (codebreaking) Switched to newly deployed Catalog 1.0.0. Main changes:
      • Slight changes in structure of results.
      • The query parameter is replaced with filter, which uses the CQL2 language for querying/filtering results.
    • Added utility function statistical_to_dataframe for transforming results of (batch) statistical API to a dataframe. It is located in the new sentinelhub.data_utils module and requires the user to additionally install the pandas package.
    • Fixed conditionals in batch client that caused issues when requesting tiling grid with id 0.
    • Included an example notebook that describes how to obtain response headers. This can be used to access information about PU.
    • Added pre-commit hooks to repository for easier development.
    • Various minor improvements.
    Source code(tar.gz)
    Source code(zip)
  • v3.7.0(Aug 16, 2022)

    Changelog:

    • Official support for Sentinel Hub Batch Statistical API:
      • Implemented SentinelHubBatchStatistical and BatchStatisticalRequest classes to serve as an interface for the API.
      • Implemented monitor_batch_statistical_job and monitor_batch_statistical_analysis utility functions for monitoring batch statistical jobs.
      • Implemented AwsBatchResults utility class for efficient loading of batch results from an S3 bucke.
      • Prepared a tutorial notebook.
      • Various minor improvements of batch-related functionalities and added more tests.
    • Upgrade of download procedure to support better access to information about responses:
      • Implemented DownloadResponse object.
      • Changed the structure of response.json files in cached data to include info about response.
      • Changed the effect of decode_data=False parameter that is passed to DownloadClient.download and DataRequest.get_data methods. It used to provide raw response in bytes but now it provides instances of DownloadResponse object containing raw response, response headers, and more information about a response.
      • Larger changes in the internal structure of download clients.
    • Parameter show_progress is now available for all DataRequest.get_data and DataRequest.save_data method calls.
    • Added SHConfig.__eq__ method that compares object values.
    • Added BBox.apply, Geometry.apply, and BBoxCollection.apply methods.
    • Improved handling of User-Agent headers - SentinelHubDownloadClient now always includes them.
    • Removed references to rate limit headers that don't exist anymore from SentinelHubRateLimit.
    • Changed how the request payer is configured in AwsDownloadClient - parameter RequestPayer="requester" is not hardcoded anymore.
    • Removed deprecated DataSource class, old Landsat DataCollection names, and base_url parameter.
    • Various minor improvements in code, tests, and documentation.
    Source code(tar.gz)
    Source code(zip)
  • v3.6.4(Jul 27, 2022)

    Changelog:

    • Increased minimal Pillow version to 9.2.0 and removed a fallback to rasterio when decoding JP2 images.
    • Various minor improvements in docstrings, example notebooks, and tests.
    Source code(tar.gz)
    Source code(zip)
  • v3.6.3(Jun 21, 2022)

    Changelog:

    • Fixed and issue with missing bufferX and bufferY parameters in BatchSplitter.
    • Updated minimal version of requests package in requirements to avoid issues with failed JSONDecodeError import.
    • Added flake8 style checker for code and notebooks and isort formatting for notebooks.
    Source code(tar.gz)
    Source code(zip)
  • v3.6.2(Jun 13, 2022)

    Changelog:

    • BatchSplitter is now returning bounding boxes with a correct buffer and without numerical errors. This change is code-breaking.
    • Fixed an issue where failed authentication to Sentinel Hub would raise a misleading MissingTokenError. Now a correct error is being raised.
    • Improved parsing of error messages obtained from Sentinel Hub.
    • A few minor improvements.
    Source code(tar.gz)
    Source code(zip)
  • v3.6.1(Jun 3, 2022)

    Changelog:

    • Improvements of Sentinel Hub authentication session sharing:
      • sentinelhub.download.SessionSharingThread can now handle previously undeleted shared memory files and warn about them.
      • Added a high-level utility sentinelhub.download.SessionSharing that ensures thread joining at the end. The tutorial notebook has been updated accordingly.
    • Minor Pylint updates.
    Source code(tar.gz)
    Source code(zip)
  • v3.6.0(May 27, 2022)

    Changelog:

    • Official support for sharing Sentinel Hub authentication session between parallel Python processes:
      • improved interfaces of SentinelHubSession and SentinelHubDownloadClient,
      • implemented utilities sentinelhub.download.SessionSharingThread and sentinelhub.download.collect_shared_session for sharing session with standard Python multiprocessing,
      • added a tutorial notebook explaining the process and providing prototype implementations for different parallelization frameworks.
    • The package is now fully typed and mypy checks are performed in CI.
    • Refactored internal functionalities of SHConfig class.
    • DownloadFailedException now carries an optional instance of requests.RequestException.
    • Removed support for an old prototype EOCloud deployment of Sentinel Hub OGC services.
    • Documentation build improvements - package content pages are now being auto-generated. Some documentation links changed because of that.
    • Various minor improvements and fixes. Contributions by @sebastianclarke and @apazga
    Source code(tar.gz)
    Source code(zip)
  • v3.5.2(May 3, 2022)

    Changelog:

    • Fixed an issue with parsing WGS84 in sentinelhub.CRS class.
    • Fixed an issue with using SHConfig class in Ray workers. A few minor changes in SHConfig class.
    • Renamed sentinelhub.geometry.BaseGeometry to a private class sentinelhub.geometry._BaseGeometry.
    • Added type annotations for some modules.
    Source code(tar.gz)
    Source code(zip)
  • v3.5.1(Apr 21, 2022)

    Changelog:

    • New enums MosaickingOrder and ResamplingType with better parsing of parameters for mosaicking order, downsampling, and upsampling.
    • BBox.buffer method now has an option to apply an absolute buffer. Default is still a relative buffer.
    • Added monitor_batch_analysis utility function.
    • Added ByocCollectionBand dataclass for better deserialization of payloads from Sentinel Hub BYOC service.
    • Added SentinelHubSession.info method for obtaining session token information.
    • Increased cache size for CRS.projection, CRS.pyproj_crs, and CRS.get_transform_function methods.
    • Fixed an issue with a progress bar in download clients.
    • Added py.typed file.
    • Various minor improvements in code and documentation.
    Source code(tar.gz)
    Source code(zip)
  • v3.5.0(Mar 24, 2022)

    Changelog:

    • Larger change of internal package structure:
      • some modules were grouped into subfolders api, aws, download, and geopedia,
      • package dependencies for working with AWS are not installed by default anymore, instead they require sentinelhub[AWS] extension,
      • AWS functionalities can now be imported only from sentinelhub.aws
      • documentation and tests were updated to reflect these changes.
    • Downloading of Sentinel-2 data from AWS into .SAFE format was updated. Now all baselines, including 04.00, are correctly supported. Contributions by @anthony-scarth and @sebastianclarke.
    • Dependency Pillow>=9.0.0 is now officially supported. Because new versions incorrectly read 15-bit JPEG2000 images a warning is raised in such cases. The warning suggests to install rasterio which in sentinelhub-py now has priority over Pillow for reading JPEG2000 format.
    • Fixed an issue in DownloadClient cache checking.
    • Applied black and isort formatting on the entire repository.
    • Various minor updates in the code and documentation.
    Source code(tar.gz)
    Source code(zip)
  • v3.4.4(Feb 16, 2022)

    Changelog:

    • Improved handling of AWS credentials
    • Corrected LandSat units for bands with surface temperature
    • Added deprecation warning for Fis service
    • Various minor improvements
    Source code(tar.gz)
    Source code(zip)
  • v3.4.3(Jan 6, 2022)

    Changelog:

    • Dropped support for Python 3.6 and added support for Python 3.10.
    • Added a few new MimeType enums constants and MimeType.matches_extension method.
    Source code(tar.gz)
    Source code(zip)
  • v3.4.2(Dec 6, 2021)

    Changelog:

    • TileSplitter utility now works for any DataCollection enum. Its implementation changed from using Sentinel Hub WFS to using Sentinel Hub Catalog to collect data about tiles. Consequentially, some initialization parameters and some output information changed. These changes are code-breaking.
    • A couple of fixes in definitions of meta-bands for a few DataCollection enums.
    Source code(tar.gz)
    Source code(zip)
  • v3.4.1(Oct 27, 2021)

    Changelog:

    • Code-breaking change of attribute bands of class DataCollection. Switched from a list of band names to a list of band information (name, units, output types). DataCollection now also contains information about metabands (e.g. dataMask).
    • Fixed an issue with false hash collision detection
    • The time parameter in SentinelHubCatalog is now optional
    • SentinelHubBYOC now provides reingest_tile method
    • Minor fixes and improvements
    Source code(tar.gz)
    Source code(zip)
    sentinelhub-3.4.1.tar.gz(196.42 KB)
  • v3.4.0(Sep 10, 2021)

    Changelog:

    • Code-breaking change of Sentinel Hub Batch API interface (i.e. SentinelHubBatch). Check updated example notebook for more info. Related changes:
      • support for Batch collections endpoints,
      • support for endpoint to update a batch request,
      • added utility function monitor_batch_job,
      • code-breaking change of BatchSplitter class.
    • Renamed Landsat DataCollection enums to be in line with Sentinel Hub service. Old names are deprecated.
    • Better support for data fusion and added an example in documentation.
    • Official support for Python 3.9.
    • Logging improvements:
    • Download improvements:
      • option to show progress bar during download,
      • checking for hash collisions of cached downloaded data.
    • Option to hide credentials from SHConfig representation.
    • SentinelHubCatalog now correctly supports searching by collection id.
    • Change representation of geometry objects in notebooks.
    • Removed various functions and parameters which have been deprecated in earlier versions.
    • Converted all package tests from unittest to pytest.
    • A larger update of package Readme.
    • Minor fixes and improvements.
    Source code(tar.gz)
    Source code(zip)
  • v3.3.2(Jul 19, 2021)

    Changelog:

    • Added new data collection enums:
      • DataCollection.LANDSAT7_L1,
      • DataCollection.LANDSAT7_L2,
      • DataCollection.LANDSAT15_L1.
    • Fixed an issue where user-defined DataCollection objects couldn't be passed to a distributed environment.
    • Fixed an issue with projections from uncommon CRS and added an optional always_xy parameter.
    • Improvements in the documentation notebook about Sentinel Hub BYOC.
    • Minor improvements in code style and documentation.
    Source code(tar.gz)
    Source code(zip)
  • v3.3.1(Jun 15, 2021)

    Changelog:

    • Added new data collection enums:
      • DataCollection.LANDSAT8_L1,
      • DataCollection.LANDSAT8_L2,
      • DataCollection.LANDSAT45_L1,
      • DataCollection.LANDSAT45_L2.
    • Added support for downloading Sentinel-2 L2A products with a special baseline 00.01 from AWS. Contributed by @marcosdejesus
    • Added an optional offset parameter to UtmGridSplitter and UtmZoneSplitter.
    • Minor updates and fixes to support changes of Sentinel Hub services.
    • Various documentation and code style improvements and fixes.
    Source code(tar.gz)
    Source code(zip)
  • v3.3.0(May 12, 2021)

  • v3.2.1(Mar 26, 2021)

    Changelog:

    • Added new data collection enums:
      • DataCollection.DEM_MAPZEN,
      • DataCollection.DEM_COPERNICUS_30,
      • DataCollection.DEM_COPERNICUS_90
    • SentinelHubCatalog.search now correctly uses filters defined on DataCollection objects
    • Fixed a bug in GeopediaFeatureIterator
    • Various documentation improvements
    Source code(tar.gz)
    Source code(zip)
  • v3.2.0(Mar 5, 2021)

    Changelog:

    • Added support for Sentinel Hub Catalog API and a tutorial notebook explaining how to use it.
    • Added support for Sentinel Hub BYOC API and a tutorial notebook explaining how to use it.
    • Removed enums MimeType.TIFF_d8, MimeType.TIFF_d16, and MimeType.TIFF_d32f as they are not supported by Sentinel Hub service anymore. Use MimeType.TIFF instead.
    • Removed enums CustomUrlParam.ATMFILTER, CustomUrlParam.TRANSPARENT, and CustomUrlParam.BGCOLOR as they are not supported by Sentinel Hub service anymore.
    • Improved how time parameters are handled in the package and refactored time_utils.py module.
    • Various documentation improvements, better instructions about configuring Sentinel Hub credentials.
    • Added methods BBox.transform_bounds and Geometry.from_geojson.
    • Unified implementation of feature iterators throughout the package.
    • Various minor improvements and fixes.
    Source code(tar.gz)
    Source code(zip)
  • v3.1.0(Oct 19, 2020)

    Changelog:

    • Added support for Sentinel Hub Batch service and a tutorial notebook explaining how to use it.
    • Changed "data source" terminology to "data collection" to keep in sync with the Sentinel Hub service. Because of that DataSource has been renamed to DataCollection and data_source parameters renamed to data_collection. The old names became deprecated.
    • Large improvements in the implementation of DataCollection class (i.e. ex DataSource class) and supporting different deployments of Sentinel Hub service. Added a tutorial notebook explaining how to use the new DataCollection functionalities.
    • Improved parameter handling in SentinelHubRequest.input_data method. Added optional parameters upsampling and downsampling.
    • Deprecated sentinelhub.download.client.get_json function and replaced it with a method sentinelhub.download.client.DownloadClient.get_json.
    • A config.json is now being generated on-the-fly instead of being committed in the repository.
    • Minor improvements and fixes.
    Source code(tar.gz)
    Source code(zip)
  • v3.0.5(Aug 3, 2020)

  • v3.0.4(Jun 24, 2020)

  • v3.0.3(Jun 2, 2020)

  • v3.0.2(Mar 4, 2020)

    Change log:

    • Added a notebook with examples of how to use the SentinelHubRequest interface of Sentinel Hub Processing API. The notebook is also available in documentation.
    • OGC requests are now sending additional parameter warnings=false to better catch errors when requesting a too large image. (Note: this changes filenames of locally stored data.)
    • Improvements in when a session is created in the download procedure.
    • Improvements in CRS class, added CRS.pyproj_crs method.
    Source code(tar.gz)
    Source code(zip)
  • v3.0.1(Feb 26, 2020)

    Change log:

    • SentinelHubDownloadClient is now caching SentinelHubSession instances,
    • SentinelHubSession now uses retry logic on failed authentication requests,
    • removed unnecessary warnings about credentials,
    • added handling of requests.exceptions.ChunkedEncodingError.
    Source code(tar.gz)
    Source code(zip)
  • v3.0.0(Feb 17, 2020)

    Change log:

    • Large changes in Sentinel Hub rate-limiting object that improve download performance.
    • Added SentinelHubRequest class as an interface class for Sentinel Hub API.
    • Changed the filename convention of downloaded data.
    • Improvements in download procedure and DownloadRequest class.
    • Added support for Python 3.8, dropped support for Python 3.5.
    • DataRequest classes now work with an optional parameter config instead of instance_id.
    • sentinelhub.CRS now enables using any custom CRS.
    • Resolved pyproj warnings.
    • Removed deprecated methods of BBox and Geometry classes and transform_bbox function.
    • Various other improvements and fixes.
    Source code(tar.gz)
    Source code(zip)
  • v3.0.0b1(Nov 18, 2019)

    The main changes:

    • Support for new Sentinel Hub API
    • Download utilities refactored
    • Added an algorithm for handling rate-limiting when downloading from Sentinel Hub service
    • A new procedure of caching downloaded data
    • Changes of parameters in config.json

    More will be added soon.

    Source code(tar.gz)
    Source code(zip)
  • v2.6.1(Nov 11, 2019)

    Change log:

    • Added support for custom Sentinel Hub BYOC data sources
    • Sentinel Hub FisRequest now collects data with POST requests instead of GET requests
    Source code(tar.gz)
    Source code(zip)
  • v2.6.0(Jul 31, 2019)

Owner
Sentinel Hub
Sentinel Hub services by Sinergise
Sentinel Hub
Search and download Copernicus Sentinel satellite images

sentinelsat Sentinelsat makes searching, downloading and retrieving the metadata of Sentinel satellite images from the Copernicus Open Access Hub easy

null 837 Dec 28, 2022
Xarray backend to Copernicus Sentinel-1 satellite data products

xarray-sentinel WARNING: this product is a "technology preview" / pre-Alpha Xarray backend to explore and load Copernicus Sentinel-1 satellite data pr

B-Open 191 Dec 15, 2022
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
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
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
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
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
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
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
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
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
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
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
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
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
A library to access OpenStreetMap related services

OSMPythonTools The python package OSMPythonTools provides easy access to OpenStreetMap (OSM) related services, among them an Overpass endpoint, Nomina

Franz-Benjamin Mocnik 342 Dec 31, 2022
Automated download of LANDSAT data from USGS website

LANDSAT-Download It seems USGS has changed the structure of its data, and so far, I have not been able to find the direct links to the products? Help

Olivier Hagolle 197 Dec 30, 2022
This is a simple python code to get IP address and its location using python

IP address & Location finder @DEV/ED : Pavan Ananth Sharma Dependencies: ip2geotools Note: use pip install ip2geotools to install this in your termin

Pavan Ananth Sharma 2 Jul 5, 2022
An API built to format given addresses using Python and Flask.

An API built to format given addresses using Python and Flask. About The API returns properly formatted data, i.e. removing duplicate fields, distingu

null 1 Feb 27, 2022