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", + "
" + ], + "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", + " \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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
geometrydatetimeplatforminstrumentsconstellationgsdeo:cloud_coverproj:epsgproj:bboxproj:geometry
0MULTIPOLYGON (((85.09657 26.11852, 84.85992 26...2021-02-01T05:01:27.515Zsentinel-2b[msi]sentinel-21099.8032645[199980.0, 2890200.0, 309780.0, 3000000.0]{'type': 'MultiPolygon', 'crs': {'type': 'name...
1MULTIPOLYGON (((85.08217 27.04617, 84.85432 26...2021-02-01T05:01:27Zsentinel-2b[msi]sentinel-21099.9332645[199980.0, 2890200.0, 309780.0, 3000000.0]{'type': 'MultiPolygon', 'crs': {'type': 'name...
2MULTIPOLYGON (((85.10272 27.10965, 86.08991 27...2021-02-01T05:01:22.151Zsentinel-2b[msi]sentinel-21057.6032645[300000.0, 2890200.0, 409800.0, 3000000.0]{'type': 'MultiPolygon', 'crs': {'type': 'name...
3MULTIPOLYGON (((85.09788 27.10958, 84.99021 26...2021-02-01T05:01:22Zsentinel-2b[msi]sentinel-21061.0432645[300000.0, 2890200.0, 409800.0, 3000000.0]{'type': 'MultiPolygon', 'crs': {'type': 'name...
4MULTIPOLYGON (((85.99066 27.11883, 87.09847 27...2021-02-01T05:01:18.806Zsentinel-2b[msi]sentinel-2103.7432645[399960.0, 2890200.0, 509760.0, 3000000.0]{'type': 'MultiPolygon', 'crs': {'type': 'name...
\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 +}