diff --git a/examples/dinamis_sdk_ndvi.ipynb b/examples/dinamis_sdk_ndvi.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..de25a0eb71b8bd3948d68be566dee9fa0a030a11
--- /dev/null
+++ b/examples/dinamis_sdk_ndvi.ipynb
@@ -0,0 +1,1250 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "99c09edf-cdb9-4044-8579-736a14138e0c",
+   "metadata": {},
+   "source": [
+    "# Exemple d'utilisation PySTAC Client avec DINAMIS-SDK\n",
+    "---\n",
+    "auteur : Kenji Ose, UMR-TETIS, INRAE\n",
+    "\n",
+    "date   : 2023-06-16\n",
+    "\n",
+    "---"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b1863dc0-fe72-44f5-bc54-b5e4c8d3b32c",
+   "metadata": {},
+   "source": [
+    "## 1. Dinamis-SDK\n",
+    "\n",
+    "### 1.1. Brève description\n",
+    "\n",
+    "`Dinamis-SDK` est une bibliothèque Python qui permet de communiquer avec le prototype d'API d'infrastruture spatiale supporté par le dispositif national DINAMIS.\n",
+    "\n",
+    "Le code est déposé sur le lien suivant :\n",
+    "https://gitlab.irstea.fr/dinamis/dinamis-sdk\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "f9a76706-588d-4a1c-87a5-2a236b5dfb6c",
+   "metadata": {},
+   "source": [
+    "### 1.2. Installation du paquet Python Dinamis-SDK\n",
+    "Le prototype de DINAMIS propose un catalogue d'images satellitaires dans un environnement STAC (Spatio Temporal Asset Catalogs). Nous souhaitons rechercher des images dans ce catalogue. Il faut dans un premier temps installer la bibliothèque `dinamis-sdk`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "dc80443b-9586-4e2b-bc33-c5f62bc72e31",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Requirement already satisfied: dinamis-sdk in /srv/conda/envs/notebook/lib/python3.10/site-packages (0.0.9)\n",
+      "Requirement already satisfied: requests in /srv/conda/envs/notebook/lib/python3.10/site-packages (from dinamis-sdk) (2.29.0)\n",
+      "Requirement already satisfied: qrcode in /srv/conda/envs/notebook/lib/python3.10/site-packages (from dinamis-sdk) (7.4.2)\n",
+      "Requirement already satisfied: appdirs in /srv/conda/envs/notebook/lib/python3.10/site-packages (from dinamis-sdk) (1.4.4)\n",
+      "Requirement already satisfied: pydantic in /srv/conda/envs/notebook/lib/python3.10/site-packages (from dinamis-sdk) (1.10.7)\n",
+      "Requirement already satisfied: pystac in /srv/conda/envs/notebook/lib/python3.10/site-packages (from dinamis-sdk) (1.7.3)\n",
+      "Requirement already satisfied: pystac-client in /srv/conda/envs/notebook/lib/python3.10/site-packages (from dinamis-sdk) (0.6.1)\n",
+      "Requirement already satisfied: typing-extensions>=4.2.0 in /srv/conda/envs/notebook/lib/python3.10/site-packages (from pydantic->dinamis-sdk) (4.5.0)\n",
+      "Requirement already satisfied: python-dateutil>=2.7.0 in /srv/conda/envs/notebook/lib/python3.10/site-packages (from pystac->dinamis-sdk) (2.8.2)\n",
+      "Requirement already satisfied: charset-normalizer<4,>=2 in /srv/conda/envs/notebook/lib/python3.10/site-packages (from requests->dinamis-sdk) (2.1.1)\n",
+      "Requirement already satisfied: idna<4,>=2.5 in /srv/conda/envs/notebook/lib/python3.10/site-packages (from requests->dinamis-sdk) (3.4)\n",
+      "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /srv/conda/envs/notebook/lib/python3.10/site-packages (from requests->dinamis-sdk) (1.26.15)\n",
+      "Requirement already satisfied: certifi>=2017.4.17 in /srv/conda/envs/notebook/lib/python3.10/site-packages (from requests->dinamis-sdk) (2022.12.7)\n",
+      "Requirement already satisfied: pypng in /srv/conda/envs/notebook/lib/python3.10/site-packages (from qrcode->dinamis-sdk) (0.20220715.0)\n",
+      "Requirement already satisfied: six>=1.5 in /srv/conda/envs/notebook/lib/python3.10/site-packages (from python-dateutil>=2.7.0->pystac->dinamis-sdk) (1.16.0)\n"
+     ]
+    }
+   ],
+   "source": [
+    "#!pip install git+https://gitlab.irstea.fr/dinamis/dinamis-sdk.git\n",
+    "!pip install dinamis-sdk\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "88c57504-25b2-4254-a9ba-f269a3f2e4fa",
+   "metadata": {},
+   "source": [
+    "## 2. Découverte des images hébergées sur DINAMIS"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "a7204c22-be0b-4d87-aab9-2d8a16da6630",
+   "metadata": {},
+   "source": [
+    "### 2.1. Accès à l'API STAC\n",
+    "\n",
+    "Pour accéder au catalolgue de données, il faut importer au prélable deux bibliothèques :\n",
+    "- `dinamis-sdk`\n",
+    "- `pystac_client`\n",
+    "\n",
+    "Il faut ensuite créer un objet `pystac_client.Client`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "803a8738-d1f2-43d3-a426-f8ef156761c6",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "nom de l'api : stac-fastapi\n"
+     ]
+    }
+   ],
+   "source": [
+    "import dinamis_sdk\n",
+    "import pystac_client\n",
+    "\n",
+    "api = pystac_client.Client.open(\n",
+    "   'https://stacapi-dinamis.apps.okd.crocc.meso.umontpellier.fr',\n",
+    "   modifier=dinamis_sdk.sign_inplace,)\n",
+    "\n",
+    "print(f\"nom de l'api : {api.title}\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "f54b4e1d-0976-4048-9acf-ff619eb66baa",
+   "metadata": {},
+   "source": [
+    "### 2.2. Recherche des collections\n",
+    "\n",
+    "Dans un premier, on s'intéresse aux collections d'images disponibles dans DINAMIS. On utilise ici la méthode `get_collection()` de l'objet `api` (instance de la classe `pystac_client.client.Client`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "65afe82a-1601-41fe-8698-d70a898be394",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Nombre de collections: 2\n",
+      "Collections IDs:\n",
+      "- spot-6-7-drs\n",
+      "- super-sentinel-2-l2a\n"
+     ]
+    }
+   ],
+   "source": [
+    "collections = list(api.get_collections())\n",
+    "\n",
+    "print(f\"Nombre de collections: {len(collections)}\")\n",
+    "print(\"Collections IDs:\")\n",
+    "for collection in collections:\n",
+    "    print(f\"- {collection.id}\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "3a8cc265-79bc-412e-8a14-6e2d194cf739",
+   "metadata": {},
+   "source": [
+    "### 2.3. Recherche des images\n",
+    "\n",
+    "Il est désormais possible de requêter sur le catalogue afin de récupérer les items (ou images) d'intérêt. La recherche est réalisée à travers toutes les collections.\n",
+    "\n",
+    "Ici, la requête repose sur deux critères :\n",
+    "- étendue de recherche (ou *bounding box*) et,\n",
+    "- une plage temporelle.\n",
+    "\n",
+    "Pour chaque item, on récupère son identifiant et la collection à laquelle il appartient via les attributs `id` et `collection_id`. Ces informations permettront de retrouver aisément les images d'intérêt et de les traiter par la suite.\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "7820c73a-a0ec-4537-9893-c43060e3fed9",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "12 images répondent à la requête\n",
+      "---\n",
+      "Collection ID : super-sentinel-2-l2a ; item ID : SUPER_SENTINEL2B_20220525-105844-883_L2A_T31TEJ_D_15d8e3\n",
+      "Collection ID : super-sentinel-2-l2a ; item ID : SUPER_SENTINEL2B_20220522-104854-517_L2A_T31TEJ_D_15d8e3\n",
+      "Collection ID : super-sentinel-2-l2a ; item ID : SUPER_SENTINEL2A_20220520-105851-016_L2A_T31TEJ_D_15d8e3\n",
+      "Collection ID : super-sentinel-2-l2a ; item ID : SUPER_SENTINEL2B_20220519-103858-324_L2A_T31TEJ_D_15d8e3\n",
+      "Collection ID : super-sentinel-2-l2a ; item ID : SUPER_SENTINEL2A_20220517-104859-725_L2A_T31TEJ_D_15d8e3\n",
+      "Collection ID : super-sentinel-2-l2a ; item ID : SUPER_SENTINEL2A_20220514-103902-815_L2A_T31TEJ_D_15d8e3\n",
+      "Collection ID : super-sentinel-2-l2a ; item ID : SUPER_SENTINEL2B_20220512-104852-490_L2A_T31TEJ_D_15d8e3\n",
+      "Collection ID : super-sentinel-2-l2a ; item ID : SUPER_SENTINEL2B_20220509-103855-665_L2A_T31TEJ_D_15d8e3\n",
+      "Collection ID : super-sentinel-2-l2a ; item ID : SUPER_SENTINEL2A_20220507-104858-836_L2A_T31TEJ_D_15d8e3\n",
+      "Collection ID : super-sentinel-2-l2a ; item ID : SUPER_SENTINEL2A_20220504-103903-473_L2A_T31TEJ_D_15d8e3\n",
+      "Collection ID : super-sentinel-2-l2a ; item ID : SUPER_SENTINEL2B_20220502-104848-819_L2A_T31TEJ_D_15d8e3\n",
+      "Collection ID : spot-6-7-drs ; item ID : SPOT6_MS_202205011018084_SPOT6_P_202205011018084\n"
+     ]
+    }
+   ],
+   "source": [
+    "year = '2022'\n",
+    "month = '05'\n",
+    "bbox = [4, 42.99, 5, 44.05]\n",
+    "res = api.search(bbox=bbox, datetime=[f'{year}-{month}-01', f'{year}-{month}-25'])\n",
+    "\n",
+    "items = res.get_all_items()\n",
+    "print(f\"{len(items)} images répondent à la requête\")\n",
+    "print(\"---\")\n",
+    "\n",
+    "for item in res.items():\n",
+    "    print(f\"Collection ID : {item.collection_id} ; item ID : {item.id}\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "7bbe7003-8a84-43c2-88ea-56df5a83ec28",
+   "metadata": {},
+   "source": [
+    "## 3. Récupération d'une image\n",
+    "\n",
+    "### 3.1. Propriétés des images\n",
+    "\n",
+    "Il est possible d'accéder aux métadonnées de chaque image. Les items étant des entités geoJSON, ils peuvent être chargés sous forme de `dataframe` avec la bibliothèque `geopandas`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "id": "bd88857e-fb48-49ac-a20d-aaa3ac8cd9bb",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "INFO:numexpr.utils:NumExpr defaulting to 8 threads.\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>geometry</th>\n",
+       "      <th>datetime</th>\n",
+       "      <th>platform</th>\n",
+       "      <th>instruments</th>\n",
+       "      <th>Processor_version</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...</td>\n",
+       "      <td>2022-05-25T00:00:00Z</td>\n",
+       "      <td>super-sentinel-2-l2a</td>\n",
+       "      <td>[super-sentinel-2-l2a-RGBN]</td>\n",
+       "      <td>c8545bc08509415b8b505b8ae33453c889e547b8</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...</td>\n",
+       "      <td>2022-05-22T00:00:00Z</td>\n",
+       "      <td>super-sentinel-2-l2a</td>\n",
+       "      <td>[super-sentinel-2-l2a-RGBN]</td>\n",
+       "      <td>c8545bc08509415b8b505b8ae33453c889e547b8</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...</td>\n",
+       "      <td>2022-05-20T00:00:00Z</td>\n",
+       "      <td>super-sentinel-2-l2a</td>\n",
+       "      <td>[super-sentinel-2-l2a-RGBN]</td>\n",
+       "      <td>c8545bc08509415b8b505b8ae33453c889e547b8</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...</td>\n",
+       "      <td>2022-05-19T00:00:00Z</td>\n",
+       "      <td>super-sentinel-2-l2a</td>\n",
+       "      <td>[super-sentinel-2-l2a-RGBN]</td>\n",
+       "      <td>c8545bc08509415b8b505b8ae33453c889e547b8</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...</td>\n",
+       "      <td>2022-05-17T00:00:00Z</td>\n",
+       "      <td>super-sentinel-2-l2a</td>\n",
+       "      <td>[super-sentinel-2-l2a-RGBN]</td>\n",
+       "      <td>c8545bc08509415b8b505b8ae33453c889e547b8</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>5</th>\n",
+       "      <td>POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...</td>\n",
+       "      <td>2022-05-14T00:00:00Z</td>\n",
+       "      <td>super-sentinel-2-l2a</td>\n",
+       "      <td>[super-sentinel-2-l2a-RGBN]</td>\n",
+       "      <td>c8545bc08509415b8b505b8ae33453c889e547b8</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>6</th>\n",
+       "      <td>POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...</td>\n",
+       "      <td>2022-05-12T00:00:00Z</td>\n",
+       "      <td>super-sentinel-2-l2a</td>\n",
+       "      <td>[super-sentinel-2-l2a-RGBN]</td>\n",
+       "      <td>c8545bc08509415b8b505b8ae33453c889e547b8</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>7</th>\n",
+       "      <td>POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...</td>\n",
+       "      <td>2022-05-09T00:00:00Z</td>\n",
+       "      <td>super-sentinel-2-l2a</td>\n",
+       "      <td>[super-sentinel-2-l2a-RGBN]</td>\n",
+       "      <td>c8545bc08509415b8b505b8ae33453c889e547b8</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>8</th>\n",
+       "      <td>POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...</td>\n",
+       "      <td>2022-05-07T00:00:00Z</td>\n",
+       "      <td>super-sentinel-2-l2a</td>\n",
+       "      <td>[super-sentinel-2-l2a-RGBN]</td>\n",
+       "      <td>c8545bc08509415b8b505b8ae33453c889e547b8</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>9</th>\n",
+       "      <td>POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...</td>\n",
+       "      <td>2022-05-04T00:00:00Z</td>\n",
+       "      <td>super-sentinel-2-l2a</td>\n",
+       "      <td>[super-sentinel-2-l2a-RGBN]</td>\n",
+       "      <td>c8545bc08509415b8b505b8ae33453c889e547b8</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>10</th>\n",
+       "      <td>POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...</td>\n",
+       "      <td>2022-05-02T00:00:00Z</td>\n",
+       "      <td>super-sentinel-2-l2a</td>\n",
+       "      <td>[super-sentinel-2-l2a-RGBN]</td>\n",
+       "      <td>c8545bc08509415b8b505b8ae33453c889e547b8</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>11</th>\n",
+       "      <td>POLYGON ((3.60568 44.23888, 4.33658 44.23241, ...</td>\n",
+       "      <td>2022-05-01T00:00:00Z</td>\n",
+       "      <td>Spot-6</td>\n",
+       "      <td>[Spot-6]</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "                                             geometry              datetime   \n",
+       "0   POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...  2022-05-25T00:00:00Z  \\\n",
+       "1   POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...  2022-05-22T00:00:00Z   \n",
+       "2   POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...  2022-05-20T00:00:00Z   \n",
+       "3   POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...  2022-05-19T00:00:00Z   \n",
+       "4   POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...  2022-05-17T00:00:00Z   \n",
+       "5   POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...  2022-05-14T00:00:00Z   \n",
+       "6   POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...  2022-05-12T00:00:00Z   \n",
+       "7   POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...  2022-05-09T00:00:00Z   \n",
+       "8   POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...  2022-05-07T00:00:00Z   \n",
+       "9   POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...  2022-05-04T00:00:00Z   \n",
+       "10  POLYGON ((4.03273 43.54745, 4.03641 43.75163, ...  2022-05-02T00:00:00Z   \n",
+       "11  POLYGON ((3.60568 44.23888, 4.33658 44.23241, ...  2022-05-01T00:00:00Z   \n",
+       "\n",
+       "                platform                  instruments   \n",
+       "0   super-sentinel-2-l2a  [super-sentinel-2-l2a-RGBN]  \\\n",
+       "1   super-sentinel-2-l2a  [super-sentinel-2-l2a-RGBN]   \n",
+       "2   super-sentinel-2-l2a  [super-sentinel-2-l2a-RGBN]   \n",
+       "3   super-sentinel-2-l2a  [super-sentinel-2-l2a-RGBN]   \n",
+       "4   super-sentinel-2-l2a  [super-sentinel-2-l2a-RGBN]   \n",
+       "5   super-sentinel-2-l2a  [super-sentinel-2-l2a-RGBN]   \n",
+       "6   super-sentinel-2-l2a  [super-sentinel-2-l2a-RGBN]   \n",
+       "7   super-sentinel-2-l2a  [super-sentinel-2-l2a-RGBN]   \n",
+       "8   super-sentinel-2-l2a  [super-sentinel-2-l2a-RGBN]   \n",
+       "9   super-sentinel-2-l2a  [super-sentinel-2-l2a-RGBN]   \n",
+       "10  super-sentinel-2-l2a  [super-sentinel-2-l2a-RGBN]   \n",
+       "11                Spot-6                     [Spot-6]   \n",
+       "\n",
+       "                           Processor_version  \n",
+       "0   c8545bc08509415b8b505b8ae33453c889e547b8  \n",
+       "1   c8545bc08509415b8b505b8ae33453c889e547b8  \n",
+       "2   c8545bc08509415b8b505b8ae33453c889e547b8  \n",
+       "3   c8545bc08509415b8b505b8ae33453c889e547b8  \n",
+       "4   c8545bc08509415b8b505b8ae33453c889e547b8  \n",
+       "5   c8545bc08509415b8b505b8ae33453c889e547b8  \n",
+       "6   c8545bc08509415b8b505b8ae33453c889e547b8  \n",
+       "7   c8545bc08509415b8b505b8ae33453c889e547b8  \n",
+       "8   c8545bc08509415b8b505b8ae33453c889e547b8  \n",
+       "9   c8545bc08509415b8b505b8ae33453c889e547b8  \n",
+       "10  c8545bc08509415b8b505b8ae33453c889e547b8  \n",
+       "11                                       NaN  "
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "import geopandas as gpd\n",
+    "\n",
+    "df = gpd.GeoDataFrame.from_features(items.to_dict(), crs=\"epsg:4326\")\n",
+    "df"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "id": "e2e27816-63ec-4cd3-9a13-d17f0a6b356b",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe srcdoc=\"&lt;!DOCTYPE html&gt;\n",
+       "&lt;html&gt;\n",
+       "&lt;head&gt;\n",
+       "    \n",
+       "    &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;\n",
+       "    \n",
+       "        &lt;script&gt;\n",
+       "            L_NO_TOUCH = false;\n",
+       "            L_DISABLE_3D = false;\n",
+       "        &lt;/script&gt;\n",
+       "    \n",
+       "    &lt;style&gt;html, body {width: 100%;height: 100%;margin: 0;padding: 0;}&lt;/style&gt;\n",
+       "    &lt;style&gt;#map {position:absolute;top:0;bottom:0;right:0;left:0;}&lt;/style&gt;\n",
+       "    &lt;script src=&quot;https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.js&quot;&gt;&lt;/script&gt;\n",
+       "    &lt;script src=&quot;https://code.jquery.com/jquery-1.12.4.min.js&quot;&gt;&lt;/script&gt;\n",
+       "    &lt;script src=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js&quot;&gt;&lt;/script&gt;\n",
+       "    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js&quot;&gt;&lt;/script&gt;\n",
+       "    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.css&quot;/&gt;\n",
+       "    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css&quot;/&gt;\n",
+       "    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css&quot;/&gt;\n",
+       "    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.2.0/css/all.min.css&quot;/&gt;\n",
+       "    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css&quot;/&gt;\n",
+       "    &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css&quot;/&gt;\n",
+       "    \n",
+       "            &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,\n",
+       "                initial-scale=1.0, maximum-scale=1.0, user-scalable=no&quot; /&gt;\n",
+       "            &lt;style&gt;\n",
+       "                #map_5ce25b8570eda82c305d48e7e027e655 {\n",
+       "                    position: relative;\n",
+       "                    width: 100.0%;\n",
+       "                    height: 100.0%;\n",
+       "                    left: 0.0%;\n",
+       "                    top: 0.0%;\n",
+       "                }\n",
+       "                .leaflet-container { font-size: 1rem; }\n",
+       "            &lt;/style&gt;\n",
+       "        \n",
+       "    \n",
+       "                    &lt;style&gt;\n",
+       "                        .foliumtooltip {\n",
+       "                            \n",
+       "                        }\n",
+       "                       .foliumtooltip table{\n",
+       "                            margin: auto;\n",
+       "                        }\n",
+       "                        .foliumtooltip tr{\n",
+       "                            text-align: left;\n",
+       "                        }\n",
+       "                        .foliumtooltip th{\n",
+       "                            padding: 2px; padding-right: 8px;\n",
+       "                        }\n",
+       "                    &lt;/style&gt;\n",
+       "            \n",
+       "    \n",
+       "                    &lt;style&gt;\n",
+       "                        .foliumpopup {\n",
+       "                            margin: auto;\n",
+       "                        }\n",
+       "                       .foliumpopup table{\n",
+       "                            margin: auto;\n",
+       "                        }\n",
+       "                        .foliumpopup tr{\n",
+       "                            text-align: left;\n",
+       "                        }\n",
+       "                        .foliumpopup th{\n",
+       "                            padding: 2px; padding-right: 8px;\n",
+       "                        }\n",
+       "                    &lt;/style&gt;\n",
+       "            \n",
+       "    \n",
+       "    &lt;script src=&quot;https://code.jquery.com/ui/1.12.1/jquery-ui.js&quot;&gt;&lt;/script&gt;\n",
+       "    &lt;script&gt;$( function() {\n",
+       "        $( &quot;.maplegend&quot; ).draggable({\n",
+       "            start: function (event, ui) {\n",
+       "                $(this).css({\n",
+       "                    right: &quot;auto&quot;,\n",
+       "                    top: &quot;auto&quot;,\n",
+       "                    bottom: &quot;auto&quot;\n",
+       "                });\n",
+       "            }\n",
+       "        });\n",
+       "    });\n",
+       "    &lt;/script&gt;\n",
+       "    &lt;style type=&#x27;text/css&#x27;&gt;\n",
+       "      .maplegend {\n",
+       "        position: absolute;\n",
+       "        z-index:9999;\n",
+       "        background-color: rgba(255, 255, 255, .8);\n",
+       "        border-radius: 5px;\n",
+       "        box-shadow: 0 0 15px rgba(0,0,0,0.2);\n",
+       "        padding: 10px;\n",
+       "        font: 12px/14px Arial, Helvetica, sans-serif;\n",
+       "        right: 10px;\n",
+       "        bottom: 20px;\n",
+       "      }\n",
+       "      .maplegend .legend-title {\n",
+       "        text-align: left;\n",
+       "        margin-bottom: 5px;\n",
+       "        font-weight: bold;\n",
+       "        }\n",
+       "      .maplegend .legend-scale ul {\n",
+       "        margin: 0;\n",
+       "        margin-bottom: 0px;\n",
+       "        padding: 0;\n",
+       "        float: left;\n",
+       "        list-style: none;\n",
+       "        }\n",
+       "      .maplegend .legend-scale ul li {\n",
+       "        list-style: none;\n",
+       "        margin-left: 0;\n",
+       "        line-height: 16px;\n",
+       "        margin-bottom: 2px;\n",
+       "        }\n",
+       "      .maplegend ul.legend-labels li span {\n",
+       "        display: block;\n",
+       "        float: left;\n",
+       "        height: 14px;\n",
+       "        width: 14px;\n",
+       "        margin-right: 5px;\n",
+       "        margin-left: 0;\n",
+       "        border: 0px solid #ccc;\n",
+       "        }\n",
+       "      .maplegend .legend-source {\n",
+       "        color: #777;\n",
+       "        clear: both;\n",
+       "        }\n",
+       "      .maplegend a {\n",
+       "        color: #777;\n",
+       "        }\n",
+       "    &lt;/style&gt;\n",
+       "    \n",
+       "&lt;/head&gt;\n",
+       "&lt;body&gt;\n",
+       "    \n",
+       "    \n",
+       "    &lt;div id=&#x27;maplegend platform&#x27; class=&#x27;maplegend&#x27;&gt;\n",
+       "        &lt;div class=&#x27;legend-title&#x27;&gt;platform&lt;/div&gt;\n",
+       "        &lt;div class=&#x27;legend-scale&#x27;&gt;\n",
+       "            &lt;ul class=&#x27;legend-labels&#x27;&gt;\n",
+       "                &lt;li&gt;&lt;span style=&#x27;background:#440154&#x27;&gt;&lt;/span&gt;Spot-6&lt;/li&gt;\n",
+       "                &lt;li&gt;&lt;span style=&#x27;background:#fde725&#x27;&gt;&lt;/span&gt;super-sentinel-2-l2a&lt;/li&gt;\n",
+       "            &lt;/ul&gt;\n",
+       "        &lt;/div&gt;\n",
+       "    &lt;/div&gt;\n",
+       "    \n",
+       "    \n",
+       "            &lt;div class=&quot;folium-map&quot; id=&quot;map_5ce25b8570eda82c305d48e7e027e655&quot; &gt;&lt;/div&gt;\n",
+       "        \n",
+       "&lt;/body&gt;\n",
+       "&lt;script&gt;\n",
+       "    \n",
+       "    \n",
+       "            var map_5ce25b8570eda82c305d48e7e027e655 = L.map(\n",
+       "                &quot;map_5ce25b8570eda82c305d48e7e027e655&quot;,\n",
+       "                {\n",
+       "                    center: [43.89316314247988, 3.968260682403808],\n",
+       "                    crs: L.CRS.EPSG3857,\n",
+       "                    zoom: 10,\n",
+       "                    zoomControl: true,\n",
+       "                    preferCanvas: false,\n",
+       "                }\n",
+       "            );\n",
+       "            L.control.scale().addTo(map_5ce25b8570eda82c305d48e7e027e655);\n",
+       "\n",
+       "            \n",
+       "\n",
+       "        \n",
+       "    \n",
+       "            var tile_layer_c56d959ebf5601762b9f968f38922df8 = L.tileLayer(\n",
+       "                &quot;https://a.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png&quot;,\n",
+       "                {&quot;attribution&quot;: &quot;\\u0026copy; \\u003ca href=\\&quot;https://www.openstreetmap.org/copyright\\&quot;\\u003eOpenStreetMap\\u003c/a\\u003e contributors \\u0026copy; \\u003ca href=\\&quot;https://carto.com/attributions\\&quot;\\u003eCARTO\\u003c/a\\u003e&quot;, &quot;detectRetina&quot;: false, &quot;maxNativeZoom&quot;: 20, &quot;maxZoom&quot;: 20, &quot;minZoom&quot;: 0, &quot;noWrap&quot;: false, &quot;opacity&quot;: 1, &quot;subdomains&quot;: &quot;abc&quot;, &quot;tms&quot;: false}\n",
+       "            ).addTo(map_5ce25b8570eda82c305d48e7e027e655);\n",
+       "        \n",
+       "    \n",
+       "            map_5ce25b8570eda82c305d48e7e027e655.fitBounds(\n",
+       "                [[43.547450099338604, 3.5999389520064913], [44.23887618562115, 4.336582412801125]],\n",
+       "                {}\n",
+       "            );\n",
+       "        \n",
+       "    \n",
+       "        function geo_json_423eee4cb2bfd87183444c135a2eea61_styler(feature) {\n",
+       "            switch(feature.id) {\n",
+       "                case &quot;11&quot;: \n",
+       "                    return {&quot;color&quot;: &quot;#440154&quot;, &quot;fillColor&quot;: &quot;#440154&quot;, &quot;fillOpacity&quot;: 0.5, &quot;weight&quot;: 2};\n",
+       "                default:\n",
+       "                    return {&quot;color&quot;: &quot;#fde725&quot;, &quot;fillColor&quot;: &quot;#fde725&quot;, &quot;fillOpacity&quot;: 0.5, &quot;weight&quot;: 2};\n",
+       "            }\n",
+       "        }\n",
+       "        function geo_json_423eee4cb2bfd87183444c135a2eea61_highlighter(feature) {\n",
+       "            switch(feature.id) {\n",
+       "                default:\n",
+       "                    return {&quot;fillOpacity&quot;: 0.75};\n",
+       "            }\n",
+       "        }\n",
+       "        function geo_json_423eee4cb2bfd87183444c135a2eea61_pointToLayer(feature, latlng) {\n",
+       "            var opts = {&quot;bubblingMouseEvents&quot;: true, &quot;color&quot;: &quot;#3388ff&quot;, &quot;dashArray&quot;: null, &quot;dashOffset&quot;: null, &quot;fill&quot;: true, &quot;fillColor&quot;: &quot;#3388ff&quot;, &quot;fillOpacity&quot;: 0.2, &quot;fillRule&quot;: &quot;evenodd&quot;, &quot;lineCap&quot;: &quot;round&quot;, &quot;lineJoin&quot;: &quot;round&quot;, &quot;opacity&quot;: 1.0, &quot;radius&quot;: 2, &quot;stroke&quot;: true, &quot;weight&quot;: 3};\n",
+       "            \n",
+       "            let style = geo_json_423eee4cb2bfd87183444c135a2eea61_styler(feature)\n",
+       "            Object.assign(opts, style)\n",
+       "            \n",
+       "            return new L.CircleMarker(latlng, opts)\n",
+       "        }\n",
+       "\n",
+       "        function geo_json_423eee4cb2bfd87183444c135a2eea61_onEachFeature(feature, layer) {\n",
+       "            layer.on({\n",
+       "                mouseout: function(e) {\n",
+       "                    if(typeof e.target.setStyle === &quot;function&quot;){\n",
+       "                        geo_json_423eee4cb2bfd87183444c135a2eea61.resetStyle(e.target);\n",
+       "                    }\n",
+       "                },\n",
+       "                mouseover: function(e) {\n",
+       "                    if(typeof e.target.setStyle === &quot;function&quot;){\n",
+       "                        const highlightStyle = geo_json_423eee4cb2bfd87183444c135a2eea61_highlighter(e.target.feature)\n",
+       "                        e.target.setStyle(highlightStyle);\n",
+       "                    }\n",
+       "                },\n",
+       "            });\n",
+       "        };\n",
+       "        var geo_json_423eee4cb2bfd87183444c135a2eea61 = L.geoJson(null, {\n",
+       "                onEachFeature: geo_json_423eee4cb2bfd87183444c135a2eea61_onEachFeature,\n",
+       "            \n",
+       "                style: geo_json_423eee4cb2bfd87183444c135a2eea61_styler,\n",
+       "                pointToLayer: geo_json_423eee4cb2bfd87183444c135a2eea61_pointToLayer\n",
+       "        });\n",
+       "\n",
+       "        function geo_json_423eee4cb2bfd87183444c135a2eea61_add (data) {\n",
+       "            geo_json_423eee4cb2bfd87183444c135a2eea61\n",
+       "                .addData(data)\n",
+       "                .addTo(map_5ce25b8570eda82c305d48e7e027e655);\n",
+       "        }\n",
+       "            geo_json_423eee4cb2bfd87183444c135a2eea61_add({&quot;bbox&quot;: [3.5999389520064913, 43.547450099338604, 4.336582412801125, 44.23887618562115], &quot;features&quot;: [{&quot;bbox&quot;: [3.6962018175925073, 43.547450099338604, 4.036414917971517, 43.75431706444037], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[4.032730583418401, 43.547450099338604], [4.036414917971517, 43.75162726634343], [3.698685718905037, 43.75431706444037], [3.6962018175925073, 43.55012996681564], [4.032730583418401, 43.547450099338604]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;0&quot;, &quot;properties&quot;: {&quot;Processor_version&quot;: &quot;c8545bc08509415b8b505b8ae33453c889e547b8&quot;, &quot;__folium_color&quot;: &quot;#fde725&quot;, &quot;datetime&quot;: &quot;2022-05-25T00:00:00Z&quot;, &quot;instruments&quot;: [&quot;super-sentinel-2-l2a-RGBN&quot;], &quot;platform&quot;: &quot;super-sentinel-2-l2a&quot;}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;bbox&quot;: [3.6962018175925073, 43.547450099338604, 4.036414917971517, 43.75431706444037], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[4.032730583418401, 43.547450099338604], [4.036414917971517, 43.75162726634343], [3.698685718905037, 43.75431706444037], [3.6962018175925073, 43.55012996681564], [4.032730583418401, 43.547450099338604]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;1&quot;, &quot;properties&quot;: {&quot;Processor_version&quot;: &quot;c8545bc08509415b8b505b8ae33453c889e547b8&quot;, &quot;__folium_color&quot;: &quot;#fde725&quot;, &quot;datetime&quot;: &quot;2022-05-22T00:00:00Z&quot;, &quot;instruments&quot;: [&quot;super-sentinel-2-l2a-RGBN&quot;], &quot;platform&quot;: &quot;super-sentinel-2-l2a&quot;}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;bbox&quot;: [3.6962018175925073, 43.547450099338604, 4.036414917971517, 43.75431706444037], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[4.032730583418401, 43.547450099338604], [4.036414917971517, 43.75162726634343], [3.698685718905037, 43.75431706444037], [3.6962018175925073, 43.55012996681564], [4.032730583418401, 43.547450099338604]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;2&quot;, &quot;properties&quot;: {&quot;Processor_version&quot;: &quot;c8545bc08509415b8b505b8ae33453c889e547b8&quot;, &quot;__folium_color&quot;: &quot;#fde725&quot;, &quot;datetime&quot;: &quot;2022-05-20T00:00:00Z&quot;, &quot;instruments&quot;: [&quot;super-sentinel-2-l2a-RGBN&quot;], &quot;platform&quot;: &quot;super-sentinel-2-l2a&quot;}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;bbox&quot;: [3.6962018175925073, 43.547450099338604, 4.036414917971517, 43.75431706444037], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[4.032730583418401, 43.547450099338604], [4.036414917971517, 43.75162726634343], [3.698685718905037, 43.75431706444037], [3.6962018175925073, 43.55012996681564], [4.032730583418401, 43.547450099338604]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;3&quot;, &quot;properties&quot;: {&quot;Processor_version&quot;: &quot;c8545bc08509415b8b505b8ae33453c889e547b8&quot;, &quot;__folium_color&quot;: &quot;#fde725&quot;, &quot;datetime&quot;: &quot;2022-05-19T00:00:00Z&quot;, &quot;instruments&quot;: [&quot;super-sentinel-2-l2a-RGBN&quot;], &quot;platform&quot;: &quot;super-sentinel-2-l2a&quot;}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;bbox&quot;: [3.6962018175925073, 43.547450099338604, 4.036414917971517, 43.75431706444037], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[4.032730583418401, 43.547450099338604], [4.036414917971517, 43.75162726634343], [3.698685718905037, 43.75431706444037], [3.6962018175925073, 43.55012996681564], [4.032730583418401, 43.547450099338604]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;4&quot;, &quot;properties&quot;: {&quot;Processor_version&quot;: &quot;c8545bc08509415b8b505b8ae33453c889e547b8&quot;, &quot;__folium_color&quot;: &quot;#fde725&quot;, &quot;datetime&quot;: &quot;2022-05-17T00:00:00Z&quot;, &quot;instruments&quot;: [&quot;super-sentinel-2-l2a-RGBN&quot;], &quot;platform&quot;: &quot;super-sentinel-2-l2a&quot;}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;bbox&quot;: [3.6962018175925073, 43.547450099338604, 4.036414917971517, 43.75431706444037], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[4.032730583418401, 43.547450099338604], [4.036414917971517, 43.75162726634343], [3.698685718905037, 43.75431706444037], [3.6962018175925073, 43.55012996681564], [4.032730583418401, 43.547450099338604]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;5&quot;, &quot;properties&quot;: {&quot;Processor_version&quot;: &quot;c8545bc08509415b8b505b8ae33453c889e547b8&quot;, &quot;__folium_color&quot;: &quot;#fde725&quot;, &quot;datetime&quot;: &quot;2022-05-14T00:00:00Z&quot;, &quot;instruments&quot;: [&quot;super-sentinel-2-l2a-RGBN&quot;], &quot;platform&quot;: &quot;super-sentinel-2-l2a&quot;}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;bbox&quot;: [3.6962018175925073, 43.547450099338604, 4.036414917971517, 43.75431706444037], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[4.032730583418401, 43.547450099338604], [4.036414917971517, 43.75162726634343], [3.698685718905037, 43.75431706444037], [3.6962018175925073, 43.55012996681564], [4.032730583418401, 43.547450099338604]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;6&quot;, &quot;properties&quot;: {&quot;Processor_version&quot;: &quot;c8545bc08509415b8b505b8ae33453c889e547b8&quot;, &quot;__folium_color&quot;: &quot;#fde725&quot;, &quot;datetime&quot;: &quot;2022-05-12T00:00:00Z&quot;, &quot;instruments&quot;: [&quot;super-sentinel-2-l2a-RGBN&quot;], &quot;platform&quot;: &quot;super-sentinel-2-l2a&quot;}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;bbox&quot;: [3.6962018175925073, 43.547450099338604, 4.036414917971517, 43.75431706444037], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[4.032730583418401, 43.547450099338604], [4.036414917971517, 43.75162726634343], [3.698685718905037, 43.75431706444037], [3.6962018175925073, 43.55012996681564], [4.032730583418401, 43.547450099338604]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;7&quot;, &quot;properties&quot;: {&quot;Processor_version&quot;: &quot;c8545bc08509415b8b505b8ae33453c889e547b8&quot;, &quot;__folium_color&quot;: &quot;#fde725&quot;, &quot;datetime&quot;: &quot;2022-05-09T00:00:00Z&quot;, &quot;instruments&quot;: [&quot;super-sentinel-2-l2a-RGBN&quot;], &quot;platform&quot;: &quot;super-sentinel-2-l2a&quot;}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;bbox&quot;: [3.6962018175925073, 43.547450099338604, 4.036414917971517, 43.75431706444037], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[4.032730583418401, 43.547450099338604], [4.036414917971517, 43.75162726634343], [3.698685718905037, 43.75431706444037], [3.6962018175925073, 43.55012996681564], [4.032730583418401, 43.547450099338604]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;8&quot;, &quot;properties&quot;: {&quot;Processor_version&quot;: &quot;c8545bc08509415b8b505b8ae33453c889e547b8&quot;, &quot;__folium_color&quot;: &quot;#fde725&quot;, &quot;datetime&quot;: &quot;2022-05-07T00:00:00Z&quot;, &quot;instruments&quot;: [&quot;super-sentinel-2-l2a-RGBN&quot;], &quot;platform&quot;: &quot;super-sentinel-2-l2a&quot;}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;bbox&quot;: [3.6962018175925073, 43.547450099338604, 4.036414917971517, 43.75431706444037], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[4.032730583418401, 43.547450099338604], [4.036414917971517, 43.75162726634343], [3.698685718905037, 43.75431706444037], [3.6962018175925073, 43.55012996681564], [4.032730583418401, 43.547450099338604]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;9&quot;, &quot;properties&quot;: {&quot;Processor_version&quot;: &quot;c8545bc08509415b8b505b8ae33453c889e547b8&quot;, &quot;__folium_color&quot;: &quot;#fde725&quot;, &quot;datetime&quot;: &quot;2022-05-04T00:00:00Z&quot;, &quot;instruments&quot;: [&quot;super-sentinel-2-l2a-RGBN&quot;], &quot;platform&quot;: &quot;super-sentinel-2-l2a&quot;}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;bbox&quot;: [3.6962018175925073, 43.547450099338604, 4.036414917971517, 43.75431706444037], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[4.032730583418401, 43.547450099338604], [4.036414917971517, 43.75162726634343], [3.698685718905037, 43.75431706444037], [3.6962018175925073, 43.55012996681564], [4.032730583418401, 43.547450099338604]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;10&quot;, &quot;properties&quot;: {&quot;Processor_version&quot;: &quot;c8545bc08509415b8b505b8ae33453c889e547b8&quot;, &quot;__folium_color&quot;: &quot;#fde725&quot;, &quot;datetime&quot;: &quot;2022-05-02T00:00:00Z&quot;, &quot;instruments&quot;: [&quot;super-sentinel-2-l2a-RGBN&quot;], &quot;platform&quot;: &quot;super-sentinel-2-l2a&quot;}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;bbox&quot;: [3.5999389520064913, 43.689027003474536, 4.336582412801125, 44.23887618562115], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[3.605683310123278, 44.23887618562115], [4.336582412801125, 44.232413063216754], [4.323908034833647, 43.689027003474536], [3.5999389520064913, 43.69542680908912], [3.605683310123278, 44.23887618562115]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;11&quot;, &quot;properties&quot;: {&quot;Processor_version&quot;: null, &quot;__folium_color&quot;: &quot;#440154&quot;, &quot;datetime&quot;: &quot;2022-05-01T00:00:00Z&quot;, &quot;instruments&quot;: [&quot;Spot-6&quot;], &quot;platform&quot;: &quot;Spot-6&quot;}, &quot;type&quot;: &quot;Feature&quot;}], &quot;type&quot;: &quot;FeatureCollection&quot;});\n",
+       "\n",
+       "        \n",
+       "    \n",
+       "    geo_json_423eee4cb2bfd87183444c135a2eea61.bindTooltip(\n",
+       "    function(layer){\n",
+       "    let div = L.DomUtil.create(&#x27;div&#x27;);\n",
+       "    \n",
+       "    let handleObject = feature=&gt;typeof(feature)==&#x27;object&#x27; ? JSON.stringify(feature) : feature;\n",
+       "    let fields = [&quot;platform&quot;];\n",
+       "    let aliases = [&quot;platform&quot;];\n",
+       "    let table = &#x27;&lt;table&gt;&#x27; +\n",
+       "        String(\n",
+       "        fields.map(\n",
+       "        (v,i)=&gt;\n",
+       "        `&lt;tr&gt;\n",
+       "            &lt;th&gt;${aliases[i]}&lt;/th&gt;\n",
+       "            \n",
+       "            &lt;td&gt;${handleObject(layer.feature.properties[v])}&lt;/td&gt;\n",
+       "        &lt;/tr&gt;`).join(&#x27;&#x27;))\n",
+       "    +&#x27;&lt;/table&gt;&#x27;;\n",
+       "    div.innerHTML=table;\n",
+       "    \n",
+       "    return div\n",
+       "    }\n",
+       "    ,{&quot;className&quot;: &quot;foliumtooltip&quot;, &quot;sticky&quot;: true});\n",
+       "                     \n",
+       "    \n",
+       "    geo_json_423eee4cb2bfd87183444c135a2eea61.bindPopup(\n",
+       "    function(layer){\n",
+       "    let div = L.DomUtil.create(&#x27;div&#x27;);\n",
+       "    \n",
+       "    let handleObject = feature=&gt;typeof(feature)==&#x27;object&#x27; ? JSON.stringify(feature) : feature;\n",
+       "    let fields = [&quot;datetime&quot;, &quot;platform&quot;, &quot;instruments&quot;, &quot;Processor_version&quot;];\n",
+       "    let aliases = [&quot;datetime&quot;, &quot;platform&quot;, &quot;instruments&quot;, &quot;Processor_version&quot;];\n",
+       "    let table = &#x27;&lt;table&gt;&#x27; +\n",
+       "        String(\n",
+       "        fields.map(\n",
+       "        (v,i)=&gt;\n",
+       "        `&lt;tr&gt;\n",
+       "            &lt;th&gt;${aliases[i].toLocaleString()}&lt;/th&gt;\n",
+       "            \n",
+       "            &lt;td&gt;${handleObject(layer.feature.properties[v]).toLocaleString()}&lt;/td&gt;\n",
+       "        &lt;/tr&gt;`).join(&#x27;&#x27;))\n",
+       "    +&#x27;&lt;/table&gt;&#x27;;\n",
+       "    div.innerHTML=table;\n",
+       "    \n",
+       "    return div\n",
+       "    }\n",
+       "    ,{&quot;className&quot;: &quot;foliumpopup&quot;});\n",
+       "                     \n",
+       "&lt;/script&gt;\n",
+       "&lt;/html&gt;\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
+      ],
+      "text/plain": [
+       "<folium.folium.Map at 0x7f38050f8d90>"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "#df.boundary.plot()\n",
+    "df.explore(column=\"platform\",\n",
+    "           tooltip=\"platform\",\n",
+    "           popup=True,\n",
+    "           tiles=\"CartoDB positron\",\n",
+    "           cmap=\"viridis\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "23a09599-24c9-4ce3-9ccb-42ddf10e98cc",
+   "metadata": {},
+   "source": [
+    "### 3.2. Sélection des items d'intérêt\n",
+    "\n",
+    "On dispose d'un image Spot-6 :\n",
+    "- `SPOT6_MS_202205011018084_SPOT6_P_202205011018084` de la collection `spot-6-7-drs`"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "id": "16da2d0b-3423-4366-832f-1f052b1050aa",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<Item id=SPOT6_MS_202205011018084_SPOT6_P_202205011018084>\n"
+     ]
+    }
+   ],
+   "source": [
+    "selected_spot = api.get_collection(\"spot-6-7-drs\").get_item(\"SPOT6_MS_202205011018084_SPOT6_P_202205011018084\")\n",
+    "print(selected_spot)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "bcda050b-fd0d-4215-bcf5-d809177d9058",
+   "metadata": {},
+   "source": [
+    "On cherche aussi l'image Sentinel-2 la plus proche dans le temps de l'image Spot-6."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "id": "f2ce29b5-232e-4301-b13f-039563e8aa13",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<Item id=SUPER_SENTINEL2B_20220502-104848-819_L2A_T31TEJ_D_15d8e3>\n"
+     ]
+    }
+   ],
+   "source": [
+    "def nearest(items, pivot):\n",
+    "    items_s2 = [item for item in items if item.id != pivot.id]\n",
+    "    ref = pivot.datetime  \n",
+    "    return min(items_s2, key=lambda x: abs(x.datetime - ref))\n",
+    "\n",
+    "selected_s2 = nearest(items, selected_spot)\n",
+    "print(selected_s2)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "1f050d6b-8b3a-4556-a6d1-8fe8fb26f7ac",
+   "metadata": {},
+   "source": [
+    "### 3.3. Exploration des assets\n",
+    "\n",
+    "Dans un catalogue STAC, un *item* est constitué d'*assets*. Ces derniers correspondent à un ensemble de données cohérentes entre elles. Par exemple, les *assets* d'une image SPOT-6 comprennent :\n",
+    "- une image multispectrale\n",
+    "- une image panchromatique\n",
+    "- des métadonnées au format Dimap\n",
+    "- des masques\n",
+    "- etc.\n",
+    "\n",
+    "On récupère ici l'identifiant de l'asset et sa description avec la méthode `assets.items()` de la classe `pystac.item.Item`. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "id": "0f206e1e-3569-4180-91ed-00046c075b18",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓\n",
+       "┃<span style=\"font-weight: bold\"> Asset Key        </span>┃<span style=\"font-weight: bold\"> Description      </span>┃\n",
+       "┡━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩\n",
+       "│ src_xs           │                  │\n",
+       "│ src_pan          │                  │\n",
+       "│ dimap_xs         │                  │\n",
+       "│ dimap_pan        │                  │\n",
+       "│ cld_msk_vec_xs   │                  │\n",
+       "│ roi_msk_vec_xs   │                  │\n",
+       "│ cld_msk_vec_pan  │                  │\n",
+       "│ roi_msk_vec_pan  │                  │\n",
+       "│ rendered_preview │ Rendered preview │\n",
+       "└──────────────────┴──────────────────┘\n",
+       "</pre>\n"
+      ],
+      "text/plain": [
+       "┏━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓\n",
+       "┃\u001b[1m \u001b[0m\u001b[1mAsset Key       \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mDescription     \u001b[0m\u001b[1m \u001b[0m┃\n",
+       "┡━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩\n",
+       "│ src_xs           │                  │\n",
+       "│ src_pan          │                  │\n",
+       "│ dimap_xs         │                  │\n",
+       "│ dimap_pan        │                  │\n",
+       "│ cld_msk_vec_xs   │                  │\n",
+       "│ roi_msk_vec_xs   │                  │\n",
+       "│ cld_msk_vec_pan  │                  │\n",
+       "│ roi_msk_vec_pan  │                  │\n",
+       "│ rendered_preview │ Rendered preview │\n",
+       "└──────────────────┴──────────────────┘\n"
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "import rich.table\n",
+    "\n",
+    "table = rich.table.Table(\"Asset Key\", \"Description\")\n",
+    "for asset_key, asset in selected_spot.assets.items():\n",
+    "    table.add_row(asset_key, asset.title)\n",
+    "\n",
+    "table"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "99467500-58f6-4c60-b172-f2bbb631554b",
+   "metadata": {},
+   "source": [
+    "On exécute la même méthode pour l'image Sentinel-2."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "id": "1434ba0a-dc67-4067-ade9-ad5151684198",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓\n",
+       "┃<span style=\"font-weight: bold\"> Asset Key        </span>┃<span style=\"font-weight: bold\"> Description      </span>┃\n",
+       "┡━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩\n",
+       "│ clm              │                  │\n",
+       "│ img              │                  │\n",
+       "│ rendered_preview │ Rendered preview │\n",
+       "└──────────────────┴──────────────────┘\n",
+       "</pre>\n"
+      ],
+      "text/plain": [
+       "┏━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓\n",
+       "┃\u001b[1m \u001b[0m\u001b[1mAsset Key       \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mDescription     \u001b[0m\u001b[1m \u001b[0m┃\n",
+       "┡━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩\n",
+       "│ clm              │                  │\n",
+       "│ img              │                  │\n",
+       "│ rendered_preview │ Rendered preview │\n",
+       "└──────────────────┴──────────────────┘\n"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "table = rich.table.Table(\"Asset Key\", \"Description\")\n",
+    "for asset_key, asset in selected_s2.assets.items():\n",
+    "    table.add_row(asset_key, asset.title)\n",
+    "\n",
+    "table"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "87bf770a-a79b-4d3f-9669-36b413e6201d",
+   "metadata": {},
+   "source": [
+    "### 3.4. Visualisation d'un asset\n",
+    "\n",
+    "Un *asset* dispose d'un lien `href` vers la donnée. Ce `href` permet de :\n",
+    "- télécharger la donnée dans son ensemble,\n",
+    "- charger en streaming (avec le format COG) une portion de l'image\n",
+    "\n",
+    "Dans un premier temps, on visualise les deux imagettes de prévisualisation. Celles-ci n'étant pas géoréférencées, il est inutile de les charger dans un client cartographique.\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "id": "48d38a79-8a06-4e56-83fe-75fe8b0ae613",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Prévisualisation RGB de l'image SPOT-6\n",
+      "---\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<img src=\"https://minio-api-dinamis.apps.okd.crocc.meso.umontpellier.fr/catalog/spot67/SPOT6_MS_202205011018084_SPOT6_P_202205011018084/DIM_SPOT6_MS_202205011018084_ORT_SPOT6_20220505_1228561r0qk779clt90_1_preview.png?X-Amz-Security-Token=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NLZXkiOiIyVjlBUjhOQUlXSVRTT0lDWTJJSSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJhdWQiOlsic2VjdXJpdHktYWRtaW4tY29uc29sZSIsImFjY291bnQiXSwiYXV0aF90aW1lIjoxNjg2NjU5ODM5LCJhenAiOiJtaW5pbyIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZXhwIjoxNjg2OTU2ODkyLCJmYW1pbHlfbmFtZSI6IktlbmppIiwiZ2l2ZW5fbmFtZSI6Ik9zZSIsImlhdCI6MTY4NjkyODA5MiwiaXNzIjoiaHR0cHM6Ly9rZXljbG9hay1kaW5hbWlzLmFwcHMub2tkLmNyb2NjLm1lc28udW1vbnRwZWxsaWVyLmZyL2F1dGgvcmVhbG1zL2RpbmFtaXMiLCJqdGkiOiJhODFlNDZiYy0xZGM4LTQ3ZGMtODNjNS00MTg5ZWI3ZGVhNGIiLCJuYW1lIjoiT3NlIEtlbmppIiwicG9saWN5IjoibXlwb2xpY3kiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJrZW5qaS5vc2UiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1kaW5hbWlzIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsInNlc3Npb25fc3RhdGUiOiJkMjZjNDAzMi00M2Q3LTQyMzMtYTkwNS02ZmY3MWE2OTYxYzMiLCJzaWQiOiJkMjZjNDAzMi00M2Q3LTQyMzMtYTkwNS02ZmY3MWE2OTYxYzMiLCJzdWIiOiJhODE2ZDZhZS05NGMzLTQzMjItOTNlOS02ZGVhNzVhMDk3NjciLCJ0eXAiOiJCZWFyZXIifQ.zwEGbLIBe5rQwc1NN_KlYRLtd24NMIz-ZfMywJ4TGVkQTF2jojsgroLybBUvMMJBLorDYCOUbTTUpAtLOuFw8w&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=2V9AR8NAIWITSOICY2II%2F20230616%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230616T150812Z&X-Amz-Expires=28800&X-Amz-SignedHeaders=host&X-Amz-Signature=ccd3e8653ba0fe351de743bb3a36f3f294c302d3b440b4ed9ffa5a6b28869ab6\" width=\"500\"/>"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Image object>"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "from IPython.display import Image\n",
+    "\n",
+    "print(\"Prévisualisation RGB de l'image SPOT-6\")\n",
+    "print(\"---\")\n",
+    "Image(url=selected_spot.assets[\"rendered_preview\"].href, width=500)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "id": "68559a52-11e4-4ac2-92d7-c1315b116b4d",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Prévisualisation RGB de l'image superrésolue Sentinel-2\n",
+      "---\n"
+     ]
+    },
+    {
+     "data": {
+      "text/html": [
+       "<img src=\"https://minio-api-dinamis.apps.okd.crocc.meso.umontpellier.fr/catalog/super-sentinel-2-l2a/SUPER_SENTINEL2B_20220502-104848-819_L2A_T31TEJ_D_15d8e3/preview.png?X-Amz-Security-Token=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NLZXkiOiIyVjlBUjhOQUlXSVRTT0lDWTJJSSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJhdWQiOlsic2VjdXJpdHktYWRtaW4tY29uc29sZSIsImFjY291bnQiXSwiYXV0aF90aW1lIjoxNjg2NjU5ODM5LCJhenAiOiJtaW5pbyIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZXhwIjoxNjg2OTU2ODkyLCJmYW1pbHlfbmFtZSI6IktlbmppIiwiZ2l2ZW5fbmFtZSI6Ik9zZSIsImlhdCI6MTY4NjkyODA5MiwiaXNzIjoiaHR0cHM6Ly9rZXljbG9hay1kaW5hbWlzLmFwcHMub2tkLmNyb2NjLm1lc28udW1vbnRwZWxsaWVyLmZyL2F1dGgvcmVhbG1zL2RpbmFtaXMiLCJqdGkiOiJhODFlNDZiYy0xZGM4LTQ3ZGMtODNjNS00MTg5ZWI3ZGVhNGIiLCJuYW1lIjoiT3NlIEtlbmppIiwicG9saWN5IjoibXlwb2xpY3kiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJrZW5qaS5vc2UiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1kaW5hbWlzIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsInNlc3Npb25fc3RhdGUiOiJkMjZjNDAzMi00M2Q3LTQyMzMtYTkwNS02ZmY3MWE2OTYxYzMiLCJzaWQiOiJkMjZjNDAzMi00M2Q3LTQyMzMtYTkwNS02ZmY3MWE2OTYxYzMiLCJzdWIiOiJhODE2ZDZhZS05NGMzLTQzMjItOTNlOS02ZGVhNzVhMDk3NjciLCJ0eXAiOiJCZWFyZXIifQ.zwEGbLIBe5rQwc1NN_KlYRLtd24NMIz-ZfMywJ4TGVkQTF2jojsgroLybBUvMMJBLorDYCOUbTTUpAtLOuFw8w&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=2V9AR8NAIWITSOICY2II%2F20230616%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230616T150812Z&X-Amz-Expires=28800&X-Amz-SignedHeaders=host&X-Amz-Signature=72bc6f1830b116136fe26b6f04126586fb3be4e60e27c7ce50c4eb24e78189e3\" width=\"500\"/>"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Image object>"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "print(\"Prévisualisation RGB de l'image superrésolue Sentinel-2\")\n",
+    "print(\"---\")\n",
+    "Image(url=selected_s2.assets[\"rendered_preview\"].href, width=500)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "282bba09-acfd-48c3-8012-0c7f470c9cc6",
+   "metadata": {},
+   "source": [
+    "Pour bien comprendre le contenu d'un `href`, on les affiche ici. \n",
+    "Les liens qui apparaissent sont non seulement \"compris\" dans un script Python (avec les bibliothèques qui conviennent) mais ils peuvent être également utilisés dans un logiciel SIG tel que QGis.\n",
+    "> Dans QGis :\n",
+    "> - Cliquer sur `Ajouter une couche raster`\n",
+    "> \n",
+    "> Dans la fenêtre qui apparaît :\n",
+    "> - Cocher le Type de source : `Protocole: HTTP(S), cloud, etc.`\n",
+    "> - Copier/Coller le lien href\n",
+    "> - Cliquer sur le bouton `Ajouter`\n",
+    "> \n",
+    "> *Dès lors la couche raster est affichée à l'écran en streaming. Elle peut être traitée avec les outils QGis (calculatrice raster, etc.).*"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "id": "edd89178-571d-41d2-9749-b20ae8895361",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "lien href de l'image panchromatique SPOT-6\n",
+      "---\n",
+      "https://minio-api-dinamis.apps.okd.crocc.meso.umontpellier.fr/catalog/spot67/SPOT6_MS_202205011018084_SPOT6_P_202205011018084/COG_SPOT6_P_202205011018084_ORT_SPOT6_20220505_1229021hr6dt0y9l23o_1.tif?X-Amz-Security-Token=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NLZXkiOiIyVjlBUjhOQUlXSVRTT0lDWTJJSSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJhdWQiOlsic2VjdXJpdHktYWRtaW4tY29uc29sZSIsImFjY291bnQiXSwiYXV0aF90aW1lIjoxNjg2NjU5ODM5LCJhenAiOiJtaW5pbyIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZXhwIjoxNjg2OTU2ODkyLCJmYW1pbHlfbmFtZSI6IktlbmppIiwiZ2l2ZW5fbmFtZSI6Ik9zZSIsImlhdCI6MTY4NjkyODA5MiwiaXNzIjoiaHR0cHM6Ly9rZXljbG9hay1kaW5hbWlzLmFwcHMub2tkLmNyb2NjLm1lc28udW1vbnRwZWxsaWVyLmZyL2F1dGgvcmVhbG1zL2RpbmFtaXMiLCJqdGkiOiJhODFlNDZiYy0xZGM4LTQ3ZGMtODNjNS00MTg5ZWI3ZGVhNGIiLCJuYW1lIjoiT3NlIEtlbmppIiwicG9saWN5IjoibXlwb2xpY3kiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJrZW5qaS5vc2UiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1kaW5hbWlzIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsInNlc3Npb25fc3RhdGUiOiJkMjZjNDAzMi00M2Q3LTQyMzMtYTkwNS02ZmY3MWE2OTYxYzMiLCJzaWQiOiJkMjZjNDAzMi00M2Q3LTQyMzMtYTkwNS02ZmY3MWE2OTYxYzMiLCJzdWIiOiJhODE2ZDZhZS05NGMzLTQzMjItOTNlOS02ZGVhNzVhMDk3NjciLCJ0eXAiOiJCZWFyZXIifQ.zwEGbLIBe5rQwc1NN_KlYRLtd24NMIz-ZfMywJ4TGVkQTF2jojsgroLybBUvMMJBLorDYCOUbTTUpAtLOuFw8w&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=2V9AR8NAIWITSOICY2II%2F20230616%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230616T150812Z&X-Amz-Expires=28800&X-Amz-SignedHeaders=host&X-Amz-Signature=a283a7fcab3ef71dd3fa3a1f39b90af363c9a012f8b81ccaea1c91ffdc8bdf0b\n",
+      "lien href de l'image Sentinel-2\n",
+      "---\n",
+      "https://minio-api-dinamis.apps.okd.crocc.meso.umontpellier.fr/catalog/super-sentinel-2-l2a/SUPER_SENTINEL2B_20220502-104848-819_L2A_T31TEJ_D_15d8e3/SUPER_SENTINEL2B_20220502-104848-819_L2A_T31TEJ_D_15d8e3.tif?X-Amz-Security-Token=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NLZXkiOiIyVjlBUjhOQUlXSVRTT0lDWTJJSSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiKiJdLCJhdWQiOlsic2VjdXJpdHktYWRtaW4tY29uc29sZSIsImFjY291bnQiXSwiYXV0aF90aW1lIjoxNjg2NjU5ODM5LCJhenAiOiJtaW5pbyIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZXhwIjoxNjg2OTU2ODkyLCJmYW1pbHlfbmFtZSI6IktlbmppIiwiZ2l2ZW5fbmFtZSI6Ik9zZSIsImlhdCI6MTY4NjkyODA5MiwiaXNzIjoiaHR0cHM6Ly9rZXljbG9hay1kaW5hbWlzLmFwcHMub2tkLmNyb2NjLm1lc28udW1vbnRwZWxsaWVyLmZyL2F1dGgvcmVhbG1zL2RpbmFtaXMiLCJqdGkiOiJhODFlNDZiYy0xZGM4LTQ3ZGMtODNjNS00MTg5ZWI3ZGVhNGIiLCJuYW1lIjoiT3NlIEtlbmppIiwicG9saWN5IjoibXlwb2xpY3kiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJrZW5qaS5vc2UiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1kaW5hbWlzIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsInNlc3Npb25fc3RhdGUiOiJkMjZjNDAzMi00M2Q3LTQyMzMtYTkwNS02ZmY3MWE2OTYxYzMiLCJzaWQiOiJkMjZjNDAzMi00M2Q3LTQyMzMtYTkwNS02ZmY3MWE2OTYxYzMiLCJzdWIiOiJhODE2ZDZhZS05NGMzLTQzMjItOTNlOS02ZGVhNzVhMDk3NjciLCJ0eXAiOiJCZWFyZXIifQ.zwEGbLIBe5rQwc1NN_KlYRLtd24NMIz-ZfMywJ4TGVkQTF2jojsgroLybBUvMMJBLorDYCOUbTTUpAtLOuFw8w&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=2V9AR8NAIWITSOICY2II%2F20230616%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230616T150812Z&X-Amz-Expires=28800&X-Amz-SignedHeaders=host&X-Amz-Signature=98316a8f0267eda512ad72c34d0c6db518ff5b8eed951f62528d6a678b9da042\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(\"lien href de l'image panchromatique SPOT-6\")\n",
+    "print(\"---\")\n",
+    "print(selected_spot.assets[\"src_pan\"].href)\n",
+    "\n",
+    "print(\"lien href de l'image Sentinel-2\")\n",
+    "print(\"---\")\n",
+    "print(selected_s2.assets[\"img\"].href)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "b39e1bd8-184f-4bab-8093-57fce558c33e",
+   "metadata": {},
+   "source": [
+    "## 4. Calcul du NDVI\n",
+    "\n",
+    "Pour finir, on souhaite calculer l'indice NDVI sur une portion de l'image SPOT-6. Il faut donc récupérer une portion (définie par une emprise, ou *bounding box*) de l'image multipectrale, et réaliser un calcul entre bandes."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "dbbac706-b83e-4cac-b4fe-164fe42ee360",
+   "metadata": {},
+   "source": [
+    "### 4.1 Préparation de l'emprise de découpage\n",
+    "\n",
+    "L'emprise de découpage est un rectangle définie par les coordonnées extrémales suivantes : \n",
+    "\n",
+    "- X min : 775000, \n",
+    "- Y min : 6328000, \n",
+    "- X max : 780000, \n",
+    "- Y max : 6333000\n",
+    "\n",
+    "Celles-ci sont exprimées en mètres dans le système de coordonnées RGF-93 / Lambert-93 (EPSG:2154).\n",
+    "\n",
+    "On transforme tout d'abord ces coordonnées en objet geoJSON. Ce type est attendu comme argument lors du découpage."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "id": "9c908eac-6452-4630-8293-0849b76d0f15",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[{'type': 'Polygon',\n",
+       "  'coordinates': [[[780000.0, 6328000.0],\n",
+       "    [780000.0, 6333000.0],\n",
+       "    [775000.0, 6333000.0],\n",
+       "    [775000.0, 6328000.0],\n",
+       "    [780000.0, 6328000.0]]]}]"
+      ]
+     },
+     "execution_count": 14,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "from shapely.geometry import box\n",
+    "from fiona.crs import from_epsg\n",
+    "\n",
+    "bbox = box(775000, 6328000, 780000, 6333000)\n",
+    "geo = gpd.GeoDataFrame({'geometry': bbox}, index=[0], crs=from_epsg(2154))\n",
+    "\n",
+    "def getFeatures(gdf):\n",
+    "    \"\"\"Function to parse features from GeoDataFrame in such a manner that rasterio wants them\"\"\"\n",
+    "    import json\n",
+    "    return [json.loads(gdf.to_json())['features'][0]['geometry']]\n",
+    "\n",
+    "coords = getFeatures(geo)\n",
+    "\n",
+    "coords"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "9dddf806-129b-40c5-96ed-3e0bc881540d",
+   "metadata": {},
+   "source": [
+    "### 4.2. Chargement d'une portion d'image et calcul du NDVI\n",
+    "\n",
+    "On utilise la bibliothèque `rasterio` pour lire l'image multispectrale (référencée par le `href`). La méthode `mask` associée permet de requêter uniquement sur la portion d'image définie par la bounding box (variable `coords`).\n",
+    "\n",
+    "On procède ensuite au calcul du NDVI (*Normalized Difference Vegetation Index*), en suivant l'expression suivante :\n",
+    "\n",
+    "$\\dfrac{(pIR - rouge)}{(pIR + rouge)}$"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "d52ec352-388c-457f-b5fc-e7b50fa2c9e0",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [],
+   "source": [
+    "import rasterio as rio\n",
+    "from rasterio.mask import mask\n",
+    "import numpy as np\n",
+    "\n",
+    "with rio.open(selected_spot.assets[\"src_xs\"].href) as xs:\n",
+    "    #print(xs.crs)\n",
+    "    clipXs, out_transform = mask(dataset=xs, shapes=coords, crop=True)\n",
+    "    red = clipXs[0]\n",
+    "    nir = clipXs[3]\n",
+    "    ndvi = np.zeros(red.shape, dtype=rio.float32)\n",
+    "    ndvi = (nir-red)/(nir+red+0.0001)\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "e3783c3b-1331-4140-ab9f-59a38bec8f11",
+   "metadata": {},
+   "source": [
+    "### 4.3. Affichage de l'image NDVI\n",
+    "\n",
+    "On propose ici une autre manière de visualiser un raster, en passant par le module `pyplot` de `matplotlib`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "c4275daa-6a48-40e4-8d1c-f1ee9285ede2",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [],
+   "source": [
+    "import matplotlib.pyplot as plt\n",
+    "\n",
+    "plt.imshow(ndvi, cmap=\"RdYlGn\")\n",
+    "plt.colorbar()\n",
+    "plt.show()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "3ae302df-df13-47be-b26f-223c2938ab3a",
+   "metadata": {},
+   "source": [
+    "### 4.4. Utilisation des widgets Jupyter\n",
+    "\n",
+    "Il est possible d'ajouter des éléments (*slider*, *progress bar*, *checkbox*, *radio buttons*, etc.) pour interagir avec la visualisation des données. Pour ce faire, charger la librairie `ipywidgets`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "1bca7f81-8cb7-4f00-9989-824ede9b2620",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [],
+   "source": [
+    "import ipywidgets as widgets\n",
+    "from ipywidgets import interact, interact_manual\n",
+    "\n",
+    "def threshold(seuil):\n",
+    "    seuil = np.where(ndvi>seuil, 1, 0)\n",
+    "    plt.imshow(seuil, cmap=\"viridis\", interpolation='nearest')#, cmap=plt.cm.gray)\n",
+    "    plt.colorbar()\n",
+    "    plt.show()\n",
+    "\n",
+    "interact(threshold, seuil = widgets.FloatSlider(min=-1, max=1, step=0.001))\n"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "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.10.10"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}