diff --git a/pangeo/Pystac_Basics.ipynb b/pangeo/Pystac_Basics.ipynb
new file mode 100644
index 0000000..3af8bd0
--- /dev/null
+++ b/pangeo/Pystac_Basics.ipynb
@@ -0,0 +1,3468 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "220919ef-d7e7-4c92-9171-9f23fe25b84b",
+ "metadata": {},
+ "source": [
+ "# Using STAC Basics\n",
+ " \n",
+ "In this notebook, we utilise basic functions to explore the SentinelHub Catalog using Pystac."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0d8352d5-6bb1-40c3-9ce8-ddc71c202cf1",
+ "metadata": {},
+ "source": [
+ "For running the examples in this Jupyter Notebook you will need to install the pystac-client. To install it from PyPI using pip, use the following command:"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "996c25de-d18f-4965-b901-626ec4c56aa0",
+ "metadata": {},
+ "source": [
+ "In order to access the functionalities of the client API, we should import the pystac_client package along with other necessary packages as follows:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "17cdffbf-eb1c-4c52-bfd0-cd0812298567",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from pystac import Catalog\n",
+ "from pystac import StacIO\n",
+ "\n",
+ "from pystac_client import Client\n",
+ "from odc.stac import stac_load, configure_rio\n",
+ "import geopandas as gpd\n",
+ "import folium, shapely\n",
+ "import getpass"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d7f71c6e-b0f3-45d4-a8b2-e32c43b66f5c",
+ "metadata": {},
+ "source": [
+ "The Sentinel Hub API uses OAuth2 Authentication and requires that we have an access token. Thus in python the requests-oauthlib library can handle the retrieval of access tokens using our OAuth Client configuration."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "942e390a-3b13-48aa-86fd-f8345331070b",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdin",
+ "output_type": "stream",
+ "text": [
+ "Enter your OAuth Client ID ········\n",
+ "Enter your OAuth Client Secret ········\n"
+ ]
+ }
+ ],
+ "source": [
+ "def get_auth():\n",
+ " # token generation\n",
+ " from oauthlib.oauth2 import BackendApplicationClient\n",
+ " from requests_oauthlib import OAuth2Session\n",
+ "\n",
+ " # Your client credentials\n",
+ " client_id = getpass.getpass(\"Enter your OAuth Client ID\")\n",
+ " client_secret = getpass.getpass(\"Enter your OAuth Client Secret\")\n",
+ "\n",
+ " # Create a session\n",
+ " client = BackendApplicationClient(client_id=client_id)\n",
+ " oauth = OAuth2Session(client=client)\n",
+ "\n",
+ " # Get token for the session\n",
+ " gen_token = oauth.fetch_token(\n",
+ " token_url=\"https://identity.dataspace.copernicus.eu/auth/realms/CDSE/protocol/openid-connect/token\",\n",
+ " client_secret=client_secret,\n",
+ " )\n",
+ " return gen_token[\"access_token\"]\n",
+ "\n",
+ "\n",
+ "token = get_auth()\n",
+ "\n",
+ "headers = {\"Content-Type\": \"application/json\", \"Authorization\": f\"Bearer {token}\"}\n",
+ "url = \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "c7401a8f-a14d-489f-916d-613c26de8913",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "headers = {\n",
+ " \"Content-Type\": \"application/json\",\n",
+ " \"Authorization\": f\"Bearer {token}\",\n",
+ "}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "c451828a-40ed-411d-afa5-073b25716d8e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Create a PySTAC client and open the catalog\n",
+ "client = Client.open(url, headers=headers)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "a72ad158-b17d-4586-910f-af304c24024a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"Catalog\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " id\n",
+ " \"sentinel-hub\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " stac_version\n",
+ " \"1.0.0\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " description\n",
+ " \"STAC v1.0.0 implementation by Sentinel Hub\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " links\n",
+ " [] 15 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"self\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"root\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0/\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"data\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0/collections\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 3
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"conformance\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0/conformance\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"STAC conformance classes implemented by this server\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 4
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"search\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0/search\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/geo+json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"STAC search\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " method\n",
+ " \"GET\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 5
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"search\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0/search\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/geo+json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"STAC search\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " method\n",
+ " \"POST\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 6
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"http://www.opengis.net/def/rel/ogc/1.0/queryables\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0/queryables\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/schema+json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 7
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"child\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0/collections/sentinel-2-l1c\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Sentinel 2 L1C\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 8
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"child\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0/collections/sentinel-3-olci\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Sentinel 3 OLCI\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 9
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"child\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0/collections/sentinel-3-slstr\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Sentinel 3 SLSTR\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 10
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"child\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0/collections/sentinel-1-grd\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Sentinel 1 GRD\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 11
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"child\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0/collections/sentinel-2-l2a\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Sentinel 2 L2A\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 12
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"child\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0/collections/sentinel-5p-l2\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Sentinel 5 Precursor\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 13
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"service-desc\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://documentation.dataspace.copernicus.eu/APIs/SentinelHub/ApiReference/openapi.v1.yaml\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/vnd.oai.openapi;version=\"3.1\"\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"OpenAPI service description\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 14
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"service-doc\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://documentation.dataspace.copernicus.eu/APIs/SentinelHub/ApiReference.html#tag/catalog_core\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"text/html\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"OpenAPI service documentation\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " conformsTo\n",
+ " [] 18 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/core\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " \"http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 2\n",
+ " \"http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/geojson\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 3\n",
+ " \"https://api.stacspec.org/v1.0.0/core\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 4\n",
+ " \"https://api.stacspec.org/v1.0.0/collections\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 5\n",
+ " \"https://api.stacspec.org/v1.0.0/ogcapi-features\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 6\n",
+ " \"https://api.stacspec.org/v1.0.0/ogcapi-features#fields\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 7\n",
+ " \"https://api.stacspec.org/v1.0.0/ogcapi-features#context\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 8\n",
+ " \"https://api.stacspec.org/v1.0.0/ogcapi-features#filter\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 9\n",
+ " \"https://api.stacspec.org/v1.0.0/item-search\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 10\n",
+ " \"https://api.stacspec.org/v1.0.0/item-search#fields\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 11\n",
+ " \"https://api.stacspec.org/v1.0.0/item-search#context\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 12\n",
+ " \"https://api.stacspec.org/v1.0.0/item-search#filter\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 13\n",
+ " \"http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/filter\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 14\n",
+ " \"http://www.opengis.net/spec/ogcapi-features-3/1.0/conf/features-filter\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 15\n",
+ " \"http://www.opengis.net/spec/cql2/1.0/conf/cql2-text\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 16\n",
+ " \"http://www.opengis.net/spec/cql2/1.0/conf/cql2-json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 17\n",
+ " \"http://www.opengis.net/spec/cql2/1.0/conf/basic-cql2\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Sentinel Hub STAC catalog\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "client"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "d77677b9-c2ab-4b48-9123-4371994b3331",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Retrieve the root catalog\n",
+ "root_catalog = client.get_stac_objects(rel=None)\n",
+ "root_catalog"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "507b6871-78f1-4e3a-9a1b-71d9a354dad0",
+ "metadata": {},
+ "source": [
+ "We can list the collections in a given catalogue using the `client.get_collections` method. This method returns an iterable of PySTAC Collection instances."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "4d0b756c-1579-4b9e-b47f-beb8434c1a24",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Number of collections: 6\n",
+ "Collections IDs:\n",
+ "- sentinel-2-l1c\n",
+ "- sentinel-3-olci\n",
+ "- sentinel-3-slstr\n",
+ "- sentinel-1-grd\n",
+ "- sentinel-2-l2a\n",
+ "- sentinel-5p-l2\n"
+ ]
+ }
+ ],
+ "source": [
+ "collections = list(client.get_collections())\n",
+ "\n",
+ "print(f\"Number of collections: {len(collections)}\")\n",
+ "print(\"Collections IDs:\")\n",
+ "for collection in collections:\n",
+ " print(f\"- {collection.id}\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "69596da0-fc39-47ab-bb46-febd57eff825",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[,\n",
+ " ,\n",
+ " ,\n",
+ " ,\n",
+ " ,\n",
+ " ]"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Retrieve all catalogs\n",
+ "catalogs = list(client.get_child_links())\n",
+ "catalogs"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "efdfdb17-26a3-4110-b6b7-e54d01ff3c60",
+ "metadata": {},
+ "source": [
+ "Let's grab that collection as a PySTAC Collection instance using the `client.get_child` method so we can look at it in more detail. This method gets a child catalog or collection by ID, so we'll use the collection ID that we printed above."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "a87d6bea-6130-4b06-a683-95abe116cddf",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Collection has a root child. You may proceed.\n"
+ ]
+ }
+ ],
+ "source": [
+ "collection = client.get_child(\"sentinel-2-l1c\")\n",
+ "if collection is None:\n",
+ " print(\"Collection is Empty. Check your downloads and try agian.\")\n",
+ "else:\n",
+ " print(\"Collection has a root child. You may proceed.\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "6a1403f9-b1c3-46b2-99f6-ddc8f7409779",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "bbox = [84.5, 26.5, 86.501, 26.501]\n",
+ "\n",
+ "# Set a start and end date\n",
+ "time = \"2020-12-10\", \"2021-02-01\"\n",
+ "\n",
+ "# Set the STAC collections\n",
+ "collections = [\"sentinel-2-l1c\"]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "503dd787-31ed-4f1b-b5c0-0200f3d0b85c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"Collection\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " id\n",
+ " \"sentinel-2-l1c\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " stac_version\n",
+ " \"1.0.0\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " description\n",
+ " \"Sentinel 2 imagery processed to level 1C\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " links\n",
+ " [] 5 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"root\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0/\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Sentinel Hub STAC catalog\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"http://www.opengis.net/def/rel/ogc/1.0/queryables\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0/collections/sentinel-2-l1c/queryables\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/schema+json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"items\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0/collections/sentinel-2-l1c/items\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/geo+json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 3
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"self\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0/collections/sentinel-2-l1c\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 4
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"parent\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://sh.dataspace.copernicus.eu/api/v1/catalog/1.0.0\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Sentinel Hub STAC catalog\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " stac_extensions\n",
+ " [] 2 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"https://stac-extensions.github.io/scientific/v1.0.0/schema.json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " \"https://stac-extensions.github.io/eo/v1.0.0/schema.json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " sci:citation\n",
+ " \"Modified Copernicus Sentinel data [Year]/Sentinel Hub\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Sentinel 2 L1C\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " extent
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " spatial
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " bbox\n",
+ " [] 1 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0\n",
+ " [] 4 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " -180.0\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " -56.0\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 2\n",
+ " 180.0\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 3\n",
+ " 83.0\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " temporal
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " interval\n",
+ " [] 1 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0\n",
+ " [] 2 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"2015-11-01T00:00:00Z\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " None\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " license\n",
+ " \"proprietary\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " providers\n",
+ " [] 3 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"ESA\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " roles\n",
+ " [] 1 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"producer\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " url\n",
+ " \"https://esa.int/\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"CDSE\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " roles\n",
+ " [] 2 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"processor\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " \"host\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " url\n",
+ " \"https://dataspace.copernicus.eu/\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"Sinergise\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " roles\n",
+ " [] 1 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"processor\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " url\n",
+ " \"https://www.sinergise.com/\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " summaries
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " platform\n",
+ " [] 2 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"sentinel-2a\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " \"sentinel-2b\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " instrument\n",
+ " [] 1 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"msi\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " constellation\n",
+ " [] 1 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"sentinel-2\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " gsd\n",
+ " [] 1 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " 10\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " eo:bands\n",
+ " [] 13 items\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"B01\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " common_name\n",
+ " \"coastal\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " center_wavelength\n",
+ " 0.4427\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " full_width_half_max\n",
+ " 0.021\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"B02\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " common_name\n",
+ " \"blue\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " center_wavelength\n",
+ " 0.4924\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " full_width_half_max\n",
+ " 0.066\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"B03\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " common_name\n",
+ " \"green\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " center_wavelength\n",
+ " 0.5598\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " full_width_half_max\n",
+ " 0.036\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 3
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"B04\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " common_name\n",
+ " \"red\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " center_wavelength\n",
+ " 0.6646\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " full_width_half_max\n",
+ " 0.031\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 4
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"B05\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " center_wavelength\n",
+ " 0.7041\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " full_width_half_max\n",
+ " 0.015\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 5
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"B06\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " center_wavelength\n",
+ " 0.7405\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " full_width_half_max\n",
+ " 0.015\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 6
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"B07\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " center_wavelength\n",
+ " 0.7828\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " full_width_half_max\n",
+ " 0.02\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 7
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"B08\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " common_name\n",
+ " \"nir\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " center_wavelength\n",
+ " 0.8328\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " full_width_half_max\n",
+ " 0.106\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 8
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"B8A\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " common_name\n",
+ " \"nir08\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " center_wavelength\n",
+ " 0.8647\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " full_width_half_max\n",
+ " 0.021\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 9
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"B09\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " common_name\n",
+ " \"nir09\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " center_wavelength\n",
+ " 0.9451\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " full_width_half_max\n",
+ " 0.02\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 10
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"B10\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " common_name\n",
+ " \"cirrus\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " center_wavelength\n",
+ " 1.3735\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " full_width_half_max\n",
+ " 0.031\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 11
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"B11\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " common_name\n",
+ " \"swir16\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " center_wavelength\n",
+ " 1.6137\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " full_width_half_max\n",
+ " 0.091\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 12
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"B12\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " common_name\n",
+ " \"swir22\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " center_wavelength\n",
+ " 2.2024\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " full_width_half_max\n",
+ " 0.175\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " eo:cloud_cover
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " minimum\n",
+ " 0\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " maximum\n",
+ " 100\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "collection"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "4c9d4de0-0071-45ac-bf3f-c0a372ce6f40",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Found: 113 datasets\n"
+ ]
+ }
+ ],
+ "source": [
+ "query = client.search(bbox=bbox, collections=collections, datetime=time)\n",
+ "\n",
+ "# Search the STAC catalog for all items matching the query\n",
+ "items = list(query.get_items())\n",
+ "print(f\"Found: {len(items):d} datasets\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "afa060cb-5793-4429-b3c4-a9e69254817b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "stac_json = query.get_all_items_as_dict()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "55fc57ae-cb56-40a8-b03b-6ddf5f686f40",
+ "metadata": {},
+ "source": [
+ "Now, we'll use GeoPandas DataFrame object to make plotting easier."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "3238ac98-0991-4851-8f69-995510890439",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " geometry | \n",
+ " datetime | \n",
+ " platform | \n",
+ " instruments | \n",
+ " constellation | \n",
+ " gsd | \n",
+ " eo:cloud_cover | \n",
+ " proj:epsg | \n",
+ " proj:bbox | \n",
+ " proj:geometry | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " MULTIPOLYGON (((85.09657 26.11852, 84.85992 26... | \n",
+ " 2021-02-01T05:01:27.515Z | \n",
+ " sentinel-2b | \n",
+ " [msi] | \n",
+ " sentinel-2 | \n",
+ " 10 | \n",
+ " 99.80 | \n",
+ " 32645 | \n",
+ " [199980.0, 2890200.0, 309780.0, 3000000.0] | \n",
+ " {'type': 'MultiPolygon', 'crs': {'type': 'name... | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " MULTIPOLYGON (((85.08217 27.04617, 84.85432 26... | \n",
+ " 2021-02-01T05:01:27Z | \n",
+ " sentinel-2b | \n",
+ " [msi] | \n",
+ " sentinel-2 | \n",
+ " 10 | \n",
+ " 99.93 | \n",
+ " 32645 | \n",
+ " [199980.0, 2890200.0, 309780.0, 3000000.0] | \n",
+ " {'type': 'MultiPolygon', 'crs': {'type': 'name... | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " MULTIPOLYGON (((85.10272 27.10965, 86.08991 27... | \n",
+ " 2021-02-01T05:01:22.151Z | \n",
+ " sentinel-2b | \n",
+ " [msi] | \n",
+ " sentinel-2 | \n",
+ " 10 | \n",
+ " 57.60 | \n",
+ " 32645 | \n",
+ " [300000.0, 2890200.0, 409800.0, 3000000.0] | \n",
+ " {'type': 'MultiPolygon', 'crs': {'type': 'name... | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " MULTIPOLYGON (((85.09788 27.10958, 84.99021 26... | \n",
+ " 2021-02-01T05:01:22Z | \n",
+ " sentinel-2b | \n",
+ " [msi] | \n",
+ " sentinel-2 | \n",
+ " 10 | \n",
+ " 61.04 | \n",
+ " 32645 | \n",
+ " [300000.0, 2890200.0, 409800.0, 3000000.0] | \n",
+ " {'type': 'MultiPolygon', 'crs': {'type': 'name... | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " MULTIPOLYGON (((85.99066 27.11883, 87.09847 27... | \n",
+ " 2021-02-01T05:01:18.806Z | \n",
+ " sentinel-2b | \n",
+ " [msi] | \n",
+ " sentinel-2 | \n",
+ " 10 | \n",
+ " 3.74 | \n",
+ " 32645 | \n",
+ " [399960.0, 2890200.0, 509760.0, 3000000.0] | \n",
+ " {'type': 'MultiPolygon', 'crs': {'type': 'name... | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " geometry \\\n",
+ "0 MULTIPOLYGON (((85.09657 26.11852, 84.85992 26... \n",
+ "1 MULTIPOLYGON (((85.08217 27.04617, 84.85432 26... \n",
+ "2 MULTIPOLYGON (((85.10272 27.10965, 86.08991 27... \n",
+ "3 MULTIPOLYGON (((85.09788 27.10958, 84.99021 26... \n",
+ "4 MULTIPOLYGON (((85.99066 27.11883, 87.09847 27... \n",
+ "\n",
+ " datetime platform instruments constellation gsd \\\n",
+ "0 2021-02-01T05:01:27.515Z sentinel-2b [msi] sentinel-2 10 \n",
+ "1 2021-02-01T05:01:27Z sentinel-2b [msi] sentinel-2 10 \n",
+ "2 2021-02-01T05:01:22.151Z sentinel-2b [msi] sentinel-2 10 \n",
+ "3 2021-02-01T05:01:22Z sentinel-2b [msi] sentinel-2 10 \n",
+ "4 2021-02-01T05:01:18.806Z sentinel-2b [msi] sentinel-2 10 \n",
+ "\n",
+ " eo:cloud_cover proj:epsg proj:bbox \\\n",
+ "0 99.80 32645 [199980.0, 2890200.0, 309780.0, 3000000.0] \n",
+ "1 99.93 32645 [199980.0, 2890200.0, 309780.0, 3000000.0] \n",
+ "2 57.60 32645 [300000.0, 2890200.0, 409800.0, 3000000.0] \n",
+ "3 61.04 32645 [300000.0, 2890200.0, 409800.0, 3000000.0] \n",
+ "4 3.74 32645 [399960.0, 2890200.0, 509760.0, 3000000.0] \n",
+ "\n",
+ " proj:geometry \n",
+ "0 {'type': 'MultiPolygon', 'crs': {'type': 'name... \n",
+ "1 {'type': 'MultiPolygon', 'crs': {'type': 'name... \n",
+ "2 {'type': 'MultiPolygon', 'crs': {'type': 'name... \n",
+ "3 {'type': 'MultiPolygon', 'crs': {'type': 'name... \n",
+ "4 {'type': 'MultiPolygon', 'crs': {'type': 'name... "
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "gdf = gpd.GeoDataFrame.from_features(stac_json, \"epsg:4326\")\n",
+ "gdf.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "7b83992f-b9b7-4917-9c88-6c7af92876d3",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "fig = gdf.plot(\n",
+ " edgecolor=\"black\",\n",
+ " categorical=True,\n",
+ " aspect=\"equal\",\n",
+ " alpha=0.5,\n",
+ " figsize=(6, 12),\n",
+ " legend=True,\n",
+ " legend_kwds={\"loc\": \"upper left\", \"frameon\": False, \"ncol\": 1},\n",
+ ")\n",
+ "_ = fig.set_title(\"STAC Query Results\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "19a4e485-108f-44ed-9154-630d855087f7",
+ "metadata": {},
+ "source": [
+ "Finally, let's plot STAC Items on a Map"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "3f50f402-d2ef-4bdc-8635-54e8fdf992c4",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# https://github.com/python-visualization/folium/issues/1501\n",
+ "from branca.element import Figure\n",
+ "from odc.stac import configure_rio, stac_load\n",
+ "\n",
+ "\n",
+ "def convert_bounds(bbox, invert_y=False):\n",
+ " \"\"\"\n",
+ " Helper method for changing bounding box representation to leaflet notation\n",
+ "\n",
+ " ``(lon1, lat1, lon2, lat2) -> ((lat1, lon1), (lat2, lon2))``\n",
+ " \"\"\"\n",
+ " x1, y1, x2, y2 = bbox\n",
+ " if invert_y:\n",
+ " y1, y2 = y2, y1\n",
+ " return ((y1, x1), (y2, x2))\n",
+ "\n",
+ "\n",
+ "fig = Figure(width=\"400px\", height=\"500px\")\n",
+ "map1 = folium.Map()\n",
+ "fig.add_child(map1)\n",
+ "\n",
+ "folium.GeoJson(\n",
+ " shapely.geometry.box(*bbox),\n",
+ " style_function=lambda x: dict(fill=False, weight=1, opacity=0.7, color=\"olive\"),\n",
+ " name=\"Query\",\n",
+ ").add_to(map1)\n",
+ "\n",
+ "gdf.explore(\n",
+ " categorical=False,\n",
+ " popup=True,\n",
+ " style_kwds=dict(fillOpacity=0.1, width=2),\n",
+ " name=\"STAC\",\n",
+ " m=map1,\n",
+ ")\n",
+ "\n",
+ "map1.fit_bounds(bounds=convert_bounds(gdf.unary_union.bounds))\n",
+ "display(fig)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "c94f38ef-5c4c-49ed-9425-1b70b8954e52",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from pystac_client import Client\n",
+ "import geopandas as gpd\n",
+ "import requests\n",
+ "from creds import *\n",
+ "\n",
+ "\n",
+ "# Code from CDSE\n",
+ "def get_keycloak(username: str, password: str) -> str:\n",
+ "data = {\n",
+ "\"client_id\": \"cdse-public\",\n",
+ "\"username\": username,\n",
+ "\"password\": password,\n",
+ "\"grant_type\": \"password\",\n",
+ "}\n",
+ "try:\n",
+ "r = requests.post(\"https://identity.dataspace.copernicus.eu/auth/realms/CDSE/protocol/openid-connect/token\",\n",
+ "data=data,\n",
+ ")\n",
+ "r.raise_for_status()\n",
+ "exceptExceptionase:\n",
+ "raiseException(\n",
+ "f\"Keycloak token creation failed. Reponse from the server was: {r.json()}\"\n",
+ ")\n",
+ "returnr.json()[\"access_token\"]\n",
+ "\n",
+ "# Get AOI geometry\n",
+ "AOI = gpd.read_file('.geojson')['geometry'][0]\n",
+ "\n",
+ "# Format date range string\n",
+ "DATES = \"2020-01-01/2020-06-29\"\n",
+ "\n",
+ "# Retrieve token from CDSE function\n",
+ "TOKEN = get_keycloak(, )\n",
+ "\n",
+ "# Instantiate the client with STAC API endpoint\n",
+ "ENDPOINT = Client.open('https://catalogue.dataspace.copernicus.eu/stac',\n",
+ "headers={\"Authorization\":f\"Bearer {TOKEN}\"})\n",
+ "\n",
+ "# Perform a search\n",
+ "search = ENDPOINT.search(\n",
+ "collections=['SENTINEL-3'],\n",
+ "datetime=DATES,\n",
+ "intersects=AOI,\n",
+ ")\n",
+ "\n",
+ "# Get items (Here is where I get the error get the error)\n",
+ "itemResults = search.get_all_items()"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Geo science",
+ "language": "python",
+ "name": "geo"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}