From 4b42d2863b8a9dac33d9cdd221019125267664ea Mon Sep 17 00:00:00 2001 From: mariogiampieri Date: Sat, 6 Jul 2024 12:44:34 -0400 Subject: [PATCH] Tuto/04 (#11) * initial commit * get intended sentinel data extract for dallas. non-overlapping, non-duplicate, extract for dfw area example * download + mosaic in prep for ndvi * calculate ndvi * demonstrate NDVI, classification based on val ranges * decent kmeans results + samples * tidy a bit * minor cleanup * update tuto with change stats * update gitignore --- Tutorials/04_change.ipynb | 2531 ++++++++++++++++++++++++ Tutorials/04_change_classification.qgz | Bin 0 -> 17272 bytes Tutorials/data.geojson | 86 + 3 files changed, 2617 insertions(+) create mode 100644 Tutorials/04_change.ipynb create mode 100644 Tutorials/04_change_classification.qgz create mode 100644 Tutorials/data.geojson diff --git a/Tutorials/04_change.ipynb b/Tutorials/04_change.ipynb new file mode 100644 index 00000000..ac2b4a6a --- /dev/null +++ b/Tutorials/04_change.ipynb @@ -0,0 +1,2531 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Calculating change over time\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## imports\n" + ] + }, + { + "cell_type": "code", + "execution_count": 180, + "metadata": {}, + "outputs": [], + "source": [ + "import leafmap\n", + "import leafmap.colormaps as cm\n", + "import requests\n", + "import rasterio as rio\n", + "from rasterio.merge import merge\n", + "import glob\n", + "from rasterio.plot import reshape_as_image" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## searching for data\n" + ] + }, + { + "cell_type": "code", + "execution_count": 181, + "metadata": {}, + "outputs": [], + "source": [ + "url = \"https://earth-search.aws.element84.com/v1/\"\n", + "collection = \"sentinel-2-l2a\"\n", + "time_range = \"2023-08-01/2023-08-31\"" + ] + }, + { + "cell_type": "code", + "execution_count": 182, + "metadata": {}, + "outputs": [], + "source": [ + "# bbox for dallas metro\n", + "bbox = [\n", + " -97.06213756027009,\n", + " 32.97324551867027,\n", + " -96.46807822577594,\n", + " 33.3578329610085,\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 183, + "metadata": {}, + "outputs": [], + "source": [ + "search_gdf = leafmap.stac_search(\n", + " url=url,\n", + " max_items=10,\n", + " collections=[collection],\n", + " bbox=bbox,\n", + " datetime=time_range,\n", + " query={\"eo:cloud_cover\": {\"lt\": 20}},\n", + " sortby=[{\"field\": \"properties.eo:cloud_cover\", \"direction\": \"asc\"}],\n", + " get_gdf=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 184, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['geometry', 'created', 'platform', 'constellation', 'instruments',\n", + " 'eo:cloud_cover', 'proj:epsg', 'mgrs:utm_zone', 'mgrs:latitude_band',\n", + " 'mgrs:grid_square', 'grid:code', 'view:sun_azimuth',\n", + " 'view:sun_elevation', 's2:degraded_msi_data_percentage',\n", + " 's2:nodata_pixel_percentage', 's2:saturated_defective_pixel_percentage',\n", + " 's2:dark_features_percentage', 's2:cloud_shadow_percentage',\n", + " 's2:vegetation_percentage', 's2:not_vegetated_percentage',\n", + " 's2:water_percentage', 's2:unclassified_percentage',\n", + " 's2:medium_proba_clouds_percentage', 's2:high_proba_clouds_percentage',\n", + " 's2:thin_cirrus_percentage', 's2:snow_ice_percentage',\n", + " 's2:product_type', 's2:processing_baseline', 's2:product_uri',\n", + " 's2:generation_time', 's2:datatake_id', 's2:datatake_type',\n", + " 's2:datastrip_id', 's2:granule_id', 's2:reflectance_conversion_factor',\n", + " 'datetime', 's2:sequence', 'earthsearch:s3_path',\n", + " 'earthsearch:payload_id', 'earthsearch:boa_offset_applied',\n", + " 'processing:software', 'updated'],\n", + " dtype='object')" + ] + }, + "execution_count": 184, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "search_gdf.columns" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## exploring and filtering search results\n" + ] + }, + { + "cell_type": "code", + "execution_count": 185, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 185, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbMAAAGdCAYAAACYS53BAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABOGUlEQVR4nO3dfXQU9aE//vfMhmxCkk0IAiFfQonBBqIGFU8xtrWKPLc2tbT+wHDR3lTAW/QW22pzz+m9+NTkFh+xlXqOSPUqTY/cRj32QC5XCFoIEaJUisAVAQMkIZUku3ncp/n8/tgHsnnc3dmdndl9v05Tk53ZyWeHzbz38ziSEEKAiIjIwORYF4CIiEgthhkRERkew4yIiAyPYUZERIbHMCMiIsNjmBERkeExzIiIyPAYZkREZHhJsS6AVhRFQXNzMzIyMiBJUqyLQ0REYxBCoKurC7m5uZDl0eteCRNmzc3NyMvLi3UxiIgoROfOncO0adNG3SdhwiwjIwOA56RYLJYYl4aIiMZis9mQl5fnv36PJmHCzNe0aLFYGGZERAYSTNcQB4AQEZHhMcyIiMjwGGZERGR4DDMiIjI8hhkRERkew4yIiAyPYUZERIbHMCMiIsNjmBERkeExzIiIyPAYZkREZHgMMyIiMjyGGRERGV7CrJofSe6uLritVgASJAmAJHm+ZBmA5Pmf77GBXxjp8WGOI0mQgKH7ShJvLkpENAjDLAxKdzecF5pjW4jhAnPYIJW9/w12/xEe9wZ1QOiOdZwRA1we/jgMcCIKE8MsHELEugSA8NxSHBhaFh2ULjqGDeqRwjjEAPcF5li15kgfZ4QAl8a4RTwRBWKYhUMPYZaIhgS42/dwfBoUlqcVCRccbpxs+xImWYIJgOwNzyQAkvcxkyTBJEmQJQkmWYIMCaZxSUifUwwTJMgATBIu7wNAloAkSfZsk+HZT5I8+wEwyTKSvPvJkoQk/zbPfr7HiWKFYUakV4PCW1GArr5+uBUFbiXEYyWZML67P+JFBPyVYMjwhK9J8gTmwDCUJRkSPEGZ5N0mwxOCJu9+sgSYIHvDE95jyEjyHj/Je2yTBO9zJSRJ8Gz3BSw8wSt7yyXDU/Nl2MY/hlkYWDGjWBAAeh3OsJ4bzT5HITxlU7w/OIetK7uj9vuHMzhgvQ3D/oCVcTkYLz/u24YB2y4/bvKGrez93lOL9YSvDCDJVwv21Xoh+cM7WZaRlmTS9BwkGoZZWJhmpD0BoNcZXphBSqw+uMEBO2BLTMpjSTJhxnizP2Blb+0V/lrm5eD11Sol+Gq43hrmgOD1jpu+/L1vf+ny8QeG+cCaqjzgOPGEYUZkEC63QJ8rzBqOHF8XLqNJM8lQvKHqBnTTvDN8MA5omsXlYBwSht7vBx5HHhDCkgSkyjLSNaqRMszCoZM3IiWWbqc9/CfH2adwo0lL0mfNWBEC/u7XKFzXppjHYaZGYabPM6x3DDOKge7+MJsYAXg+S1MsjJMlpCToVAtZw/ddYp5hIgPqCre/DGAzYwyNNyXuZVbLt11IZ3nLli0oLi6GxWKBxWJBSUkJdu7cOWQ/IQSWLl0KSZLw1ltvjXg8p9OJRx55BNdeey3S0tKQm5uL1atXo7k5cHWNGTNmeNpxB3xVVVWFUvTIYs2MYsCpIswk1sxiJs2UuKMYtXzXhRRm06ZNQ1VVFRobG3H48GHMnz8fpaWlOHbsWMB+zz33XFBDgXt7e/HRRx/hV7/6FT766CP8+c9/xsmTJ/Hd7353yL6PPfYYWlpa/F8PPPBAKEWPLIYZaUxxOKCEPLlsANbMYiY9gWtmJg37akMaAHLHHXcE/Pzkk09iy5YtOHjwIK6++moAwJEjR/D000/j8OHDmDp16qjHy8zMxO7duwMe++1vf4uvfe1raGpqwvTp0/2PZ2RkICcnJ5TiEsUN0dcHRcV1gWtbxkayLCE5gT9IaBnjYf8ut9uN6upq9PT0oKSkBICnpnX33Xfjd7/7XdjBY7VaIUkSsrKyAh6vqqrCxIkTcf3112PTpk1wuVzhFl01wZoZaUzp61M3QyrB5pnpRVoC18oAbeeyhTw0/+jRoygpKUF/fz/S09NRU1ODoqIiAMCGDRtw8803o7S0NKzC9Pf345FHHsHKlSthsVj8jz/44IO44YYbkJ2djQMHDqCiogItLS145plnRjyW3W6H3X55KLPNZgurTMNilpHGlL4+KKbUWBeDQpTI/WWAtjWzkMOssLAQR44cgdVqxY4dO3DPPfdg3759OHXqFPbs2YOPP/44rII4nU7cddddEEJgy5YtAdseeugh//fFxcVITk7G2rVrUVlZCbPZPOzxKisr8eijj4ZVFiI9EYoCYbdDGT8+/IMkcFNXLOl1fplWtGzdloTKNrMFCxagoKAAqamp2Lx5M+QB8yncbjdkWcY3v/lN1NXVjXgMX5CdPn0ae/bswcSJE0f9nceOHcM111yDEydOoLCwcNh9hquZ5eXlwWq1BtT6wmE/fRquf3yp6hhEwVJ6euBoasKbadnoC3O+kik7G+aCggiXjEZjNkm4anxKrIsRU7PSUjExOfy1OWw2GzIzM4O6bqteAURRFNjtdjz66KP48Y9/HLDt2muvxbPPPjtk4MhAviD77LPPsHfv3jGDDPAMMpFlGZMnTx5xH7PZPGKtTTX2mZGGlL4+AIBbzadcDgDRXKL3lwHaNgiEFGYVFRVYunQppk+fjq6uLmzfvh11dXWora1FTk7OsIM+pk+fjvz8fP/Ps2bNQmVlJe688044nU784Ac/wEcffYR3330Xbrcbra2tAIDs7GwkJyejvr4eDQ0NuO2225CRkYH6+nps2LABq1atwoQJE1S+fCL9U3p7Pf9VM2uHYaa5RO8vA3TcZ9bW1obVq1ejpaUFmZmZKC4uRm1tLRYuXBj0MU6ePAmr1QoAuHDhAt555x0AwHXXXRew3969e3HrrbfCbDajuroaGzduhN1uR35+PjZs2BDQj6Y51sxIQ0q/+vuQcWi+9tIZZvodzbh169aQDj5cd9zAx2bMmDHmMPcbbrgBBw8eDOn3Rh3DjDSi2O2A27NSvqo7gjHMNJVikmHiKTfGPDMiij7h7S8DAKEmkDjPTFOJvOrHQFq2CPCMh4GTpkkr/sEfag/EWoKmOPjDgzUzvWOWkUZ8gz/UhpmUoLcgiQUJwHj2lwHQdm1GvsPDwjSj6BNuN4TDAQBQscSwB/vMNJPK/jI/3d4Choi0owzoL1M1LB8czaglNjFexmZGvWOfGWlARDDMWDPTDsPMQ4LEASC6xzAjDQTWzFRimGlCljhZ2kfr5UAZZkQ6JIQICDO32r9UDgDRRKos83ODl9bvOL7Dw8GaGUWZsNsB5XJ9TH0zo8oCUVDYxHiZlqt/AAyzsHCeGUWbb0i+/2e1aSSz6UsL6Uk8zz6smRERxKD1GFX3mVHUyRIwns25flqPoOWZDwcrZhRlA/vLAPVhxn6c6EszmdicOwAHgBgBmxkpioTL5Z8s7aO6ZsZmxqgbz/6yAGxmJEpwg2tlAKCobb5i1SzquLhwIA4AMQTWzCh6Bg/+ACLQzMi+nKgySZ5h+XQZa2ZGwGZGiqLBgz8ADgDRO/aXDcWaGVECGzxZ2kd9nxmvtNHE+WVDsWZmBKyZUZSI/v5h319u1ZOm+aceTWlJPL+DcTSjETDMKEqGq5UBkZg0zZpZtIyTJaSwv2wIWeN2V/4LEOnIcIM/AECoXjSff+rRwiH5w2PNzAC4nBVFy3CDPwD1d5rm4ITo4Sr5w9P6LccwCwezjKJAOJ0QTufw29SODOM8s6jh/LLhcTQjUYIaqb8MiEDNjH06UZEsS0hmf+SwOJrREFg1o8gbLcyE6gEg/FOPBg7JHxlrZkbAPjOKAjHC4A9A5TwzyXMLe4o89peNjDUzogQkFAWK3T7idreaT7nsL4sazi8bmdZvO/5LhIM1M4qwkSZL+6irmfHPPBrMsoRx/KAwIhObGQ2AYUYRNlp/GaCyl5bX26hgrWx0bGYkSkBjhZmi6lMu0ywa2F82Og4AMQBOmqZIE2OFmYpA4u1foiOdYTYq1syMgFlGEaQ4HBAu1+j7aFQWCk6KSYaJFd5RcQAIUYIZq1YGAG41FwbOhYo4rvoxNi40rHNsYqRIG6u/TD1WISKNk6XHpuuFhrds2YLi4mJYLBZYLBaUlJRg586dQ/YTQmDp0qWQJAlvvfXWqMcUQuDf//3fMXXqVKSmpmLBggX47LPPAvZpb29HWVkZLBYLsrKyUF5eju7u7lCKHjkMM4qwYMJM9f3MKGIkAOPZXzYmXdfMpk2bhqqqKjQ2NuLw4cOYP38+SktLcezYsYD9nnvuOUhBNpj+5je/webNm/H73/8eDQ0NSEtLw+LFi9E/YPXwsrIyHDt2DLt378a7776L999/H2vWrAml6ES6JBQFYpTJ0j4cAKIfqewvC4rWNTNJqGw3y87OxqZNm1BeXg4AOHLkCL7zne/g8OHDmDp1KmpqavC9731v2OcKIZCbm4uf/exn+PnPfw4AsFqtmDJlCv7whz9gxYoVOH78OIqKinDo0CHceOONAIBdu3Zh2bJlOH/+PHJzc4Mqp81mQ2ZmJqxWKywWS9ivV7jd6D3cGPbziQZSenrgaGoac79dqZloSxoX1u+Q09ORMnt2WM+loSYlJ2GKObx/i0Ryc1Z60JWakYRy3Q77I5vb7UZ1dTV6enpQUlICAOjt7cXdd9+N3/3ud8jJyRnzGGfOnEFraysWLFjgfywzMxPz5s1DfX09AKC+vh5ZWVn+IAOABQsWQJZlNDQ0jHhsu90Om80W8BURbGakCAq2v0zNqvkSV3WPKPaXjU2CpDrIQhXyv8rRo0eRnp4Os9mMdevWoaamBkVFRQCADRs24Oabb0ZpaWlQx2ptbQUATJkyJeDxKVOm+Le1trZi8uTJAduTkpKQnZ3t32c4lZWVyMzM9H/l5eUF/RqJtDLSnaUHU3c/M4ZZpMgSJ0sHIxafn5JCfUJhYSGOHDkCq9WKHTt24J577sG+fftw6tQp7NmzBx9//HE0yhmyiooKPPTQQ/6fbTZbZAKNNTOKIGWEO0sPpm45K4ZZpKTKMk9nELRelxEII8ySk5Mxc+ZMAMDcuXNx6NAhPP/880hNTcXnn3+OrKysgP2XL1+Ob37zm6irqxtyLF9T5MWLFzF16lT/4xcvXsR1113n36etrS3geS6XC+3t7aM2ZZrNZpjN5lBf3tgYZhQhit0OuINrQFQ1z4zNjBHDJsbgxOIsqf6diqLAbrfjl7/8JT755BMcOXLE/wUAzz77LLZt2zbsc/Pz85GTk4P33nvP/5jNZkNDQ4O/H66kpASdnZ1obLw86GLPnj1QFAXz5s1TW3yimAlmsrSPmtGMXDU/ctKT2MQYjFjUXkOqmVVUVGDp0qWYPn06urq6sH37dtTV1aG2thY5OTnD1pSmT5+O/Px8/8+zZs1CZWUl7rzzTkiShJ/+9Kd44okncNVVVyE/Px+/+tWvkJub6x8BOXv2bCxZsgT33Xcffv/738PpdGL9+vVYsWJF0CMZI4n1MoqU6E+W9mK7WETIEjCe0xyCovUcMyDEMGtra8Pq1avR0tKCzMxMFBcXo7a2FgsXLgz6GCdPnoTVavX//PDDD6Onpwdr1qxBZ2cnvvGNb2DXrl1ISUnx7/PGG29g/fr1uP322yHLMpYvX47NmzeHUvTIYTMjRUiwgz8ATprWgzSTiWNpghSLlm3V88yMIlLzzBS7HX1H/hbBklEiEm437P/3f0Hv/6f0bNjDbC5MmjQJyTNmhPVcumyKeRwmJYc8zCAhZSaZcE3GeNXH0WSeWcJKjOynKAu1iZGjGWOPiwsHT+t7mQEMs9AxzCgCQhn8AagdAMIwU8skeYblU3Bi8Y7jvw5RDIRaM1N1PzOGmWrsLwsNa2ZGwJoZqSSE0LSZkctZqcf5ZaEx5DyzhMMwI5WE3Q4owde1BFQuZ8V5ZqqlJfEchiIWn5/4L0SksVCG5APqFhkGoPmCr/FmnCwhhf1lIYnFPDP+C4WIFTNSSwS5HqOPqv4ygH09Ko1nE2PIWDMzBKYZqRNqf5lL7S9kM6MqXCU/dBwAQhTnhMsF4XCE9hy1f6asmanC+WWh4wAQI2A7I6kQznqMqt9x7O8JW7IsIZmjQUPGZkYjYJiRCqEO/gAAl9q/Ug4ACRuH5IeHA0CMgGFGKoQ6+AOIQM2MfWZhY39ZeFgzI4pj4UyWBlQuZQVWzNTg/LLwSKyZGQBrZhQm0d8f1vtH9e1fWDMLi1mWMI6fBMLCmpkBJMgdcygKwr0Zp+p5ZhwAEhbWysLH0YxEcSycwR9AJPrM1B4gMbG/LHycZ0YUx8IZ/AEALpUXBonNjGFJZ5iFjTUzI2AzI4VBOJ0QTmd4z1X7KZfzpEKWYpJh4mkLWyy6GhlmRBoIt78MiMTajLwqh4qrfqjDeWZGwJoZhUFNmKldNZ8DQELHxYXViUWtlv9ioWKYURhEmIM/AECoHprPmlkoJHDwh1qsmRHFIaEoUOz2sJ+vdp4Z72cWGvaXqcd5ZkbAmhmFKNzJ0v7nq70wMMxCwv4y9Tg03wA4aZpCpaa/DIjEABD+mYeCiwurE4sgAxhmRFGnOszUXht4cQ6aLLG/TK1Yvdv4Lg8VK2YUIqEyzFT3mXEJkKClyjJbZVVizcwwmGYUPMXhgHC5VB1D1TuOE6ZDwiZG9VgzI4pDamtlgNpbwDDMQpGexCZGtWJVs2WYhYoDQCgEavvLAEBRc3Vgm1nQZAkYzwnmqsVijpnn91JoGGYUgoiEmZonM8yClmYysSIbAbFq2WaYEUWJUBQIFZOlfdSEGbMseFzCKjLYZ2YUrJlRkERfX0TeL+pqZvwTDxYnS0eGyQijGbds2YLi4mJYLBZYLBaUlJRg586d/u1r165FQUEBUlNTMWnSJJSWluLEiROjHlOSpGG/Nm3a5N9nxowZQ7ZXVVWF+FIjhGFGQYpEEyOg8hYwHM0YFJPkGZZP6hliAMi0adNQVVWFxsZGHD58GPPnz0dpaSmOHTsGAJg7dy62bduG48ePo7a2FkIILFq0CG73yOt+t7S0BHy98sorkCQJy5cvD9jvscceC9jvgQceCOPlEmkn3DtLD+ZS05HDmllQ2F8WObEaAJIUys533HFHwM9PPvkktmzZgoMHD+Lqq6/GmjVr/NtmzJiBJ554AnPmzMHZs2dRUFAw7DFzcnICfn777bdx22234corrwx4PCMjY8i+scCKGQVLCfPO0oPxLRd9nF8WOYYbAOJ2u1FdXY2enh6UlJQM2d7T04Nt27YhPz8feXl5QR3z4sWL+Mtf/oLy8vIh26qqqjBx4kRcf/312LRpE1wqJ6KGj5cWGptitwOjtEiEdCw1Fwc2MwYlLYlhFimGqJkBwNGjR1FSUoL+/n6kp6ejpqYGRUVF/u0vvvgiHn74YfT09KCwsBC7d+9GcnJyUMd+9dVXkZGRge9///sBjz/44IO44YYbkJ2djQMHDqCiogItLS145plnRjyW3W6HfcBIMpvNFuIrJQpfJCZL+6iZNC2xmXFM42QJKewvi5hYfX6SRIjLwDscDjQ1NcFqtWLHjh14+eWXsW/fPn+gWa1WtLW1oaWlBU899RQuXLiA/fv3IyUlZcxjz5o1CwsXLsQLL7ww6n6vvPIK1q5di+7ubpjN5mH32bhxIx599NEhj1utVlgsliBe6fAc587B2dwS9vMpMThbWuDu7IzIsXanWtCSFNwHwsHkjHSkzJodkXLEq8xxJuSlhHd+aahpKcn4Surw1+VQ2Ww2ZGZmBnXdDjnMBluwYAEKCgrw0ksvDdnmcDgwYcIEvPzyy1i5cuWox/nggw9wyy234MiRI5gzZ86o+x47dgzXXHMNTpw4gcLCwmH3Ga5mlpeXpz7MmprgbGkN+/mUGOyffw7hcETkWLWpmbiYNC6s55osFphH+Bshj9yUZGSP4zJWkTI91RyxDwehhFnIzYyDKYoSEBoDCSEghBhx+0Bbt27F3LlzxwwyADhy5AhkWcbkyZNH3MdsNo9YayOKJuF2RyzIAEBVzxtnTY+J88siK1ZnM6Qwq6iowNKlSzF9+nR0dXVh+/btqKurQ21tLU6fPo0//elPWLRoESZNmoTz58+jqqoKqampWLZsmf8Ys2bNQmVlJe68807/YzabDW+++SaefvrpIb+zvr4eDQ0NuO2225CRkYH6+nps2LABq1atwoQJE1S89DBxOCONIVLzy3wEx4xHzThZQjIHyURUrE5nSGHW1taG1atXo6WlBZmZmSguLkZtbS0WLlyI5uZmfPDBB3juuefQ0dGBKVOm4JZbbsGBAwcCalAnT56E1WoNOG51dTWEEMM2RZrNZlRXV2Pjxo2w2+3Iz8/Hhg0b8NBDD4X5klVimNEYIjn4AwCEmosDbzQ5KtbKIi9WoxlV95kZRShtr6NxnD0L58W2CJaM4o2jqQlKT0/Ejvd2Whascng9AqbsbJhHmONJnsEKWewvi6ivpqVgUnJ4fbyDhXLd5seSECVI9lOYhBBRaGZUgX1mo+L8ssjjLWCMgllGoxB2O6CoWhp4CFU352SYjcgsSxjH8xNxhlsBhIiGitR6jAHHVDVpmhfrkbBWFh28BYxhsGpGIxMRWo8x4JhqnsyVLUaUxsExUSEb4RYwBI5mpFFFur8MULk2I4f1jyidYRYVrJkRGZxwuSI6WdrHraaZ0cQwG06KSQZPTXTEqmmbYRYq1sxoBNGolanHK/ZwOL8selgzMwqGGY0gGoM/AEDV2EgOABnWeIZZ1HA0I5HBRWPwBwAoKgJJ4lJNQ0jg4I9o4jwzg+CkaRpONCZLAyprZQDYzDgU+8uiizUzo2CW0TBEf39UmqBV36uaNbMh2F8WPRIkDs0nMrJoDf5QHWa80/QQaQyzqIllFy3/VUPGqhkNpcvBHwBrZoPIEjCe/WVRE8szyzALFfvMaBhRG/yh9k+UNbMAqbLMfI+iWDUxAgwzItWE0wnhdEbl2JFdspjYxBhdsTy7/JcNFWtmNEg0J0srqitm/BMfiGEWXbFc2Jr/sqFimNEg0QwzNUtZAeCk6QHYXxZ9sWzCZZiFiPPMaDARpcEfgMp7mQEcADJAmsnEbI8yNjMSGZRQFCh2e/SOr/L5EgeA+HEJq+jjABAjYcWMBojWZGkf1fPMyI+TpaOPNTMjYTMjDRDtlfJVj2bkBRwAYJI8w/Ipujhpmsigoh5mqq8O7CQCvAsL81REXawWGfb8bgoRa2Z0WTQHfwARCDPWzABwSL5WOJrRSNjMSF6KwwHhjm6vltpmRonVEQBAWhIvdVpgzYzIgIQGd5ZW3WfGLMM4WUIK+8s0Ectb6/BfOFSsmZFXtPvLgAhMmpY5SZhD8rUTy89O/FcOFcOMvLQIM9WTplkz412lNcR5ZkQGIxQFIoqTpf3UZhlrZpxfpiHOMzMQLmdFgLe/TIP3gkvNk1krwzhZQjKX9NIMa2ZGwiwjRO9mnIMJNRcHLmXFWpnGWDMjMhgt+ssAlaMZuaou+8s0xhVADIVVMwKUKN1ZesjvUdNWyCzj/DKNcZ6ZkbDPLOEpdjsQ5cnS/t+l4rmxvFGiHphlCeMS/BxozTArgGzZsgXFxcWwWCywWCwoKSnBzp07/dvXrl2LgoICpKamYtKkSSgtLcWJEydGPea9994LSZICvpYsWRKwT3t7O8rKymCxWJCVlYXy8nJ0d3eHUnSiiNFisrT/d7HPLGyslWnPMH1m06ZNQ1VVFRobG3H48GHMnz8fpaWlOHbsGABg7ty52LZtG44fP47a2loIIbBo0SK4x/gUu2TJErS0tPi//vjHPwZsLysrw7Fjx7B79268++67eP/997FmzZoQX2qEsGaW8LQa/AGoHM2Y4KP42F+mvViOZpSEyrHm2dnZ2LRpE8rLy4ds++STTzBnzhycOnUKBQUFwz7/3nvvRWdnJ956661htx8/fhxFRUU4dOgQbrzxRgDArl27sGzZMpw/fx65ublBldNmsyEzMxNWqxUWiyW4FzeM3kOHIBQGWiKzf/45hMOhye+qN6fhs+TUsJ4rpaYg9ZprI1wi45idnhrT5ZUS0XUZ45GWFLkPEaFct8OuFbrdblRXV6OnpwclJSVDtvf09GDbtm3Iz89HXl7eqMeqq6vD5MmTUVhYiPvvvx+XLl3yb6uvr0dWVpY/yABgwYIFkGUZDQ0NIx7TbrfDZrMFfBGpJVwuzYIMUDvcKHGv5CkmmUEWA4aaZ3b06FGkp6fDbDZj3bp1qKmpQVFRkX/7iy++iPT0dKSnp2Pnzp3YvXs3kpOTRzzekiVL8Nprr+G9997Df/7nf2Lfvn1YunSpv2mytbUVkydPDnhOUlISsrOz0draOuJxKysrkZmZ6f8aK1CDxUnTiU2rUYw+bjX9XgnczMj5ZbFhmAEgAFBYWIgjR46goaEB999/P+655x58+umn/u1lZWX4+OOPsW/fPnz1q1/FXXfdhf5RLgArVqzAd7/7XVx77bX43ve+h3fffReHDh1CXV1dWC/Ip6KiAlar1f917tw5VcfzY5YlNC0HfwAqRzMmcM2MiwvHRiyH5ieF+oTk5GTMnDkTgGfAx6FDh/D888/jpZdeAgB/Teiqq67CTTfdhAkTJqCmpgYrV64M6vhXXnklrrjiCpw6dQq33347cnJy0NbWFrCPy+VCe3s7cnJyRjyO2WyG2WwO9eURjUrLwR+AyknTCVozk8DBH7FiqJrZYIqiwD7CgqtCCAghRtw+nPPnz+PSpUuYOnUqAKCkpASdnZ1obGz077Nnzx4oioJ58+apK3yI2MSY2IQQmjczCjUj8xN0jhX7y2LHMEPzKyoq8P777+Ps2bM4evQoKioqUFdXh7KyMpw+fRqVlZVobGxEU1MTDhw4gB/+8IdITU3FsmXL/MeYNWsWampqAADd3d34xS9+gYMHD+Ls2bN47733UFpaipkzZ2Lx4sUAgNmzZ2PJkiW477778OGHH2L//v1Yv349VqxYEfRIxohhmCU0YbcDiurbZYZE3S1gEvOKzv6y2JAgxfQDVEjNjG1tbVi9ejVaWlqQmZmJ4uJi1NbWYuHChWhubsYHH3yA5557Dh0dHZgyZQpuueUWHDhwIGAAx8mTJ2G1WgEAJpMJn3zyCV599VV0dnYiNzcXixYtwuOPPx7QRPjGG29g/fr1uP322yHLMpYvX47NmzdH6BQQBUfrJkZA7XJWiRlmaQyzmIh1q7bqeWZGEYl5ZsLtRu/hxrF3pLjkbG6G2/tBTCu7UjPRljQurOeaJmTBPPOqCJdI32QJmJWWGvMLayIaJ0n4WlZ6RI+pyTyzhJQYuU8jiE3NTIUEXM4qVZYZZDESyzlmAMOMKCjC5YJwOjX/vYqqtRkT76rOJsbYifWZj/XvNxbWzBKWVvcvG0zVO45hRhqK9ehZ/suHgmGWsGLRxAgACofmB02WgPGcXxYzsW7eZZgRBUFoPL/Mx83RjEEbbzIl2kvWlVh/jGCYhYD1ssQkFCVmzYyqJNgAEDYxxlasB4CEvJxVQmMzY0KqP9+FL1rckCHBJHmmIksAZEkgCZ4KkCRJnu/haW4xSQKS5PleApDk3ccE7zZ4PsnK8uX/evaTIMPzKdMkA10mBf1JnuPI3mu1STYF16STYLUUTpaOrVi/3RhmRKNwC4HPv+zFpf7h/lRH+/MNd1ug4+kCbtPgD1GugKPIvh8kQIInRCUAk/q6Md3ZCf8D3v9Ksu/J8uXvJQmS7D+I56Cyd0UHX0IDgEnyfCvJl4/pTV8phjVBk+QZlk+xw5qZkbBmlnB6nALdvcGvLRppo63N6Hs3un0/CGBgULocCty92k0n8OSj9/d7qquebPQVyRt8EqTLCTwgKD3BKg/4HpdD1hea3t8RELKShLQkGYrk8FRfZQDwVHnlJAacVmJ9phlmoWCYJZwOhwJ7X+zCTA2tLy4CAPx3YReBj0eZrEjoEcO/YmlgzdIbftLAMPWuSiz5HvfVUE0DwliSAZPkq9B6AtbXNiwDkvd7z+PeXyp7ar6S6fJ+8DaFxmPIxno0I8OMaBTnrXbA5Y7Z7xcqmm6kBGp2Gz9KFVYIAG5vpHr/q4ePpZIv9IDAkJUCa6KSLF0OZMlb8/Q1F8Mbst7tnv8Ghqzk67iVvdu8oTwkZGVAVvGeieW9zACGWWhYM0s4rR2xmV8WCYkyTD0JQErMhx+ETiiAP1Z1ErKSb3TTwJAd2Kw7OGR9QSnJcE1JB2bG7h6SDLNQMMwSSr9boLM7tkPy1dTM5AQZmj9arYxCI/x9r6GHrEhLjlKpgpMY73aiMHQ5FPTGcPCHS+XzE+USP56fMXVBinGnGcMsBKyYJZa2XhdcMVhc2Ef12y1B2hnTWDPTBVOMb+/NMAsJ0yyRXOjohaTtjaUjKhHmEI8DkJwwdVB9k2P8hkuAtztR6NxCoM0a4/4ylRfpRFhomP1l+hHrSdMMs1CwnTFh9DgFugw6v8wnlityaIX9ZfrBZkYjYZgljA6HAnuvI6ZlUHP7FyAxBoCwv0w/TDFuZuTQ/FDIJshpaZfHr4rLX0KIy0Nah32cjKS5sx9wx26yNBCBMIvzSdPJAMYlRGQbgxzjmhnDLASm9DSkXnN1WM8VIjDk/GHn2Tj0cV8wKkpgMA6z/0hBGnCcIJ8z5uNCeGZ7xnmIt1hjP1laqEyzWPdhRBtrZfrCMEsQkm+JmsGPx6AsWgo7xIcL32GeczlkleCPM0aI9zvdaJdscGZmeffz/EcSiv95kiIgfEM0/AGPgO0+kr8m7/s+SCorVvH+3uLgD32RY3yXb4YZRZURQ9xm60f3WcA9IQLNjAHh6fvWF3yKJ9wUT/h6wtK3XUDuc+Gr7f3wRKjiP5RnLwEheX+WPB8OFCEgZAkQAgoEZokkZLlluLzPGfjllgb+7Hn+wMc88SswcGaCIl2ubIsRvrSUauCafzxizYxIZy7a+tEfqcWFfWvaeePb8/9Dq1zDXQZk2YXkrvA/7d6IFExwh/cn7gsyX3iKQd/7/ysFblMg4IaAG55b0/ged3n3c3t/9v1XGRCgnucI/3F93/v3xeV+RFmwv0xvkpIYZkS6cq4jtvPL/FTWPNT0mUnw3BV7TEPKOMLvjFAtyheywwXsaCE7YjhL8Nc+hx73cs3Ut99Iv5NiP2maYUY0gFsRaOnUS5ipS4BY318qGnwhO2bQ6iRkhwSlNDgMRw/Z4cNz9JAd+Du1xGZGIh3ptrvQqeHdmUej9tJgSoBJ03qh15D19YeGErKK95cPWwMeIWQVAKYkDgAh0o3OXge67PoIM9bMSC3fDTNDC9lR3jijvCXlGPeZ8aMb0QDn2nvhViL0sVgtle1Esf2cTIlEkgBTjIfmM8yIBjivl8EfETAuEZbNJ33QwWozsS8BkU70O934ssvYiwv7sImRtKSHxWYYZkReXf1OWPt10l8GQFIxCkAH1xZKJDr49BRSmG3ZsgXFxcWwWCywWCwoKSnBzp07/dvXrl2LgoICpKamYtKkSSgtLcWJEydGPJ7T6cQjjzyCa6+9FmlpacjNzcXq1avR3NwcsN+MGTMgSVLAV1VVVYgvlWh0F6122J2xXVw4gIo+sxiPkqZEo4M3XEhhNm3aNFRVVaGxsRGHDx/G/PnzUVpaimPHjgEA5s6di23btuH48eOora2FEAKLFi2Ce4TVx3t7e/HRRx/hV7/6FT766CP8+c9/xsmTJ/Hd7353yL6PPfYYWlpa/F8PPPBAGC+XaGRNHb36WhtZRWEk1s1IQ3q4d15IQ/PvuOOOgJ+ffPJJbNmyBQcPHsTVV1+NNWvW+LfNmDEDTzzxBObMmYOzZ8+ioKBgyPEyMzOxe/fugMd++9vf4mtf+xqampowffp0/+MZGRnIyckJpbhEQVP0NFnaj82MZBCxz7Lwi+B2u1FdXY2enh6UlJQM2d7T04Nt27YhPz8feXl5QR/XarVCkiRkZWUFPF5VVYWJEyfi+uuvx6ZNm+ByucItOtEQ3Q79TJa+LPwwM+mhR54Shw7ebyFPmj569ChKSkrQ39+P9PR01NTUoKioyL/9xRdfxMMPP4yenh4UFhZi9+7dSE5ODurY/f39eOSRR7By5UpYLBb/4w8++CBuuOEGZGdn48CBA6ioqEBLSwueeeaZEY9lt9tht18emWaz2UJ9qZRAOnsc6LLr6wOSpKqZkUhDOpjUKAkR2jIDDocDTU1NsFqt2LFjB15++WXs27fPH2hWqxVtbW1oaWnBU089hQsXLmD//v1ISUkZ9bhOpxPLly/H+fPnUVdXFxBmg73yyitYu3Yturu7YTabh91n48aNePTRR4c8brVaRz02JaYDp/6BnX9vjXUxApj+0YdxXeHVFi1JJpRNnxjhEhENL2lCCizfCr4FLlg2mw2ZmZlBXbdDDrPBFixYgIKCArz00ktDtjkcDkyYMAEvv/wyVq5cOeIxnE4n7rrrLpw+fRp79uzBxImj/xEeO3YM11xzDU6cOIHCwsJh9xmuZpaXl8cwo2FVf9iEY83WWBcjQNI/+pAUZphljTNhZR7DjLQx7opUZHxjWsSPG0qYqV6bUVGUgNAYSHjv4DvSduBykH322WfYu3fvmEEGAEeOHIEsy5g8efKI+5jN5hFrbUQD9Tvd+LI7PiZL+6i5/QtRyHQwzyykMKuoqMDSpUsxffp0dHV1Yfv27airq0NtbS1Onz6NP/3pT1i0aBEmTZqE8+fPo6qqCqmpqVi2bJn/GLNmzUJlZSXuvPNOOJ1O/OAHP8BHH32Ed999F263G62tnqae7OxsJCcno76+Hg0NDbjtttuQkZGB+vp6bNiwAatWrcKECRMiezYoIXX1O2Ht09vgD3V00IVBCUTSwXJWIYVZW1sbVq9ejZaWFmRmZqK4uBi1tbVYuHAhmpub8cEHH+C5555DR0cHpkyZgltuuQUHDhwIqEGdPHkSVqunOefChQt45513AADXXXddwO/au3cvbr31VpjNZlRXV2Pjxo2w2+3Iz8/Hhg0b8NBDD6l86UQebTadTZb2klQseBz7z8mUUGKfZer7zIwilLZXSiw7j7bgwOdfxroYQ4xr7YWpN7wRllPM4/D9/8eWC9KGOS8DaXMjPw84lOu2DvKUKHYURaDFqrfJ0urpoAuDEokOmhljXwKiGOp2uNChu8nS6ulgqTxKJDp4wzHMKKF19jjQ1a+vydJ+XJuRDEIHSzMyzCixXejshVtReUvnKFGzAghHM5KmdHAj2NiXgCiGzrXrt79MzcgsTjMjLUk66KRlmFHCsrvc+IeO7ywtqRhoLDHNSEvsMyOKna6++Jss7ZMU+2sLJRCJYUYUOxe77OjX4WRpPw4AIYPQwwogsS8BUYyca9fZnaUHUdPMqIMPypRAWDMjipF4nSztwz9s0hTDjCg2ehwudPTovL9MRbVRZjMjaYmjGYlio7NPf3eWHkzN5YGjGUlTnGdGFBvNHX1wufU5Wfqy8KtmSfzLJg1JOpilz7c8JaSmS72xLsLYVI1mJNKObIp9mjHMKOHYXW78I87uLD0Y7zRNmtJBkuigCETa6u53odMIK+VzbUYyCtbMiLTXZuvX92RpH1VhxpoZaSj2WcYwo8RzrqNP15OlI0HWwcWFEoMkAabk2L/hGGaUUBRF4EKnAQZ/QO0tYFgzI43opH+WYUYJxRCTpQEIRUBwOCMZgB5u/wIwzCjBGGGyNAB1NzMDMC4ypSAaG8OMSHvNHf0GmCytHlcAIc0wzIi0d67DKP1l6qpmXJuRtMJmRiKNOVwK2mwGmSytspkxSScXGEoAOmkFYJhRwujqd8La54h1MTTBLCPN6OTNxjCjhPGPrn70O43RX6ZmWD7AP2zSUOynmAHge54SSFNHHxSVfVFaURR15TTp5NMyxT+9DDZimFFCEEKgucM4d5aWVHaa8Q+btCLp4C7TAN/zlCB6HG509Bqov4zNjGQUOmkF4HueEoK114mufgNMlvZS22fG0YykFUnWR4zooxREUXa+oxfOBJgs7SPxT5u0opO3mk6KQRRdRpks7ae2mZEVM9II+8yINOJwKfiHUSZLe6ldAWScPq4vlAiM2My4ZcsWFBcXw2KxwGKxoKSkBDt37vRvX7t2LQoKCpCamopJkyahtLQUJ06cGPWYQgj8+7//O6ZOnYrU1FQsWLAAn332WcA+7e3tKCsrg8ViQVZWFsrLy9Hd3R1K0SmBddtd6Ow30OAPAGqrZvq4vFBCMGLNbNq0aaiqqkJjYyMOHz6M+fPno7S0FMeOHQMAzJ07F9u2bcPx48dRW1sLIQQWLVoEt3vku/r+5je/webNm/H73/8eDQ0NSEtLw+LFi9Hf3+/fp6ysDMeOHcPu3bvx7rvv4v3338eaNWvCfMmUaL7s6ke/w2D9ZSqyTJYAk4lxRtqQdPJWk4RQ156RnZ2NTZs2oby8fMi2Tz75BHPmzMGpU6dQUFAwZLsQArm5ufjZz36Gn//85wAAq9WKKVOm4A9/+ANWrFiB48ePo6ioCIcOHcKNN94IANi1axeWLVuG8+fPIzc3N6hy2mw2ZGZmwmq1wmKxqHjFZDS7P23F+//3j1gXIySy1YHkS/1j7zgMkwSsyZ8c4RIRDS+lMBvjZ0+MyrFDuW6HnalutxvV1dXo6elBSUnJkO09PT3Ytm0b8vPzkZeXN+wxzpw5g9bWVixYsMD/WGZmJubNm4f6+noAQH19PbKysvxBBgALFiyALMtoaGgYsXx2ux02my3gixKPEALNncaZLB0JOlmQgRKEYVfNP3r0KNLT02E2m7Fu3TrU1NSgqKjIv/3FF19Eeno60tPTsXPnTuzevRvJycnDHqu1tRUAMGXKlIDHp0yZ4t/W2tqKyZMDP2UmJSUhOzvbv89wKisrkZmZ6f8aKVApvvU43GjvMVp/mTom3v6FtGTEPjMAKCwsxJEjR9DQ0ID7778f99xzDz799FP/9rKyMnz88cfYt28fvvrVr+Kuu+4K6P/SSkVFBaxWq//r3LlzmpeBYs9ok6V91CxnpY9LCyUKvQzNTwr1CcnJyZg5cyYAz4CPQ4cO4fnnn8dLL70EAP6a0FVXXYWbbroJEyZMQE1NDVauXDnkWDk5OQCAixcvYurUqf7HL168iOuuu86/T1tbW8DzXC4X2tvb/c8fjtlshtlsDvXlUZxptvYZc7L0yGOmxqSTVh9KEHGzAoiiKLDbh5/DI4SAEGLE7fn5+cjJycF7773nf8xms6GhocHfD1dSUoLOzk40Njb699mzZw8URcG8efPUFp/i3Ll2g02WjgDeZZq0pJeaWUhhVlFRgffffx9nz57F0aNHUVFRgbq6OpSVleH06dOorKxEY2MjmpqacODAAfzwhz9Eamoqli1b5j/GrFmzUFNTA8Bz64Cf/vSneOKJJ/DOO+/g6NGjWL16NXJzc/G9730PADB79mwsWbIE9913Hz788EPs378f69evx4oVK4IeyUiJyelWcNGqfRN3ZITfzChzBAhpSSdhFlIzY1tbG1avXo2WlhZkZmaiuLgYtbW1WLhwIZqbm/HBBx/gueeeQ0dHB6ZMmYJbbrkFBw4cCBjAcfLkSVitVv/PDz/8MHp6erBmzRp0dnbiG9/4Bnbt2oWUlBT/Pm+88QbWr1+P22+/HbIsY/ny5di8eXMEXj7Fs65+I06W9mGfGRmETtq1Vc8zMwrOM0s8/9dqwxsNTYa5IedApi/7MM7mDOu52clJ+P+mZUe4RETDS//GNCRfkRqVY2syz4xI75raew0ZZABUrQCij8/JlCgkU6xL4MEwo7gkhMAFA0+WVhNI/KMmLckmfaQZ3/cUl3odbnT0htdMZ3QcAEKa0kmK6KQYRJFl7XPC1mfcMFNVM2OWkZZYMyOKngudBp0s7aMYtK+PEo8+soxhRvHJ8JOlVWRZEpsZSUOmZH2kGcOM4o7TraDNZtTJ0uoxykgrelkxH2CYURzq7nfBauD+MrX4R01aYZgRRdGX3f3odahYqVcP1NxpWkcXGIpzOnqvMcwo7jS19xl3srSPmjCLXCmIRscwI4oOIQTOdxh88AcAqAhjHV1fKM6xmZEoSuJlsrSaSwRHM5JmdPReY5hRXLH1O2Ez4J2liQyJNTOi6Gju7IPTZfDBHwAkNfPMODiftKKPKWYAGGYUZ85dioP+MkBVn5mko6Yfim96eq8xzChuON0KLnYl7mRpHx21/FCck3Ryl2mAYUZxpLvfhc44GPwBqGtm1NH1heKdjj45McwobsTFZGkvoWKiGW8BQ1qRZP1EiH5KQqTSuY44mCztxZtzkiHo6M2mo6IQhU8IgQvxMFnah6MZyQDYZ0YUYX1ONy71xEd/GQBVYcYsI82wmZEosqx9TnRxsjQAXV1fKN6xZkYUWS2dfXDEwWRpP1WjGfVzgaH4JukoQXRUFKLwNRn9ztKDqBqaH7liEI3OpJ8I0U9JiMLkciu4GGd3llY1ND+C5SAaDVfNJ4qgbnt83VlaKOqmF5j01PZD8Y19ZkSRc6nbgR47+8t8OGmatMKh+UQR1NTREzeTpQF1/WWArlYYojjHFUCIIkQIgQvtfbEuRoSpS7MkhhlphDUzogjpc7pxqdcR62JElsqamX4uLxT3GGZEkWHrc8LWF1+TpVU3M7KdkbSio/caw4wMLe4mSwNQ3cwYoVIQjcmo88y2bNmC4uJiWCwWWCwWlJSUYOfOnQCA9vZ2PPDAAygsLERqaiqmT5+OBx98EFarddRjSpI07NemTZv8+8yYMWPI9qqqqjBeLsWbpo546y8DFEXd8zmakbQi6WiGfkgf4qZNm4aqqipcddVVEELg1VdfRWlpKT7++GMIIdDc3IynnnoKRUVF+OKLL7Bu3To0Nzdjx44dIx6zpaUl4OedO3eivLwcy5cvD3j8sccew3333ef/OSMjI5SiUxxyuRW0WuNrsjQASCprZpxnRlqRTfpJs5DC7I477gj4+cknn8SWLVtw8OBBlJeX47//+7/92woKCvDkk09i1apVcLlcSEoa/lfl5OQE/Pz222/jtttuw5VXXhnweEZGxpB9KbF5JkvH2eAPIALzzCJTDKIx6ehzU9hFcbvdqK6uRk9PD0pKSobdx2q1wmKxjBhkg128eBF/+ctfUF5ePmRbVVUVJk6ciOuvvx6bNm2CyxVfnf4UuribLO3FeWZkGEatmQHA0aNHUVJSgv7+fqSnp6OmpgZFRUVD9vvyyy/x+OOPY82aNUEf+9VXX0VGRga+//3vBzz+4IMP4oYbbkB2djYOHDiAiooKtLS04JlnnhnxWHa7HXa73f+zzWYLuhxkDOfj6M7SkTQu1gWgxKGfLIMkRGhXA4fDgaamJlitVuzYsQMvv/wy9u3bFxBoNpsNCxcuRHZ2Nt555x2MGxfcn9esWbOwcOFCvPDCC6Pu98orr2Dt2rXo7u6G2Wwedp+NGzfi0UcfHfK4r7ZIxvf6wS9wsjX+PqRI3U6Y28If2HL/lZMjWBqikWV/76qoHt9msyEzMzOo63bIzYzJycmYOXMm5s6di8rKSsyZMwfPP/+8f3tXVxeWLFmCjIwM1NTUBB1kH3zwAU6ePIkf//jHY+47b948uFwunD17dsR9KioqYLVa/V/nzp0LqhxkDH0ONy712Mfe0YDUtBKyiZG0oqcV84EITElRFMXfnGez2bB48WKYzWa88847SElJCfo4W7duxdy5czFnzpwx9z1y5AhkWcbkySN/AjWbzSPW2sj4bH2OuJssfZmK27/o6/pCcczQYVZRUYGlS5di+vTp6Orqwvbt21FXV4fa2lrYbDYsWrQIvb29eP3112Gz2fz9VJMmTYLJ21E4a9YsVFZW4s477/Qf12az4c0338TTTz895HfW19ejoaEBt912GzIyMlBfX48NGzZg1apVmDBhgprXTgbWYo3HydJeKroBdTS4jOKdkcOsra0Nq1evRktLCzIzM1FcXIza2losXLgQdXV1aGhoAADMnDkz4HlnzpzBjBkzAAAnT54cMpG6uroaQgisXLlyyO80m82orq7Gxo0bYbfbkZ+fjw0bNuChhx4KpegUZ5ribnHhAVRMmpa4MiNpRWdhFvIAEKMKpSOR9M3lVvDK/jM4194b66JEhWx1IPlSeJPBx5sk3POVSREuEdFQpvHjkLloRlR/R1QHgBDFWo/djc7e+LmzdCSxZkaa0dmyaQwzMpxLPXb02ON18AcgKeE3lujr8kJxTWfNjAwzMpzz7XE+WVrFSzPp7NMyxTEdTZgGGGZkQOc647OvLBKYZaQVSWdvNoYZGUqfw41L3fE5WfoyNfPM9HWBofgl6egu0wDDjAzG1h/Pk6U9JBVNqDpr+aF4xj4zovBdtPXDHq+Tpb3UdAfq6/JC8UyS9RUf+ioN0Ri++DKOJ0v7qAkzNjOSVnSWHjorDtHI3IpAqy3+w4wLDZMRsM+MKEzd/S509nGy9Gh0dn2heMZmRqLwtPfa0d0f34M/AJU1M/aakVZ09smJYUaGEfeTpX1UrADCP2jSiqSzN5vOikM0snMdCTJZWtUAkMgVg2hUJn3Fh75KQzQCz2RpR6yLoXtczoq0orebczLMyBA8k6U5+GMsOru+UDxjnxlR6NpsdvTH+WRpH4k35yQD4NB8ojB8Eac34hyOmiEuOru+UBzjCiBEIXIrAi2d8T9Z2k/FiE3+QZNWWDMjClG3PbEmS3OeGRkCw4woNB09iTFZ2k/NzTk5AoS0orP3GsOMdO9cR4JMlvbi2oxkCJxnRhSa8+0J1F8GqOozY5aRViSd3TyPYUa61u9MhDtLD6KiEprESdOkEdmkrzRjmJGu2fqcsCbQ4A9AXe2KUUaa0Vl66Kw4RIEuJtBkaR+hompmYpyRVlgzIwpeU3tPrIugOVUDQPR1faF4prP3GsOMdMutCLRY+2NdDO2pGZrPmhlpxJSsrzRjmJFuddtd6OxNrP4yAOrWs2KWkQb0tmI+wDAjHevsdaDbnoBhpsK4WBeAEgLDjCgE59p74VZx12XDUnVzTv1dZIi0wDAj3TrXkWCTpb0kVfPM+CdNGmDNjCg4CTlZ2kvN0HwdXmMoHulskWGAYUY6ZetzwpqAgz+EW12zKsOMtCDpsAUgpBJt2bIFxcXFsFgssFgsKCkpwc6dOwEA7e3teOCBB1BYWIjU1FRMnz4dDz74IKxW66jHvPfeeyFJUsDXkiVLAvZpb29HWVkZLBYLsrKyUF5eju7u7hBfKhlJW1fiTZaOBH0Nlqa4pb8sQ1IoO0+bNg1VVVW46qqrIITAq6++itLSUnz88ccQQqC5uRlPPfUUioqK8MUXX2DdunVobm7Gjh07Rj3ukiVLsG3bNv/PZrM5YHtZWRlaWlqwe/duOJ1O/OhHP8KaNWuwffv2UIpPBnKuI3HuLD2Qmv4yAJBZNSMt6LCZURJC3b01srOzsWnTJpSXlw/Z9uabb2LVqlXo6elBUtLwuXnvvfeis7MTb7311rDbjx8/jqKiIhw6dAg33ngjAGDXrl1YtmwZzp8/j9zc3KDKabPZkJmZCavVCovFEtyLo5hQFIFX9p/BF5cSb/UPuBSkNIXf6nDX/5uAiWYO0KfoMmWZkXnr9Kj/nlCu22FXFt1uN6qrq9HT04OSkpJh9/EVYKQg86mrq8PkyZNRWFiI+++/H5cuXfJvq6+vR1ZWlj/IAGDBggWQZRkNDQ0jHtNut8NmswV8kTF0OxJ0sjSgbsI0uGo+aUPS2b3MgBCbGQHg6NGjKCkpQX9/P9LT01FTU4OioqIh+3355Zd4/PHHsWbNmlGPt2TJEnz/+99Hfn4+Pv/8c/zbv/0bli5divr6ephMJrS2tmLy5MmBhU5KQnZ2NlpbW0c8bmVlJR599NFQXx7pQEcCT5ZW3czILCMN6HHSdMhhVlhYiCNHjsBqtWLHjh245557sG/fvoBAs9ls+Pa3v42ioiJs3Lhx1OOtWLHC//21116L4uJiFBQUoK6uDrfffnuoxfOrqKjAQw89FFCmvLy8sI9H2jmfqJOlAaitmkl67Jmn+KPDMAv5nZ+cnIyZM2di7ty5qKysxJw5c/D888/7t3d1dWHJkiXIyMhATU0Nxo0Lrf3+yiuvxBVXXIFTp04BAHJyctDW1hawj8vlQnt7O3JyckY8jtls9o+69H2RMZxP0MnSACBUhngSs4w0IOlwAIjqt76iKLDbPZNbbTYbFi1ahOTkZLzzzjtISUkJ+Xjnz5/HpUuXMHXqVABASUkJOjs70djY6N9nz549UBQF8+bNU1t80pl+pxtfdiXmZGkAqvvMODSfNGH0mllFRQXef/99nD17FkePHkVFRQXq6upQVlbmD7Kenh5s3boVNpsNra2taG1thdt9eb7QrFmzUFNTAwDo7u7GL37xCxw8eBBnz57Fe++9h9LSUsycOROLFy8GAMyePRtLlizBfffdhw8//BD79+/H+vXrsWLFiqBHMpJxdNtdCXdn6UhixYy0oMM506H1mbW1tWH16tVoaWlBZmYmiouLUVtbi4ULF6Kurs4/unDmzJkBzztz5gxmzJgBADh58qR/IrXJZMInn3yCV199FZ2dncjNzcWiRYvw+OOPB8w1e+ONN7B+/XrcfvvtkGUZy5cvx+bNm9W8btKpVms/+pyJO1lazQAQWQJMOhxlRnFIh3eBVT3PzCg4z8wYdv69BQdOfRnrYsSM1OOC+WJ4E8ZNErAmf/LYOxKplFKQhfHXTor679FknhlRpCmKQEtn4g7+AACo+GzJKWakGaP3mRFFU0JPlvZSc4kw8TbTpJG4HM1IFCmdvQ7Y+hM7zFTVzCJYDKJR6bBvNuRJ00TR0mrrhyxJgAwoAkiQ7txASvhP1WHLD8UpPd7RnGFGuvG1GRPxtRkTAx5zu91wugGX2w03AMUNKBBwuhW4FUARCtyKgCI8fW4ORQEUwC2E/3GXosDtFnBDAAJwK+Lylzc03UKBUACXIuAWAsJ7PAUCLreAEN7fIQBFCLgVZcB+ngqVIhS4vMdThGcCtALArSje7SKqIS2zbkZa0d9gRoYZ6ZvJZILJBOjyr0cFh8MTzu5BId3f54TS74bTqUBxu6EoAi6nAsWtQHELuHz/dSmesFUUKC5PYCbLEsxXWDwHE94bfSre8FSEZ3URxRPMcMObwIAQimeytn87AG8AEw0nLhYaJiL1kpN94TwopNPNQ/aNJbfD7Qk+eP/r9oSo8H4PIQC38ASnAISiAG5vgLq9gej21HqhAFDc3u+9Qaoo3ucJCLe3jdXt3S4YtHqlxwEgDDMiGpFpmNDVQx3Z7faFKwDfCkNuT3Oyt233cgAOCFrf93D7vheecHULQChDg9YboMLtC1UEBq3bm6q+mq+36TnuMcyIiNQzmUwDUlXnQasAEN6gdfs7Xv1B66uRCt924Q1gX03ULS7XRv3hPOD5QgwKWl9Tsvf3wFvzjeSdKNjMSEQU34wRtN7/KoDidg8ITe+XW1xu+nUDApcfgyJgStdfdOivREREFBWXg1ZfIRsJ+qsrEhERhYhhRkREhscwIyIiw2OYERGR4THMiIjI8BhmRERkeAwzIiIyPIYZEREZHsOMiIgMj2FGRESGxzAjIiLDY5gREZHhMcyIiMjwGGZERGR4CXMLGOG9/avNZotxSYiIKBi+67UI4vbdCRNmXV1dAIC8vLwYl4SIiELR1dWFzMzMUfeRRDCRFwcURUFzczMyMjIgSZL/cZvNhry8PJw7dw4WiyWGJdQvnqPR8fyMjedobDxHQwkh0NXVhdzcXMjy6L1iCVMzk2UZ06ZNG3G7xWLhG2gMPEej4/kZG8/R2HiOAo1VI/PhABAiIjI8hhkRERlewoeZ2WzGf/zHf8BsNse6KLrFczQ6np+x8RyNjedInYQZAEJERPEr4WtmRERkfAwzIiIyPIYZEREZHsOMiIgML+7D7KOPPsLChQuRlZWFiRMnYs2aNeju7g7Y59ChQ7j99tuRlZWFCRMmYPHixfjb3/426nH7+/vxk5/8BBMnTkR6ejqWL1+OixcvRvOlRM1Y5+gPf/gDJEka9qutrW3E486YMWPI/lVVVVq8pIiL1jlqb29HWVkZLBYLsrKyUF5ePuT9aQTB/J0BnvNUXFyMlJQUTJ48GT/5yU9GPe6tt9465HyuW7cuWi8jqqJ1juLpWqSKiGMXLlwQEyZMEOvWrRMnTpwQH374obj55pvF8uXL/ft0dXWJ7Oxsce+994oTJ06Iv//972L58uViypQpwuFwjHjsdevWiby8PPHee++Jw4cPi5tuukncfPPNWrysiArmHPX29oqWlpaAr8WLF4tvfetbox77K1/5injssccCntfd3R3lVxR50TxHS5YsEXPmzBEHDx4UH3zwgZg5c6ZYuXJllF9RZAVzfoQQ4umnnxa5ubnijTfeEKdOnRJ/+9vfxNtvvz3qsb/1rW+J++67L+C8Wq3WaL6cqIjmOYqXa5FacR1mL730kpg8ebJwu93+xz755BMBQHz22WdCCCEOHTokAIimpqYR9xmss7NTjBs3Trz55pv+x44fPy4AiPr6+ii9mugI5hwN1tbWJsaNGydee+21UY/9la98RTz77LORLG5MROscffrppwKAOHTokP+xnTt3CkmSxIULFyL3AqIsmPPT3t4uUlNTxf/+7/+GdOxvfetb4l//9V8jWdyYiNY5iqdrkVpx3cxot9uRnJwcsEBlamoqAOCvf/0rAKCwsBATJ07E1q1b4XA40NfXh61bt2L27NmYMWPGsMdtbGyE0+nEggUL/I/NmjUL06dPR319ffReUBQEc44Ge+211zB+/Hj84Ac/GPP4VVVVmDhxIq6//nps2rQJLpcrMgXXULTOUX19PbKysnDjjTf6H1uwYAFkWUZDQ0OESh99wZyf3bt3Q1EUXLhwAbNnz8a0adNw11134dy5c2Me/4033sAVV1yBa665BhUVFejt7Y3OC4miaJ2jeLoWqRXXYTZ//ny0trZi06ZNcDgc6OjowC9/+UsAQEtLCwAgIyMDdXV1eP3115Gamor09HTs2rULO3fuRFLS8Oswt7a2Ijk5GVlZWQGPT5kyBa2trVF9TZEWzDkabOvWrbj77rv9f4wjefDBB1FdXY29e/di7dq1+PWvf42HH3444q8h2qJ1jlpbWzF58uSAx5KSkpCdnW2o91Ew5+f06dNQFAW//vWv8dxzz2HHjh1ob2/HwoUL4XA4Rjz23Xffjddffx179+5FRUUF/uu//gurVq3S5HVFUrTOUTxdi9QyZJj98pe/HLGz3fd14sQJXH311Xj11Vfx9NNPY/z48cjJyUF+fj6mTJni/4TU19eH8vJyfP3rX8fBgwexf/9+XHPNNfj2t7+Nvr6+GL/S8EXyHA1UX1+P48ePo7y8fMwyPPTQQ7j11ltRXFyMdevW4emnn8YLL7wAu90ejZccMj2cIz2L5PlRFAVOpxObN2/G4sWLcdNNN+GPf/wjPvvsM+zdu3fEMqxZswaLFy/Gtddei7KyMrz22muoqanB559/rtVpGJUezhF5GPIWMD/72c9w7733jrrPlVdeCcDzye7uu+/GxYsXkZaWBkmS8Mwzz/i3b9++HWfPnkV9fb3/TbV9+3ZMmDABb7/9NlasWDHk2Dk5OXA4HOjs7Az4RHTx4kXk5ORE5kWqFMlzNNDLL7+M6667DnPnzg25TPPmzYPL5cLZs2dRWFgY8vMjLdbnKCcnZ8hIR5fLhfb2dl28jyJ5fqZOnQoAKCoq8j930qRJuOKKK9DU1BR0mebNmwcAOHXqFAoKCkJ5OVER63NkhGuRZmLdaae1rVu3ivHjx4uOjg4hhBCbN28WOTk5QlEU/z5Op1OkpaWJN954Y9hj+Dpdd+zY4X/sxIkTcdPpOvgc+XR1dYn09HTxwgsvhHXc119/XciyLNrb2yNQytiKxDnyDQA5fPiw/7Ha2lrDDQAZzuDzc/LkSQEgYHDDpUuXhCzLora2Nujj/vWvfxUAxN/+9rdIF1lzkThH8X4tCkXch9kLL7wgGhsbxcmTJ8Vvf/tbkZqaKp5//nn/9uPHjwuz2Szuv/9+8emnn4q///3vYtWqVSIzM1M0NzcLIYQ4f/68KCwsFA0NDf7nrVu3TkyfPl3s2bNHHD58WJSUlIiSkhLNX18kjHWOfF5++WWRkpIy5AIuhBANDQ2isLBQnD9/XgghxIEDB8Szzz4rjhw5Ij7//HPx+uuvi0mTJonVq1dH++VERTTOkRCeofnXX3+9aGhoEH/961/FVVddZbih+UIEd35KS0vF1VdfLfbv3y+OHj0qvvOd74iioiL/FJjBf2enTp0Sjz32mDh8+LA4c+aMePvtt8WVV14pbrnlFs1fXyRE4xwJEV/XIjXiPsz+6Z/+SWRnZ4vk5GRRXFw87FDp//mf/xFf//rXRWZmppgwYYKYP39+wKeaM2fOCABi7969/sf6+vrEv/zLv4gJEyaI8ePHizvvvFO0tLRo8ZIiLphzJIQQJSUl4u677x522969ewUAcebMGSGEEI2NjWLevHkiMzNTpKSkiNmzZ4tf//rXor+/P1ovI6qicY6E8HzyXrlypUhPTxcWi0X86Ec/El1dXdF4CVEVzPmxWq3in//5n0VWVpbIzs4Wd955Z8CUmMF/Z01NTeKWW24R2dnZwmw2i5kzZ4pf/OIXhpxnJkR0zpEQ8XUtUoO3gCEiIsMz5GhGIiKigRhmRERkeAwzIiIyPIYZEREZHsOMiIgMj2FGRESGxzAjIiLDY5gREZHhMcyIiMjwGGZERGR4DDMiIjI8hhkRERne/w8hKp5pmuJ7eAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "search_gdf.plot(\"mgrs:grid_square\", alpha=0.25)" + ] + }, + { + "cell_type": "code", + "execution_count": 186, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "s2:granule_id\n", + "S2B_OPER_MSI_L2A_TL_2BPS_20230819T223356_A033700_T14SQB_N05.09 1\n", + "S2A_OPER_MSI_L2A_TL_2APS_20230804T235402_A042394_T14SQB_N05.09 1\n", + "S2A_OPER_MSI_L2A_TL_2APS_20230818T002256_A042580_T14SPC_N05.09 1\n", + "S2B_OPER_MSI_L2A_TL_2BPS_20230819T223356_A033700_T14SPB_N05.09 1\n", + "S2A_OPER_MSI_L2A_TL_2APS_20230815T002553_A042537_T14SPB_N05.09 1\n", + "S2A_OPER_MSI_L2A_TL_2APS_20230815T002553_A042537_T14SQB_N05.09 1\n", + "S2B_OPER_MSI_L2A_TL_2BPS_20230819T223356_A033700_T14SPC_N05.09 1\n", + "S2A_OPER_MSI_L2A_TL_2APS_20230818T002256_A042580_T14SQC_N05.09 1\n", + "S2A_OPER_MSI_L2A_TL_2APS_20230804T235402_A042394_T14SPB_N05.09 1\n", + "S2B_OPER_MSI_L2A_TL_2BPS_20230819T223356_A033700_T14SQC_N05.09 1\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 186, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "search_gdf[\"s2:granule_id\"].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 187, + "metadata": {}, + "outputs": [], + "source": [ + "search_gdf[\"area\"] = search_gdf.geometry.area" + ] + }, + { + "cell_type": "code", + "execution_count": 188, + "metadata": {}, + "outputs": [], + "source": [ + "search_gdf.sort_values(\"area\", ascending=False, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 189, + "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", + " \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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
geometrycreatedplatformconstellationinstrumentseo:cloud_coverproj:epsgmgrs:utm_zonemgrs:latitude_bandmgrs:grid_square...s2:granule_ids2:reflectance_conversion_factordatetimes2:sequenceearthsearch:s3_pathearthsearch:payload_idearthsearch:boa_offset_appliedprocessing:softwareupdatedarea
2POLYGON ((-97.91284 34.33683, -97.92531 33.346...2023-08-18T06:10:25.042Zsentinel-2asentinel-2[msi]0.0064373261414SPC...S2A_OPER_MSI_L2A_TL_2APS_20230818T002256_A0425...0.9744892023-08-17T17:24:31.907000Z0s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/P...roda-sentinel2/workflow-sentinel2-to-stac/a898...True{'sentinel2-to-stac': '0.1.1'}2023-08-18T06:10:25.042Z1.174444
9POLYGON ((-96.81576 34.32217, -96.82780 34.277...2023-08-20T04:44:38.807Zsentinel-2bsentinel-2[msi]0.0769343261414SQC...S2B_OPER_MSI_L2A_TL_2BPS_20230819T223356_A0337...0.9751982023-08-19T17:14:31.780000Z0s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/Q...roda-sentinel2/workflow-sentinel2-to-stac/2524...True{'sentinel2-to-stac': '0.1.1'}2023-08-20T04:44:38.807Z1.172798
0POLYGON ((-96.84938 33.42092, -96.87321 32.431...2023-08-20T04:40:37.325Zsentinel-2bsentinel-2[msi]0.0045393261414SQB...S2B_OPER_MSI_L2A_TL_2BPS_20230819T223356_A0337...0.9751982023-08-19T17:14:46.266000Z0s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/Q...roda-sentinel2/workflow-sentinel2-to-stac/a707...True{'sentinel2-to-stac': '0.1.1'}2023-08-20T04:40:37.325Z1.161135
1POLYGON ((-96.84938 33.42092, -96.87321 32.431...2023-08-05T04:59:04.872Zsentinel-2asentinel-2[msi]0.0052623261414SQB...S2A_OPER_MSI_L2A_TL_2APS_20230804T235402_A0423...0.9706322023-08-04T17:14:46.231000Z0s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/Q...roda-sentinel2/workflow-sentinel2-to-stac/73a7...True{'sentinel2-to-stac': '0.1.1'}2023-08-05T04:59:04.872Z1.161135
5POLYGON ((-96.84938 33.42092, -96.87321 32.431...2023-08-15T04:10:46.325Zsentinel-2asentinel-2[msi]0.0145753261414SQB...S2A_OPER_MSI_L2A_TL_2APS_20230815T002553_A0425...0.9734762023-08-14T17:14:46.612000Z0s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/Q...roda-sentinel2/workflow-sentinel2-to-stac/cac3...True{'sentinel2-to-stac': '0.1.1'}2023-08-15T04:10:46.325Z1.161135
7POLYGON ((-96.82664 34.32236, -96.85153 33.333...2023-08-18T06:09:55.100Zsentinel-2asentinel-2[msi]0.0404403261414SQC...S2A_OPER_MSI_L2A_TL_2APS_20230818T002256_A0425...0.9744892023-08-17T17:24:28.416000Z0s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/Q...roda-sentinel2/workflow-sentinel2-to-stac/c613...True{'sentinel2-to-stac': '0.1.1'}2023-08-18T06:09:55.100Z0.620451
4POLYGON ((-97.06177 33.42442, -97.32332 32.437...2023-08-15T04:07:22.379Zsentinel-2asentinel-2[msi]0.0142113261414SPB...S2A_OPER_MSI_L2A_TL_2APS_20230815T002553_A0425...0.9734762023-08-14T17:14:49.390000Z0s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/P...roda-sentinel2/workflow-sentinel2-to-stac/ccee...True{'sentinel2-to-stac': '0.1.1'}2023-08-15T04:07:22.379Z0.432199
8POLYGON ((-97.05919 33.42438, -97.32056 32.437...2023-08-05T04:52:48.750Zsentinel-2asentinel-2[msi]0.0595703261414SPB...S2A_OPER_MSI_L2A_TL_2APS_20230804T235402_A0423...0.9706322023-08-04T17:14:49.014000Z0s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/P...roda-sentinel2/workflow-sentinel2-to-stac/a5ff...True{'sentinel2-to-stac': '0.1.1'}2023-08-05T04:52:48.750Z0.429551
3POLYGON ((-97.05790 33.42436, -97.31949 32.437...2023-08-20T04:36:25.463Zsentinel-2bsentinel-2[msi]0.0090563261414SPB...S2B_OPER_MSI_L2A_TL_2BPS_20230819T223356_A0337...0.9751982023-08-19T17:14:49.046000Z0s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/P...roda-sentinel2/workflow-sentinel2-to-stac/ee80...True{'sentinel2-to-stac': '0.1.1'}2023-08-20T04:36:25.463Z0.428386
6POLYGON ((-96.81576 34.32217, -97.08134 33.336...2023-08-20T04:30:59.255Zsentinel-2bsentinel-2[msi]0.0173863261414SPC...S2B_OPER_MSI_L2A_TL_2BPS_20230819T223356_A0337...0.9751982023-08-19T17:14:35.561000Z0s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/P...roda-sentinel2/workflow-sentinel2-to-stac/741d...True{'sentinel2-to-stac': '0.1.1'}2023-08-20T04:30:59.255Z0.213553
\n", + "

10 rows × 43 columns

\n", + "
" + ], + "text/plain": [ + " geometry \\\n", + "2 POLYGON ((-97.91284 34.33683, -97.92531 33.346... \n", + "9 POLYGON ((-96.81576 34.32217, -96.82780 34.277... \n", + "0 POLYGON ((-96.84938 33.42092, -96.87321 32.431... \n", + "1 POLYGON ((-96.84938 33.42092, -96.87321 32.431... \n", + "5 POLYGON ((-96.84938 33.42092, -96.87321 32.431... \n", + "7 POLYGON ((-96.82664 34.32236, -96.85153 33.333... \n", + "4 POLYGON ((-97.06177 33.42442, -97.32332 32.437... \n", + "8 POLYGON ((-97.05919 33.42438, -97.32056 32.437... \n", + "3 POLYGON ((-97.05790 33.42436, -97.31949 32.437... \n", + "6 POLYGON ((-96.81576 34.32217, -97.08134 33.336... \n", + "\n", + " created platform constellation instruments \\\n", + "2 2023-08-18T06:10:25.042Z sentinel-2a sentinel-2 [msi] \n", + "9 2023-08-20T04:44:38.807Z sentinel-2b sentinel-2 [msi] \n", + "0 2023-08-20T04:40:37.325Z sentinel-2b sentinel-2 [msi] \n", + "1 2023-08-05T04:59:04.872Z sentinel-2a sentinel-2 [msi] \n", + "5 2023-08-15T04:10:46.325Z sentinel-2a sentinel-2 [msi] \n", + "7 2023-08-18T06:09:55.100Z sentinel-2a sentinel-2 [msi] \n", + "4 2023-08-15T04:07:22.379Z sentinel-2a sentinel-2 [msi] \n", + "8 2023-08-05T04:52:48.750Z sentinel-2a sentinel-2 [msi] \n", + "3 2023-08-20T04:36:25.463Z sentinel-2b sentinel-2 [msi] \n", + "6 2023-08-20T04:30:59.255Z sentinel-2b sentinel-2 [msi] \n", + "\n", + " eo:cloud_cover proj:epsg mgrs:utm_zone mgrs:latitude_band \\\n", + "2 0.006437 32614 14 S \n", + "9 0.076934 32614 14 S \n", + "0 0.004539 32614 14 S \n", + "1 0.005262 32614 14 S \n", + "5 0.014575 32614 14 S \n", + "7 0.040440 32614 14 S \n", + "4 0.014211 32614 14 S \n", + "8 0.059570 32614 14 S \n", + "3 0.009056 32614 14 S \n", + "6 0.017386 32614 14 S \n", + "\n", + " mgrs:grid_square ... s2:granule_id \\\n", + "2 PC ... S2A_OPER_MSI_L2A_TL_2APS_20230818T002256_A0425... \n", + "9 QC ... S2B_OPER_MSI_L2A_TL_2BPS_20230819T223356_A0337... \n", + "0 QB ... S2B_OPER_MSI_L2A_TL_2BPS_20230819T223356_A0337... \n", + "1 QB ... S2A_OPER_MSI_L2A_TL_2APS_20230804T235402_A0423... \n", + "5 QB ... S2A_OPER_MSI_L2A_TL_2APS_20230815T002553_A0425... \n", + "7 QC ... S2A_OPER_MSI_L2A_TL_2APS_20230818T002256_A0425... \n", + "4 PB ... S2A_OPER_MSI_L2A_TL_2APS_20230815T002553_A0425... \n", + "8 PB ... S2A_OPER_MSI_L2A_TL_2APS_20230804T235402_A0423... \n", + "3 PB ... S2B_OPER_MSI_L2A_TL_2BPS_20230819T223356_A0337... \n", + "6 PC ... S2B_OPER_MSI_L2A_TL_2BPS_20230819T223356_A0337... \n", + "\n", + " s2:reflectance_conversion_factor datetime s2:sequence \\\n", + "2 0.974489 2023-08-17T17:24:31.907000Z 0 \n", + "9 0.975198 2023-08-19T17:14:31.780000Z 0 \n", + "0 0.975198 2023-08-19T17:14:46.266000Z 0 \n", + "1 0.970632 2023-08-04T17:14:46.231000Z 0 \n", + "5 0.973476 2023-08-14T17:14:46.612000Z 0 \n", + "7 0.974489 2023-08-17T17:24:28.416000Z 0 \n", + "4 0.973476 2023-08-14T17:14:49.390000Z 0 \n", + "8 0.970632 2023-08-04T17:14:49.014000Z 0 \n", + "3 0.975198 2023-08-19T17:14:49.046000Z 0 \n", + "6 0.975198 2023-08-19T17:14:35.561000Z 0 \n", + "\n", + " earthsearch:s3_path \\\n", + "2 s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/P... \n", + "9 s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/Q... \n", + "0 s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/Q... \n", + "1 s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/Q... \n", + "5 s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/Q... \n", + "7 s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/Q... \n", + "4 s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/P... \n", + "8 s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/P... \n", + "3 s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/P... \n", + "6 s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/P... \n", + "\n", + " earthsearch:payload_id \\\n", + "2 roda-sentinel2/workflow-sentinel2-to-stac/a898... \n", + "9 roda-sentinel2/workflow-sentinel2-to-stac/2524... \n", + "0 roda-sentinel2/workflow-sentinel2-to-stac/a707... \n", + "1 roda-sentinel2/workflow-sentinel2-to-stac/73a7... \n", + "5 roda-sentinel2/workflow-sentinel2-to-stac/cac3... \n", + "7 roda-sentinel2/workflow-sentinel2-to-stac/c613... \n", + "4 roda-sentinel2/workflow-sentinel2-to-stac/ccee... \n", + "8 roda-sentinel2/workflow-sentinel2-to-stac/a5ff... \n", + "3 roda-sentinel2/workflow-sentinel2-to-stac/ee80... \n", + "6 roda-sentinel2/workflow-sentinel2-to-stac/741d... \n", + "\n", + " earthsearch:boa_offset_applied processing:software \\\n", + "2 True {'sentinel2-to-stac': '0.1.1'} \n", + "9 True {'sentinel2-to-stac': '0.1.1'} \n", + "0 True {'sentinel2-to-stac': '0.1.1'} \n", + "1 True {'sentinel2-to-stac': '0.1.1'} \n", + "5 True {'sentinel2-to-stac': '0.1.1'} \n", + "7 True {'sentinel2-to-stac': '0.1.1'} \n", + "4 True {'sentinel2-to-stac': '0.1.1'} \n", + "8 True {'sentinel2-to-stac': '0.1.1'} \n", + "3 True {'sentinel2-to-stac': '0.1.1'} \n", + "6 True {'sentinel2-to-stac': '0.1.1'} \n", + "\n", + " updated area \n", + "2 2023-08-18T06:10:25.042Z 1.174444 \n", + "9 2023-08-20T04:44:38.807Z 1.172798 \n", + "0 2023-08-20T04:40:37.325Z 1.161135 \n", + "1 2023-08-05T04:59:04.872Z 1.161135 \n", + "5 2023-08-15T04:10:46.325Z 1.161135 \n", + "7 2023-08-18T06:09:55.100Z 0.620451 \n", + "4 2023-08-15T04:07:22.379Z 0.432199 \n", + "8 2023-08-05T04:52:48.750Z 0.429551 \n", + "3 2023-08-20T04:36:25.463Z 0.428386 \n", + "6 2023-08-20T04:30:59.255Z 0.213553 \n", + "\n", + "[10 rows x 43 columns]" + ] + }, + "execution_count": 189, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "search_gdf" + ] + }, + { + "cell_type": "code", + "execution_count": 190, + "metadata": {}, + "outputs": [], + "source": [ + "search_gdf.drop_duplicates(\"mgrs:grid_square\", inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 191, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 191, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbMAAAGdCAYAAACYS53BAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABFBklEQVR4nO3df1hU5503/vcZfowozAAqICtERIuSBGPMVTNpaxPFn92UWNt8NbgmXeqPbI2NdpuUvbZdkzSFrTExpg3J89VYs9HSJ+6S5EkvZd0oxigSRY3WqE+MGn8A0ojMAMoAM/fzBzAyMPyYOcM958y8X9fF5TBz5nhmruG8577vz30fRQghQEREpGOGQB8AERGRWgwzIiLSPYYZERHpHsOMiIh0j2FGRES6xzAjIiLdY5gREZHuMcyIiEj3wgN9ALI4nU5UVVUhJiYGiqIE+nCIiKgfQgg0NDQgOTkZBkPfba+QCbOqqiqkpKQE+jCIiMhLly9fxujRo/vcJmTCLCYmBkD7m2IymQJ8NERE1B+bzYaUlBTX+bsvIRNmnV2LJpOJYUZEpCMDGRpiAQgREekew4yIiHSPYUZERLrHMCMiIt1jmBERke4xzIiISPcYZkREpHsMMyIi0j2GGRER6R7DjIiIdI9hRkREuscwIyIi3WOYERGR7oXMqvn+1FpVhZZLlwGDAsVgAAwGQOl62wDFoABhYd3u97BNx+/9beO6r/M2ERG5MMx80FpTg5uHDwf2IDqDVOkMOAUwhHW738PtAW3TJTT72KZr6PYW7G77U26H90C2cbvNACeiPjDMfCFEoI8AcAoIpwOAAwCggSMaXIrSfwgrBiCsnxBWDFDCPIRwH9u4WtDdbsOgQAkL632bzkDuvo2n0A4L83w/EQ0Iw8wXWgizUCME4BAQDuftuwJ4OFJ0C3AlzIBGQzi2xSYiTAHCAIRBQZgiEKYoCIcCgwKEK0r77wpgUJT23yPCETN5MsLQ/njX7dp/cPtfKB62Qcc+lfb/t8v/wdAlLWCY+UA4nf1vRKRWtwAXAKqMQ9Ha2opWL3elRIQjytbk90MEAEOP8OsSop0hifbg6xqe7c/puB+93N81TOEeqj3CFrf/TwZs6GGY+SLomwSkVTURkb49URm8MUcnBFqE0NTfRWeA9hZ+rttwb2X2CNv+QrjzfnjapvP/UBBuYLgONoaZL9jNSAFSE2H07Ykh1lJxCAEHtBew7QHpufvWU0szTOkatl1bur23YPtr8YZ1+X+CCcPMF4LdjCRfKxR8He5ryyy4Tlx65BACDg19EVa6hWUYgHDDAMK2+/O6j6cabrdU4yLCkWSMkPJ6GGa+0NAHkkLH3yIi4fQ1lBhm1I2AQJsA2rqezxz+/T+yYoYiyWj27057wck7PhAMMwoAn7sYwYIICoxwiZ87hpkvnAwzku+ar8UfAMACBAoAzYZZUVERsrKyYDKZYDKZYLFYsHPnzh7bCSEwd+5cKIqC9957r9f9tba24tlnn8Xdd9+NYcOGITk5GUuWLEFVVZXbdmPGjIGiKG4/hYWF3hy6nzHMSL5bhjDfnzyI1YxEvQmT+B3KqzGz0aNHo7CwEOPHj4cQAlu3bkVOTg6OHTuGO++807Xdhg0bBtStcfPmTRw9ehS/+tWvMGnSJNy4cQM/+9nP8P3vfx9Hjhxx2/b555/H0qVLXb/HxMR4c+j+xXlmFACqPnXsZqQAkNky8yrMHn74YbffX3zxRRQVFeHQoUOuMDt+/DjWr1+PI0eOYNSoUX3uz2w2Y/fu3W73/f73v8c3v/lNXLp0Campqa77Y2JikJSU5M3hDhqOmVEgOOH7iYFjZhQImu1m7MrhcKC4uBhNTU2wWCwA2ltajz32GP7whz/4HDxWqxWKoiA2Ntbt/sLCQgwfPhyTJ0/GunXr0NbW5uuhq8cwowBwqDkxMMwoAGTOZfO6NP/kyZOwWCxobm5GdHQ0SkpKkJmZCQBYvXo1HnjgAeTk5Ph0MM3NzXj22WexaNEimEwm1/2rVq3Cvffei/j4eBw8eBD5+fmorq7Gyy+/3Ou+7HY77Ha763ebzebTMXnEMKMAUNXNyAIQCoAIrY6ZAUBGRgaOHz8Oq9WKHTt24PHHH8e+fftw7tw57NmzB8eOHfPpQFpbW/Hoo49CCIGioiK3x9asWeO6nZWVhcjISCxfvhwFBQUwGj2XKxcUFOC5557z6Vj6xTCjAPB5jhnAAhAKCJktM0WoHADKzs5Geno6oqKisHHjRhi6XHfK4XDAYDDgO9/5DsrKynrdR2eQnT9/Hnv27MHw4cP7/D9PnTqFu+66C2fOnEFGRobHbTy1zFJSUmC1Wt1afb5o+J//QfPpM6r2QeStrcP/Dk1hvlU0ho8YgcixaX4+IqK+PZIQh/HDhvj8fJvNBrPZPKDztuoVQJxOJ+x2O5577jn85Cc/cXvs7rvvxiuvvNKjcKSrziD74osvsHfv3n6DDGgvMjEYDEhISOh1G6PR2GurTS2umk+B4FDzJZdjZhQAmq1mzM/Px9y5c5GamoqGhgZs374dZWVlKC0tRVJSkseij9TUVKSl3f5GOGHCBBQUFGD+/PlobW3FD3/4Qxw9ehQffvghHA4HampqAADx8fGIjIxEeXk5Kioq8NBDDyEmJgbl5eVYvXo1Fi9ejLi4OJUv30fsZaQAUFPNyDCjQNDsPLPa2losWbIE1dXVMJvNyMrKQmlpKWbOnDngfZw9exZWqxUAcPXqVXzwwQcAgHvuucdtu7179+LBBx+E0WhEcXEx1q5dC7vdjrS0NKxevdptHE06jplRADjZMiOd0WzLbPPmzV7t3NNwXNf7xowZ0++crXvvvReHDh3y6v8ddFw1nwLAwZYZ6UyExCpaljj5gi0zCgChIpAUA//UST6Z1Yz8hPuAK4CQbKqvzMGWGQWALlYACWlcNZ8kUzXHDGCYUUDILABhmPmEYUZyqR6lZZhRALBlpnXsZiTJVBV/gAsNU2AwzDSOk6ZJNnYzkt4YoLAARPPYMCPJVH994kLDJJnMVhnAMPMNuxlJMrbMSG9kFn8ADDPfcNI0SaZ2zIxhRrKxZaYHbJmRZKqWsgKg8BIwJFm45K5tfsJ9wEnTJJuqRYYBtsxIOpnFHwDDzDecNE2SqR4zYwEISRbBMNMBtsxIMvXLWfFPneRiAYguMMxILjWLDAPsZST5WACiA5w0TbKxZUZ6wzDTA3YzkmScZ0Z6wwIQPWABCEmmupqRBSAkWTjHzHSALTOSTG03IxcaJtnYzagLDDOSi92MpDcMMx1gAQjJpv56ZvxTJ7kYZnrAhhlJxpYZ6Q3nmekBx8xIMtULDbMAhCRjy0wPuGo+SSZUN8wYZiQXw0wP2DIjydRfAoZ/6iQXV83XAa6aT7KpHzPzz3EQDRRbZnrASdMkmap5ZhwvowBgAYgesGVGkqlaaJhdjBQAbJnpAsOM5FIzZsbiDwoEhpkOcNI0yeZUc15gmFEAcKFhPWA3I0mmaqFhjplRAPBK03rALCPJ1K2azzAj+VgAonFCCLbMSDqHmhMDW2YUABwz0zoGGQWAmpaZwmpGCgBNh1lRURGysrJgMplgMplgsViwc+fOHtsJITB37lwoioL33nuvz30KIfDrX/8ao0aNQlRUFLKzs/HFF1+4bVNXV4fc3FyYTCbExsYiLy8PjY2N3hy6/zDMKABYAEJ6o+kCkNGjR6OwsBCVlZU4cuQIpk+fjpycHJw6dcptuw0bNgy4HPh3v/sdNm7ciDfeeAMVFRUYNmwYZs+ejebmZtc2ubm5OHXqFHbv3o0PP/wQH3/8MZYtW+bNofsPKxkpAFQtZ8VuRgoA2VeaDvdm44cfftjt9xdffBFFRUU4dOgQ7rzzTgDA8ePHsX79ehw5cgSjRo3qc39CCGzYsAH/+q//ipycHADA22+/jcTERLz33ntYuHAhTp8+jV27duHw4cO47777AACvvfYa5s2bh5deegnJycnevAT12DKjAFA1aZoFIBQAuqlmdDgcKC4uRlNTEywWCwDg5s2beOyxx/CHP/wBSUlJ/e7jwoULqKmpQXZ2tus+s9mMqVOnory8HABQXl6O2NhYV5ABQHZ2NgwGAyoqKnrdt91uh81mc/vxB0YZBYKa5awUtsxIsjBFkT5Z3+swO3nyJKKjo2E0GrFixQqUlJQgMzMTALB69Wo88MADrlZWf2pqagAAiYmJbvcnJia6HqupqUFCQoLb4+Hh4YiPj3dt40lBQQHMZrPrJyUlZcCvsU/sZqQAULXQMAtASDLZxR+Al92MAJCRkYHjx4/DarVix44dePzxx7Fv3z6cO3cOe/bswbFjxwbjOL2Wn5+PNWvWuH632Wz+CTR2M1IAqPoKxQIQkkx28QfgQ5hFRkZi3LhxAIApU6bg8OHDePXVVxEVFYUvv/wSsbGxbtsvWLAA3/nOd1BWVtZjX51dkdeuXXMbX7t27Rruuece1za1tbVuz2tra0NdXV2fXZlGoxFGo9Hbl9c/hhkFgLqWGcOM5JJd/AH4YZ6Z0+mE3W7HL3/5S5w4cQLHjx93/QDAK6+8gi1btnh8blpaGpKSkvDRRx+57rPZbKioqHCNw1ksFtTX16OystK1zZ49e+B0OjF16lS1h+81wcu/UACwmpH0RPMts/z8fMydOxepqaloaGjA9u3bUVZWhtLSUiQlJXlsKaWmpiItLc31+4QJE1BQUID58+dDURQ8/fTT+M1vfoPx48cjLS0Nv/rVr5CcnIxHHnkEADBx4kTMmTMHS5cuxRtvvIHW1lasXLkSCxculF/JCIAlIBQIalpmXDWfZJNdyQh4GWa1tbVYsmQJqqurYTabkZWVhdLSUsycOXPA+zh79iysVqvr92eeeQZNTU1YtmwZ6uvr8e1vfxu7du3CkCFDXNts27YNK1euxIwZM2AwGLBgwQJs3LjRm0P3HxaAUABwzIz0JBAFIIoQoTEIZLPZYDabYbVaYTKZfN6Pw2pF3dv/4ccjI+rfH4f/HW6Ghfn03PDERETekernIyLqXcqQSCwcNVz1frw5b7Nm11uhkf2kMaoWGmbLjCQLRMuMYealEGnIksYIXmmadIRhpgcMMwoABydNk44EopqRn3JvMcwoANQVgPjrKIgGJhDVjAwzb7GakSQTULnQsIF/5iSX7KtMAwwzr3HMjGRTs8gwwDEzko9jZnrALCPJVC1lBbCakaRjmOmBYDcjyeVUO+jFMCPJWACiB+xmJMmcas8LDDOSTJcLDYcchhlJpmqRYYBhRtKFB2Bxa4aZl7hqPsmmdsyMV5om2ThmpgsMM5JL9SgtJ02TZAwzPWA3I0nGbkbSGxaA6AEnTZNkqkvz2c1IkrEARA/YMiPJ1H59UrieFUnGbkYd4AogJBtbZqQ37GbUA4YZSaZ2OSuOmZFsXGhYDxhmJJmqRYYBVjOSdGyZ6QHDjCRjNSPpDQtAdECwmpEkU7ucFVfNJ9lYAKIHbJiRZKoXGmYBCEnGbkZdYJqRXLwEDOkNW2Z6wG5Gkkx9NSP/zEkujpnpAQtASDKhspuRY2YkU7iiBOQzxzDzElfNJ9kcas8LHDMjiQLRxQgwzLzHlhlJxitNk54EovgDYJj5gGFGcjnUnBwYZCRZIMbLAIaZ91gAQpKp+sQxzEgytsz0gt2MJJmq0nyOl5FkgViXEWCYeY2r5pNsapazUliWT5KxAEQvGGYkmVBzbmA3I0nGbka9YJiRZKoWGmaYkWS6KAApKipCVlYWTCYTTCYTLBYLdu7c6Xp8+fLlSE9PR1RUFEaOHImcnBycOXOmz30qHRPsuv+sW7fOtc2YMWN6PF5YWOjlS/UThhlJpmrMjGFGkumiZTZ69GgUFhaisrISR44cwfTp05GTk4NTp04BAKZMmYItW7bg9OnTKC0thRACs2bNgsPR+4I81dXVbj9vvfUWFEXBggUL3LZ7/vnn3bZ76qmnfHi56nHVfJJNzSdOYQEISRaoMbNwbzZ++OGH3X5/8cUXUVRUhEOHDuHOO+/EsmXLXI+NGTMGv/nNbzBp0iRcvHgR6enpHveZlJTk9vv777+Phx56CGPHjnW7PyYmpse2AcGGGUmmrmXGkQSSKyJAX6B8/qQ7HA4UFxejqakJFoulx+NNTU3YsmUL0tLSkJKSMqB9Xrt2DX/5y1+Ql5fX47HCwkIMHz4ckydPxrp169DW1ubroavDbkaSTNVCw+xmJMkC1c3oVcsMAE6ePAmLxYLm5mZER0ejpKQEmZmZrsdff/11PPPMM2hqakJGRgZ2796NyMjIAe1769atiImJwQ9+8AO3+1etWoV7770X8fHxOHjwIPLz81FdXY2XX365133Z7XbY7XbX7zabzctX2gvBbkaSS9VCwwwzkixQBSCK8HLiVEtLCy5dugSr1YodO3Zg06ZN2LdvnyvQrFYramtrUV1djZdeeglXr17FgQMHMGTIkH73PWHCBMycOROvvfZan9u99dZbWL58ORobG2E0Gj1us3btWjz33HM97rdarTCZTAN4pZ41HTyIm5VHfX4+kbf+Yh6Jr4xRPj3XYDJhyIQMPx8RUe8ssdH4dlyMX/Zls9lgNpsHdN72Osy6y87ORnp6Ot58880ej7W0tCAuLg6bNm3CokWL+tzP/v37MW3aNBw/fhyTJk3qc9tTp07hrrvuwpkzZ5CR4fkP1VPLLCUlRXWYNR44gFtHj/n8fCJv/Z/Ykbgc6VuYhcWaYfzGN/x8RES9+3ZcDCyx0X7Zlzdh5nU3Y3dOp9MtNLoSQkAI0evjXW3evBlTpkzpN8gA4Pjx4zAYDEhISOh1G6PR2GurTRVeAoYkU7VqPrsZSTJdVDPm5+dj7ty5SE1NRUNDA7Zv346ysjKUlpbi/Pnz+POf/4xZs2Zh5MiRuHLlCgoLCxEVFYV58+a59jFhwgQUFBRg/vz5rvtsNhveffddrF+/vsf/WV5ejoqKCjz00EOIiYlBeXk5Vq9ejcWLFyMuLk7FS/cVw4zkUhdmrGYkuXQRZrW1tViyZAmqq6thNpuRlZWF0tJSzJw5E1VVVdi/fz82bNiAGzduIDExEdOmTcPBgwfdWlBnz56F1Wp1229xcTGEEB67Io1GI4qLi7F27VrY7XakpaVh9erVWLNmjY8vWSVWM5Jkqi7OyZYZSaabAhC98qbvtS8NZWVoPvlXPx4ZUd/+d1wSvo4YWEVwd+EjRiBybJqfj4iod38/MhYTo30b4+3Om/M2+yC8FRrZTxriZMuMdEQXy1kROGRG0nGhYdITXgJGLzhpmiTjclakJ2F6WDWfwG5Gko4LDZOe8ErTOsFV80k2XgKG9ITdjHrBhhlJxjEz0hMWgOgFuxlJMsFqRtIRXVxpmsACEJKOLTPSE3Yz6gVbZiSZmjEzFoCQbOxm1IkQWTCFNEJ1PwBL80ky3V1pOmRx1XySSFUXIwC1TyfyhgKFLTP9YJiRPKqWsgLYMiOpAlX8ATDMvMduRpJI1eVfACgsACGJAtUqAxhmXuOkaZJJ1YRpAGABCEkUqEpGgGHmPTbMSCKH2h2wZUYSMcz0hN2MJJHqlhnHzEii8AD2BPCT7i1OmiaJ1Jfms2VG8rAARE/YMiOJ1LbMWABCMrEAREc4aZpkUj/PjGFG8nDMTE84aZokUrXIMMBqRpKKYaYnbJmRROpbZvwTJ3kCdZVpgGHmA4YZyaN+zMxPB0I0AIG6yjTAMPMaJ02TTFxomPSE3Yx6wm5GkogFIKQnrGbUE2YZScTlrEhP2DLTE3YzkkRqP22cZ0YysQBEV9g0I3m4nBXpCVtmesIxM5KICw2TnrCaUUcEJ02TRELNyUEBrzRNUrEARE/YMiOJVFUzsouRJONCw3rCVfNJIqeakwO7GEkytsz0hC0zkkhNy0xhWT5JxgIQHeGq+SSTujEz/nmTXLoJs6KiImRlZcFkMsFkMsFisWDnzp2ux5cvX4709HRERUVh5MiRyMnJwZkzZ/rc5xNPPAFFUdx+5syZ47ZNXV0dcnNzYTKZEBsbi7y8PDQ2Nnpz6P7DAhCSSFU1IxtmJJlurjQ9evRoFBYWorKyEkeOHMH06dORk5ODU6dOAQCmTJmCLVu24PTp0ygtLYUQArNmzYLD0fef5Jw5c1BdXe36+dOf/uT2eG5uLk6dOoXdu3fjww8/xMcff4xly5Z5+VL9hC0zkkjVPDO2zEiyQBaAKEJlv1l8fDzWrVuHvLy8Ho+dOHECkyZNwrlz55Cenu7x+U888QTq6+vx3nvveXz89OnTyMzMxOHDh3HfffcBAHbt2oV58+bhypUrSE5OHtBx2mw2mM1mWK1WmEymgb04D75+4w2I1jafn0/kjU+iY3FiqG+fVyUqClF33+XnIyLq3RN/NwIjIyP8tj9vzts+f3VzOBwoLi5GU1MTLBZLj8ebmpqwZcsWpKWlISUlpc99lZWVISEhARkZGXjyySdx/fp112Pl5eWIjY11BRkAZGdnw2AwoKKiotd92u122Gw2tx9/4Kr5JJNTTQEIqxlJMl1VM548eRLR0dEwGo1YsWIFSkpKkJmZ6Xr89ddfR3R0NKKjo7Fz507s3r0bkZGRve5vzpw5ePvtt/HRRx/h3//937Fv3z7MnTvX1TVZU1ODhIQEt+eEh4cjPj4eNTU1ve63oKAAZrPZ9dNfoA4YuxlJIoeakwOrGUky3RSAAEBGRgaOHz+OiooKPPnkk3j88cfx+eefux7Pzc3FsWPHsG/fPnzjG9/Ao48+iubm5l73t3DhQnz/+9/H3XffjUceeQQffvghDh8+jLKyMp9eUKf8/HxYrVbXz+XLl1Xtz4VZRhKp6gdgy4wkC+RCw+HePiEyMhLjxo0D0F7wcfjwYbz66qt48803AcDVEho/fjzuv/9+xMXFoaSkBIsWLRrQ/seOHYsRI0bg3LlzmDFjBpKSklBbW+u2TVtbG+rq6pCUlNTrfoxGI4xGo7cvr09CCLbMSCoWgJCe6HptRqfTCbvd7vExIQSEEL0+7smVK1dw/fp1jBo1CgBgsVhQX1+PyspK1zZ79uyB0+nE1KlT1R28txhkJJmqSdNsmZFkuulmzM/Px8cff4yLFy/i5MmTyM/PR1lZGXJzc3H+/HkUFBSgsrISly5dwsGDB/GjH/0IUVFRmDdvnmsfEyZMQElJCQCgsbERv/jFL3Do0CFcvHgRH330EXJycjBu3DjMnj0bADBx4kTMmTMHS5cuxaeffooDBw5g5cqVWLhw4YArGf2GYUaSCS5nRTphgAJDAD9zXnUz1tbWYsmSJaiurobZbEZWVhZKS0sxc+ZMVFVVYf/+/diwYQNu3LiBxMRETJs2DQcPHnQr4Dh79iysVisAICwsDCdOnMDWrVtRX1+P5ORkzJo1Cy+88IJbF+G2bduwcuVKzJgxAwaDAQsWLMDGjRv99BZ4gZWMJJmqhYZZAEISBbJVBvhhnple+GOemWhpwddv/i8/HxlR7z6ITcCVyCE+PTds+HAY08f6+YiIPIsyGLDyjkS/7lPKPLNQFBKpT5qirprRX0dB1L9At8wYZt5gNyNJpqaaUWE1I0kUyHUZAYaZd0KjR5Y0RN1Cw2yakTxsmekJw4wkUzfPjGFG8jDMdETw8i8kmZq1GRlmJFMgV/8AGGZeYpiRXGpGaRUD/7xJnkC3zLxeziqksZsxJO27NRRNQkEY2gsEwxTR/i8AAwQMSvu3wh63gY7fO253e64CgbB+ntvSagCcgOjIJWFob3AN7LzBlhnJwzDTE1YzhpxWAfzf1siAtcmvNBghPC0DorRHlaJ0vy1ct8c0NWP0rQY4DYBQFAgFEAb3f52KAtH5eJftnJ3b9bZtx/1O5fZz2a0Z2hhmesKWWcipdYRrs3NZtHd69/xI3j6hRNxyIsbaIu+QugemongO0o7w6xqEvQXk7W0Htm9PIcyQlSOQV5kGGGZeCZHFUqiLWkdYYA9AxUdO9kLDihBQBACNFUp5E7JOj63UPlqu/YWrh7Du/DfYBPLCnADDzDsMs5BzzaHfP5EgPF/6RNMhaxhguPYZkB5arp5auAPoXlYTsuxm1BOGWcj5W4DDTM0nLpArmFP/FCGgOABAIMDt/y66d+t6Gkf13EqNSgkHhgfuyBlm3mABSEixOg24peoaLOq0f3fi9cxIJgHFCYT58DUqYnjbIBzPwHEiihc4ZhZaAt3FqPbTZmBpPkkUFuBZ0wwzbzDLQkqgiz+EypaVgYNmJFFYgCfpM8y8IdjNGEpqA94yUxlmfjoOooEwBLg2n593b7CbMWS0CeB6oFtmKp/PMTOSKSyMLTP9YJiFDC1MllbdMuNfN0kUxuuZ6QdXzQ8dgR4vA1ReZRqAgX/eJFGgC0BYmu8FJTIC4QkJgHBCOJ3tkzCdzo7fe7vt1NxkTepfoCsZAfUtM4UFICRRoLsZA/8XqyMRCQmI+/8e9em57aHW/iNEe9gJR3vgwdkRep33d7nddfv2x0SX57TfFg5He2CK3rfpebvb/+fal9N9++6hPNDbDkdviwfqQqCLPwB/lOYTyRPOMAsNisHgGsQIpe/LnkK8z9uewtfhUBfQPUK2722sLU7YhQEGiPZtO36E6LK6r3B2pE3n/V1/2u8PNJbmk0xsmVFQ02OIV1XbMOSvNSr30jUE4R526B6Ozi4h2XE/BMKbHYj4m93VuHV23BBCdGn03r4t4H5/gjESMRERcHbc7+zYxtnx3zo79uXs8pgQHfdrIIxJX8ICPMzMMCPqpsba7Ie9dFxBU+k9xPsLdyWyDUMaG30+gnExw2CK8O0M4xZsnYHX5bboEYy3t/cUjE7R8/ldQ7bz+e2/d73f/f9hyGoXuxmJNKbaL2HmByrP22p6GRUoUDqufK2l64G5BWhn6MFDSHYJwu4h29fzXUEM95Dt+X8wZLtjmBFpSKvDib812AN9GB3UnSCDcdV8BQpcFeAaen3dW59u3brwHLK3Q7Xr87u0UNEzZD23hG93L7t3KcsNWY6ZEWnINVuza2wq4NS2zPxzFDQAnSEbBmg6ZN26iNEzZF3B2OV2jxYqPIdsJMOMSDv8M16mDQGew0oaIDNkw8O5nBWRZlRpKcxUthCDsZuRtElRAj9Jn2FG1EWN9VagD+E2djOSXmhgTiM/70QdrLda0WR3BPowXNQ0zNqrEQN/gqEQwTAj0o5qLbXKVOJ4GckU6C5GwMswKyoqQlZWFkwmE0wmEywWC3bu3Ol6fPny5UhPT0dUVBRGjhyJnJwcnDlzptf9tba24tlnn8Xdd9+NYcOGITk5GUuWLEFVVZXbdmPGjIGiKG4/hYWFXr5Uor5pZn5ZJxVNM46XkVR6C7PRo0ejsLAQlZWVOHLkCKZPn46cnBycOnUKADBlyhRs2bIFp0+fRmlpKYQQmDVrFhwOz103N2/exNGjR/GrX/0KR48exX/913/h7Nmz+P73v99j2+effx7V1dWun6eeesqHl0vUO81VMqroZtTAuYVCiKKBrgBFCHUlU/Hx8Vi3bh3y8vJ6PHbixAlMmjQJ586dQ3p6+oD2d/jwYXzzm9/EV199hdTUVADtLbOnn34aTz/9tM/HabPZYDabYbVaYTKZfN4PBadWhxNFZV/CoaHL9TisdrRd963rc2hYGB6/Y4Sfj4jIszBTJKKnjvL7fr05b/s8ZuZwOFBcXIympiZYLJYejzc1NWHLli1IS0tDSkrKgPdrtVqhKApiY2Pd7i8sLMTw4cMxefJkrFu3Dm1tbb4eOlEPtQ12TQUZAFXdjBr4okwhRAtjZl5Pmj558iQsFguam5sRHR2NkpISZGZmuh5//fXX8cwzz6CpqQkZGRnYvXs3IiMjB7Tv5uZmPPvss1i0aJFbCq9atQr33nsv4uPjcfDgQeTn56O6uhovv/xyr/uy2+2w228vS2Sz2bx9qRRCNFWS30lNNSPHzEgmDYSZ192MLS0tuHTpEqxWK3bs2IFNmzZh3759rkCzWq2ora1FdXU1XnrpJVy9ehUHDhzAkCFD+txva2srFixYgCtXrqCsrKzPJuVbb72F5cuXo7GxEUaj0eM2a9euxXPPPdfjfnYzkif/57MqnKv1fYX6wdB2oxmOG76N48VFhGNhynA/HxGRZxEjojB0coLf9+tNN6PqMbPs7Gykp6fjzTff7PFYS0sL4uLisGnTJixatKjXfbS2tuLRRx/F+fPnsWfPHgwf3vcf4alTp3DXXXfhzJkzyMjI8LiNp5ZZSkoKw4w8+v8/Po9Gu7a6rtvqbsFR79uix8MjI/Do6Hg/HxGRZxEJQzF00ki/79ebMFO9NqPT6XQLja5Ex4UGe3scuB1kX3zxBfbu3dtvkAHA8ePHYTAYkJDQ+zcBo9HYa6uNqCtbc6vmggwAqxlJPzTwgfMqzPLz8zF37lykpqaioaEB27dvR1lZGUpLS3H+/Hn8+c9/xqxZszBy5EhcuXIFhYWFiIqKwrx581z7mDBhAgoKCjB//ny0trbihz/8IY4ePYoPP/wQDocDNTXtV/iNj49HZGQkysvLUVFRgYceeggxMTEoLy/H6tWrsXjxYsTFxfn33aCQVF2vsZJ8P9DAuYVCiO4KQGpra7FkyRJUV1fDbDYjKysLpaWlmDlzJqqqqrB//35s2LABN27cQGJiIqZNm4aDBw+6taDOnj0Lq9UKALh69So++OADAMA999zj9n/t3bsXDz74IIxGI4qLi7F27VrY7XakpaVh9erVWLNmjcqXTtROsyt/qGiZhfV7HWsiP9JA+azqMTO94Dwz6s2fPr2kvQnTANr+dhOOhhafnjs6KhIPj2LPBclhvMOEId/w/+dNyjwzomDQpqkrS3ejasws8N+UKYRoIEk0cAhEgaPJydId1BwV/7BJJi2MmfEzTyFNs+NlgMoVQAJ/cqEQwjAjCizNrZTvJxo4t1Ao0cAHjmFGIU2LhR8uHDMjnWA3I1EA2Zpb0dCswcnSndRcz8yPh0HUL4YZUeBoulUGsGVGuqGF65kxzChkBet4GaCJOawUStgyIwqc6noNVzKifW1TXxm4AghJxDEzogBxOIV2J0t34kLDpBca+MAxzCgk1TY0o02jk6X9QQPnFgohbJkRBUiVHlbKVzNpmt2MJBPDjCgwNF/JCLCakfSDYUYUGJpexsoPNHBuoRDC0nyiAGjQ+mTpTiwAIb3QwAeOYUYhRxddjFBXms8xM5KJBSBEARDMk6U7cciMpGKYEcmnm/EyFd2MvAQMyaIobJkRSedwCtTaND5ZuhMXGiY90ECQAfzMU4j5W4NdH5OlVQQZwNJ8kohhRiRflV66GFXSyPmFQoAWuhgBhhmFGL1UMqoZLwM4ZkYSMcyI5NNPJaPKbkY/HQVRf7QwYRrgZ55CSKO9DbZbrYE+jAFROWSmlS/LFAo00gvAMKOQUaOn8TLVYaaNEwwFP46ZEUmmny5GqG6acQUQkoZhRiRXtR4u++InbJiRNBwzI5LH4RSobdBRmKmuZvTPYRD1R9FIimjkMIgG19eNdrQ6dDBZuhPHzEgv2M1IJE9VvY6KPwCwNJ/0ggUgRBLpZrJ0B/Wl+do4wVAIYJgRyaOrSkaAY2akG2yZEUnSZG+DVSeTpW9T282ojRMMhQA9hllRURGysrJgMplgMplgsViwc+dO1+PLly9Heno6oqKiMHLkSOTk5ODMmTN97lMIgV//+tcYNWoUoqKikJ2djS+++MJtm7q6OuTm5sJkMiE2NhZ5eXlobGz05tAphOmuVQb4oQDEP4dB1C+NfNi8CrPRo0ejsLAQlZWVOHLkCKZPn46cnBycOnUKADBlyhRs2bIFp0+fRmlpKYQQmDVrFhwOR6/7/N3vfoeNGzfijTfeQEVFBYYNG4bZs2ejufn2CSg3NxenTp3C7t278eGHH+Ljjz/GsmXLfHzJFGp0czHOrlSEmQKFY2YkjVbWZlSEUDfUHB8fj3Xr1iEvL6/HYydOnMCkSZNw7tw5pKen93hcCIHk5GT8/Oc/xz//8z8DAKxWKxITE/HHP/4RCxcuxOnTp5GZmYnDhw/jvvvuAwDs2rUL8+bNw5UrV5CcnDyg47TZbDCbzbBarTCZTCpeMenN/z5yGVdv6CvQnE0taL1206fnhikKlqUl+PmIiDwbkhEHY+rgnFO9OW/7PGbmcDhQXFyMpqYmWCyWHo83NTVhy5YtSEtLQ0pKisd9XLhwATU1NcjOznbdZzabMXXqVJSXlwMAysvLERsb6woyAMjOzobBYEBFRUWvx2e322Gz2dx+KPQ4nQK1ttDqZtRIrw+FCN0WgJw8eRLR0dEwGo1YsWIFSkpKkJmZ6Xr89ddfR3R0NKKjo7Fz507s3r0bkZGRHvdVU1MDAEhMTHS7PzEx0fVYTU0NEhLcv2WGh4cjPj7etY0nBQUFMJvNrp/eApWC29/0Nlm6g5r+EhZ/kFR6DbOMjAwcP34cFRUVePLJJ/H444/j888/dz2em5uLY8eOYd++ffjGN76BRx991G38S5b8/HxYrVbXz+XLl6UfAwWeLos/VOKFOUkmrbTMwr19QmRkJMaNGwegveDj8OHDePXVV/Hmm28CgKslNH78eNx///2Ii4tDSUkJFi1a1GNfSUlJAIBr165h1KhRrvuvXbuGe+65x7VNbW2t2/Pa2tpQV1fner4nRqMRRqPR25dHQUZXl33pSkXTjFlGUmkkzFTPM3M6nbDb7R4fE0JACNHr42lpaUhKSsJHH33kus9ms6GiosI1DmexWFBfX4/KykrXNnv27IHT6cTUqVPVHj4FuSq9rpSvopsxzH9HQdQvrbTMvAqz/Px8fPzxx7h48SJOnjyJ/Px8lJWVITc3F+fPn0dBQQEqKytx6dIlHDx4ED/60Y8QFRWFefPmufYxYcIElJSUAAAURcHTTz+N3/zmN/jggw9w8uRJLFmyBMnJyXjkkUcAABMnTsScOXOwdOlSfPrppzhw4ABWrlyJhQsXDriSkULTzRY9TpZWj2X5JJVGwsyrbsba2losWbIE1dXVMJvNyMrKQmlpKWbOnImqqirs378fGzZswI0bN5CYmIhp06bh4MGDbgUcZ8+ehdVqdf3+zDPPoKmpCcuWLUN9fT2+/e1vY9euXRgyZIhrm23btmHlypWYMWMGDAYDFixYgI0bN/rh5VMw0/V4mYpuRo1M+6FQoZEPnOp5ZnrBeWah55Mvvsbhi3WBPgyfOG40o+2Gb2E8IjICPxod7+cjIvIs+v5RCIvxXLGulpR5ZkRap8uVPzqo+YqpkS/KFCo00s3IMKOg5HQK1DZ4LjzSB9/TjGNmJJMuC0CI9OLrRjta2pyBPgzfcQUQ0guNfOAYZhSUdF38AagLM64AQhKxZUY0iHQfZirSjGNmJBXDjGjw6Ln4A4C6S8BwzIwkURTtXAKGYUZB51aLA/U3dT5ZmiuAkB5o6IsTw4yCju5bZQAEqxlJDzTSKgMYZhSE9D9eBnUtM+2cXyjIaaX4A2CYURAK9TBjw4ykYZgRDQ6nU+CaHq8s7UdhLM0nSdgyIxokXzfpfLJ0JxXrWWno/ELBTkMfNoYZBZWaYOhiBFSuAKKdEwwFN7bMiAZJUIyXqcQ/apKGYUY0OKrr9V+WD7Rfpd1XYWyZkSwaKp1lmFHQaG514IbeJ0t3YjUj6YCioQTR0KEQqcMuxnZsmZE07GYk8r9g6WIEoK6a0Y+HQdQXFoAQDYKgapmpWgFEOycYCnIMMyL/EkKgJpgmS3PMjHSALTMiP/u6sSU4Jkv7AVcAIWkYZkT+FTSTpTuoKc3X0PmFgp2GPmwMMwoKwXDZFzeqVgDx32EQ9UUrF+YEGGYUJIKq+EMlLmdF0mjomxPDjHSvfbJ0S6APw7/UrADix8Mg6gsLQIj8qMbarObcrz0qX4zClhnJwjAj8p+qYBsvU0lDwxgU5NgyI/KjYKtkVFP8AQAGluaTLAwzIv8QQgRd8YeasnyALTOShy0zIj+53sTJ0t1xzIykYZgR+UfQdTECqrsZ2TIjaTT0YWOYka5VBdNK+Z1UdjNyzIxk0W03Y1FREbKysmAymWAymWCxWLBz504AQF1dHZ566ilkZGQgKioKqampWLVqFaxWa5/7VBTF48+6detc24wZM6bH44WFhT68XAo2QbW4sJ9o6PxCwU5DH7ZwbzYePXo0CgsLMX78eAghsHXrVuTk5ODYsWMQQqCqqgovvfQSMjMz8dVXX2HFihWoqqrCjh07et1ndXW12+87d+5EXl4eFixY4Hb/888/j6VLl7p+j4mJ8ebQKQg1tzpQ1xRkk6UB9dWMHDMjSbTUMvMqzB5++GG331988UUUFRXh0KFDyMvLw3/+53+6HktPT8eLL76IxYsXo62tDeHhnv+rpKQkt9/ff/99PPTQQxg7dqzb/TExMT22pdAWdJOlO6kdM/PPURD1T0Nh5vOYmcPhQHFxMZqammCxWDxuY7VaYTKZeg2y7q5du4a//OUvyMvL6/FYYWEhhg8fjsmTJ2PdunVoa2vz9dApSARbSX4noTLNNHR+oSCn25YZAJw8eRIWiwXNzc2Ijo5GSUkJMjMze2z39ddf44UXXsCyZcsGvO+tW7ciJiYGP/jBD9zuX7VqFe69917Ex8fj4MGDyM/PR3V1NV5++eVe92W322G3212/22y2AR8H6UONLQiLPwB2M5J+aCjMFOHlDM2WlhZcunQJVqsVO3bswKZNm7Bv3z63QLPZbJg5cybi4+PxwQcfICIiYkD7njBhAmbOnInXXnutz+3eeustLF++HI2NjTAajR63Wbt2LZ577rke93e2FknfhBAo2vcl7K3BN8fMeasNrdWNPj//ybGJfjwaot6ZslMHdV6jzWaD2Wwe0Hnb627GyMhIjBs3DlOmTEFBQQEmTZqEV1991fV4Q0MD5syZg5iYGJSUlAw4yPbv34+zZ8/iJz/5Sb/bTp06FW1tbbh48WKv2+Tn58Nqtbp+Ll++PKDjIH2oa2oJyiADoKo0n60ykkUxKJqaoO91N2N3TqfT1Z1ns9kwe/ZsGI1GfPDBBxgyZMiA97N582ZMmTIFkyZN6nfb48ePw2AwICEhoddtjEZjr6020r9gHS9TixNHSRoNTZgGvAyz/Px8zJ07F6mpqWhoaMD27dtRVlaG0tJS2Gw2zJo1Czdv3sQ777wDm83mGqcaOXIkwsLaa6wmTJiAgoICzJ8/37Vfm82Gd999F+vXr+/xf5aXl6OiogIPPfQQYmJiUF5ejtWrV2Px4sWIi4tT89pJx4I6zFRdZVpbJxgKXloq/gC8DLPa2losWbIE1dXVMJvNyMrKQmlpKWbOnImysjJUVFQAAMaNG+f2vAsXLmDMmDEAgLNnz/aYSF1cXAwhBBYtWtTj/zQajSguLsbatWtht9uRlpaG1atXY82aNd4cOgWZmqC+7IuKC3Nq6/xCwUxjX5y8LgDRK28GEknb7G0OFJV9GZxzzAA4GlvQVnvTp+cODQvD43eM8PMREfUUNjQc0d/6u0H9Pwa1AIQo0IJ2snQnFa+NLTOSRmMfNoYZ6U5Qj5cBrGYkfdDYmBnDjHQnKC/74if8gyZZtFYAws8+6UowXlm6B1Yzkh4wzIh8d+NmK5pbHYE+jMGloptRY8MYFMTYMiNSoTqoS/LVY8uMpGGYEfmuuj7Iuxih7kLT/IMmWdgyI1KhOhSuLK2qmtGPx0HUF4192BhmpBv2NgeuN9r73zCEhbGbkWTR2AAtw4x045rVHtyTpTupeI3aOr1QMGM3I5GPQqb4Q9UKINo6wVAQY5gR+aYmFMbLAI6ZkS6wZUbko6CfLO0HLM0naRhmRN670dSCWy1BPlm6E0vzSQfYMiPyQSi1ytRclYljZiQNw4zIeyFT/KGSxs4vFMQUluYTeS+UWmbquhm1dYKhIKaxb04MM9K8ljYnrje2BPowdEFj5xcKZhr7sDHMSPOu2ZrhDInZ0h04ZkY6wAIQIi+FVBcjwGpG0geGGZF3Qq74gxfnJB1gy4zISzUh1jITKtJMY+cXCmYaSw+NHQ6Ru/qbLbgZKpOlO6lqmfnvMIj6wpYZkReqQuBinD2oWWiYpfkkC+eZEQ1cjS3ExssAqEkzjX1ZpiDGlhmRF0KukhFgAQjpA8OMaGBaHU583RCCk6VZmk96wDAjGpgaa4hNlnbhpGnSNsWgQNHYZ41hRpoVMhfj7EZNfmvsyzIFKw1+0BhmpFlV9aFY/AGOmZHmaa34A2CYkYaF2mRpFxVNM/5BkxQMM6KBsd5sDb3J0n7AMTOSQdFgcmjwkIiAqlBbj7GTyoIXZhlJobEJ04CXYVZUVISsrCyYTCaYTCZYLBbs3LkTAFBXV4ennnoKGRkZiIqKQmpqKlatWgWr1drnPp944gkoiuL2M2fOHLdt6urqkJubC5PJhNjYWOTl5aGxsdHLl0p6ErpdjOqezhVASAoNdjOGe7Px6NGjUVhYiPHjx0MIga1btyInJwfHjh2DEAJVVVV46aWXkJmZia+++gorVqxAVVUVduzY0ed+58yZgy1btrh+NxqNbo/n5uaiuroau3fvRmtrK3784x9j2bJl2L59uzeHTzoSkpOl/UCD5xgKQlosAFGEUNevER8fj3Xr1iEvL6/HY++++y4WL16MpqYmhId7zs0nnngC9fX1eO+99zw+fvr0aWRmZuLw4cO47777AAC7du3CvHnzcOXKFSQnJw/oOG02G8xmM6xWK0wm08BeHAVEq8OJ1/d+GZJzzITDiZavbD4/PzdlBEwRYX48IqKewocPwbB7Ewf9//HmvO3zmJnD4UBxcTGamppgsVg8btN5AL0FWaeysjIkJCQgIyMDTz75JK5fv+56rLy8HLGxsa4gA4Ds7GwYDAZUVFT0uk+73Q6bzeb2Q/oQcleW9iOOmZEMWmyZedXNCAAnT56ExWJBc3MzoqOjUVJSgszMzB7bff3113jhhRewbNmyPvc3Z84c/OAHP0BaWhq+/PJL/Mu//Avmzp2L8vJyhIWFoaamBgkJCe4HHR6O+Ph41NTU9LrfgoICPPfcc96+PNKAkB0vA/wwZkYkQTCEWUZGBo4fPw6r1YodO3bg8ccfx759+9wCzWaz4Xvf+x4yMzOxdu3aPve3cOFC1+27774bWVlZSE9PR1lZGWbMmOHt4bnk5+djzZo1bseUkpLi8/5InqqQDjN1acZJ0ySDFltmXnczRkZGYty4cZgyZQoKCgowadIkvPrqq67HGxoaMGfOHMTExKCkpAQRERFe7X/s2LEYMWIEzp07BwBISkpCbW2t2zZtbW2oq6tDUlJSr/sxGo2uqsvOH9KHmlAtywdUt8w0eI6hYKTBD5rqeWZOpxN2ux1Ae+tn1qxZiIyMxAcffIAhQ4Z4vb8rV67g+vXrGDVqFADAYrGgvr4elZWVrm327NkDp9OJqVOnqj180hjrrVY02TlZ2lcGluaTDHqfZ5afn4+PP/4YFy9exMmTJ5Gfn4+ysjLk5ua6gqypqQmbN2+GzWZDTU0Nampq4HDcPjlNmDABJSUlAIDGxkb84he/wKFDh3Dx4kV89NFHyMnJwbhx4zB79mwAwMSJEzFnzhwsXboUn376KQ4cOICVK1di4cKFA65kJP2oDuVWGaC6m1GD5xgKQlrsZvRqzKy2thZLlixBdXU1zGYzsrKyUFpaipkzZ6KsrMxVXThu3Di35124cAFjxowBAJw9e9Y1kTosLAwnTpzA1q1bUV9fj+TkZMyaNQsvvPCC21yzbdu2YeXKlZgxYwYMBgMWLFiAjRs3qnndpFGhPr9MTZYp0N5lOShIaTDMVM8z0wvOM9OHP316KaSrGZ3NbWit8m11mzBFwbK0hP43JFJpyLhYGNPMg/7/SJlnRuRvrQ4n/tZgD/RhBJaK75ZcZJik0WDLjGFGmlHbYIfDGRIdBb3jhTlJB7Q4ZsYwI80I6ZJ8P2AlI0nDMCPq3deNLYgMNyDcoITu5F81F+YM0beM5FM0WDbr9QogRINl9p1JmH3n7d+FEHAKwCkEHE4B0XlbCAjn7dtOIeDs+L3H7Y59OJztt0WX2537djo79unp/3J22a7zOc6etx0dv4suzxHdn9/ldq9UdTNq7wRDQUqD35wYZqRZiqIgTGm/RlcwLQTvKaRdodzmRFtzW/v9DgGHw9keiI7On/bfuz7uFAIOh0CEAhhjhwFCQLT/B4AT7bfb07njfnTbpv0YXI+LLs8j8oRhRkT9hnS00cOd8gnRS/A5RXsL0inat3HcDsMej3sI0s7noKOF3dGMvR20nfvtL3wpYLRYAMIwIyKPFEXpWIZf0VxpSWfYucKxW5D2Gr6d93fZpkdr1BWYXYLU0W2b7q1fEWJByzAjIlKvPWjbw1Zrp1X31ij6aZn2Fq7oNXy7tly7BrArfHsLaOG/oGXLjIgoyLWf6DUctK6WJTx0BaNnYAq4Wqadz1eGaG8Qm2FGRBQiFIPi6iLUWtCqxXlmRESkewwzIiLSPYYZERHpHsOMiIh0j2FGRES6xzAjIiLdY5gREZHuMcyIiEj3GGZERKR7DDMiItI9hhkREekew4yIiHSPYUZERLrHMCMiIt0LmUvAiI6r0tlstgAfCRERDUTn+VoM4KqiIRNmDQ0NAICUlJQAHwkREXmjoaEBZrO5z20UMZDICwJOpxNVVVWIiYlpv+R6B5vNhpSUFFy+fBkmkymAR6hdfI/6xvenf3yP+sf3qCchBBoaGpCcnAyDoe9RsZBpmRkMBowePbrXx00mEz9A/eB71De+P/3je9Q/vkfu+muRdWIBCBER6R7DjIiIdC/kw8xoNOLf/u3fYDQaA30omsX3qG98f/rH96h/fI/UCZkCECIiCl4h3zIjIiL9Y5gREZHuMcyIiEj3GGZERKR7QR9mR48excyZMxEbG4vhw4dj2bJlaGxsdNvm8OHDmDFjBmJjYxEXF4fZs2fjs88+63O/zc3N+OlPf4rhw4cjOjoaCxYswLVr1wbzpQya/t6jP/7xj1AUxeNPbW1tr/sdM2ZMj+0LCwtlvCS/G6z3qK6uDrm5uTCZTIiNjUVeXl6Pz6ceDOTvDGh/n7KysjBkyBAkJCTgpz/9aZ/7ffDBB3u8nytWrBislzGoBus9CqZzkSoiiF29elXExcWJFStWiDNnzohPP/1UPPDAA2LBggWubRoaGkR8fLx44oknxJkzZ8Rf//pXsWDBApGYmChaWlp63feKFStESkqK+Oijj8SRI0fE/fffLx544AEZL8uvBvIe3bx5U1RXV7v9zJ49W3z3u9/tc9933HGHeP75592e19jYOMivyP8G8z2aM2eOmDRpkjh06JDYv3+/GDdunFi0aNEgvyL/Gsj7I4QQ69evF8nJyWLbtm3i3Llz4rPPPhPvv/9+n/v+7ne/K5YuXer2vlqt1sF8OYNiMN+jYDkXqRXUYfbmm2+KhIQE4XA4XPedOHFCABBffPGFEEKIw4cPCwDi0qVLvW7TXX19vYiIiBDvvvuu677Tp08LAKK8vHyQXs3gGMh71F1tba2IiIgQb7/9dp/7vuOOO8Qrr7ziz8MNiMF6jz7//HMBQBw+fNh1386dO4WiKOLq1av+ewGDbCDvT11dnYiKihL/8z//49W+v/vd74qf/exn/jzcgBis9yiYzkVqBXU3o91uR2RkpNsClVFRUQCATz75BACQkZGB4cOHY/PmzWhpacGtW7ewefNmTJw4EWPGjPG438rKSrS2tiI7O9t134QJE5Camory8vLBe0GDYCDvUXdvv/02hg4dih/+8If97r+wsBDDhw/H5MmTsW7dOrS1tfnnwCUarPeovLwcsbGxuO+++1z3ZWdnw2AwoKKiwk9HP/gG8v7s3r0bTqcTV69excSJEzF69Gg8+uijuHz5cr/737ZtG0aMGIG77roL+fn5uHnz5uC8kEE0WO9RMJ2L1ArqMJs+fTpqamqwbt06tLS04MaNG/jlL38JAKiurgYAxMTEoKysDO+88w6ioqIQHR2NXbt2YefOnQgP97wOc01NDSIjIxEbG+t2f2JiImpqagb1NfnbQN6j7jZv3ozHHnvM9cfYm1WrVqG4uBh79+7F8uXL8dvf/hbPPPOM31/DYBus96impgYJCQlu94WHhyM+Pl5Xn6OBvD/nz5+H0+nEb3/7W2zYsAE7duxAXV0dZs6ciZaWll73/dhjj+Gdd97B3r17kZ+fj//4j//A4sWLpbwufxqs9yiYzkVq6TLMfvnLX/Y62N75c+bMGdx5553YunUr1q9fj6FDhyIpKQlpaWlITEx0fUO6desW8vLy8K1vfQuHDh3CgQMHcNddd+F73/sebt26FeBX6jt/vkddlZeX4/Tp08jLy+v3GNasWYMHH3wQWVlZWLFiBdavX4/XXnsNdrt9MF6y17TwHmmZP98fp9OJ1tZWbNy4EbNnz8b999+PP/3pT/jiiy+wd+/eXo9h2bJlmD17Nu6++27k5ubi7bffRklJCb788ktZb0OftPAeUTtdXgLm5z//OZ544ok+txk7diyA9m92jz32GK5du4Zhw4ZBURS8/PLLrse3b9+Oixcvory83PWh2r59O+Li4vD+++9j4cKFPfadlJSElpYW1NfXu30junbtGpKSkvzzIlXy53vU1aZNm3DPPfdgypQpXh/T1KlT0dbWhosXLyIjI8Pr5/tboN+jpKSkHpWObW1tqKur08TnyJ/vz6hRowAAmZmZrueOHDkSI0aMwKVLlwZ8TFOnTgUAnDt3Dunp6d68nEER6PdID+ciaQI9aCfb5s2bxdChQ8WNGzeEEEJs3LhRJCUlCafT6dqmtbVVDBs2TGzbts3jPjoHXXfs2OG678yZM0Ez6Nr9PerU0NAgoqOjxWuvvebTft955x1hMBhEXV2dH44ysPzxHnUWgBw5csR1X2lpqe4KQDzp/v6cPXtWAHArbrh+/bowGAyitLR0wPv95JNPBADx2Wef+fuQpfPHexTs5yJvBH2Yvfbaa6KyslKcPXtW/P73vxdRUVHi1VdfdT1++vRpYTQaxZNPPik+//xz8de//lUsXrxYmM1mUVVVJYQQ4sqVKyIjI0NUVFS4nrdixQqRmpoq9uzZI44cOSIsFouwWCzSX58/9Pceddq0aZMYMmRIjxO4EEJUVFSIjIwMceXKFSGEEAcPHhSvvPKKOH78uPjyyy/FO++8I0aOHCmWLFky2C9nUAzGeyREe2n+5MmTRUVFhfjkk0/E+PHjdVeaL8TA3p+cnBxx5513igMHDoiTJ0+Kv//7vxeZmZmuKTDd/87OnTsnnn/+eXHkyBFx4cIF8f7774uxY8eKadOmSX99/jAY75EQwXUuUiPow+wf/uEfRHx8vIiMjBRZWVkeS6X/+7//W3zrW98SZrNZxMXFienTp7t9q7lw4YIAIPbu3eu679atW+Kf/umfRFxcnBg6dKiYP3++qK6ulvGS/G4g75EQQlgsFvHYY495fGzv3r0CgLhw4YIQQojKykoxdepUYTabxZAhQ8TEiRPFb3/7W9Hc3DxYL2NQDcZ7JET7N+9FixaJ6OhoYTKZxI9//GPR0NAwGC9hUA3k/bFareIf//EfRWxsrIiPjxfz5893mxLT/e/s0qVLYtq0aSI+Pl4YjUYxbtw48Ytf/EKX88yEGJz3SIjgOhepwUvAEBGR7umympGIiKgrhhkREekew4yIiHSPYUZERLrHMCMiIt1jmBERke4xzIiISPcYZkREpHsMMyIi0j2GGRER6R7DjIiIdI9hRkREuvf/ACKBSHXwxm8hAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "search_gdf.iloc[0:4].plot(\"s2:granule_id\", alpha=0.5)" + ] + }, + { + "cell_type": "code", + "execution_count": 192, + "metadata": {}, + "outputs": [], + "source": [ + "# # create a query searching for unique datastrip ids based on the above\n", + "q = {\"s2:granule_id\": {\"in\": search_gdf[\"s2:granule_id\"].iloc[0:4].unique().tolist()}}\n", + "\n", + "search_gdf2 = leafmap.stac_search(\n", + " url=url,\n", + " max_items=4,\n", + " collections=[collection],\n", + " bbox=bbox,\n", + " datetime=time_range,\n", + " query=q,\n", + " get_gdf=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 193, + "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", + " \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", + "
geometrycreatedplatformconstellationinstrumentseo:cloud_coverproj:epsgmgrs:utm_zonemgrs:latitude_bandmgrs:grid_square...s2:datastrip_ids2:granule_ids2:reflectance_conversion_factordatetimes2:sequenceearthsearch:s3_pathearthsearch:payload_idearthsearch:boa_offset_appliedprocessing:softwareupdated
0POLYGON ((-96.84938 33.42092, -96.87321 32.431...2023-08-20T04:40:37.325Zsentinel-2bsentinel-2[msi]0.0045393261414SQB...S2B_OPER_MSI_L2A_DS_2BPS_20230819T223356_S2023...S2B_OPER_MSI_L2A_TL_2BPS_20230819T223356_A0337...0.9751982023-08-19T17:14:46.266000Z0s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/Q...roda-sentinel2/workflow-sentinel2-to-stac/a707...True{'sentinel2-to-stac': '0.1.1'}2023-08-20T04:40:37.325Z
1POLYGON ((-96.81576 34.32217, -96.82780 34.277...2023-08-20T04:44:38.807Zsentinel-2bsentinel-2[msi]0.0769343261414SQC...S2B_OPER_MSI_L2A_DS_2BPS_20230819T223356_S2023...S2B_OPER_MSI_L2A_TL_2BPS_20230819T223356_A0337...0.9751982023-08-19T17:14:31.780000Z0s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/Q...roda-sentinel2/workflow-sentinel2-to-stac/2524...True{'sentinel2-to-stac': '0.1.1'}2023-08-20T04:44:38.807Z
2POLYGON ((-97.91284 34.33683, -97.92531 33.346...2023-08-18T06:10:25.042Zsentinel-2asentinel-2[msi]0.0064373261414SPC...S2A_OPER_MSI_L2A_DS_2APS_20230818T002256_S2023...S2A_OPER_MSI_L2A_TL_2APS_20230818T002256_A0425...0.9744892023-08-17T17:24:31.907000Z0s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/P...roda-sentinel2/workflow-sentinel2-to-stac/a898...True{'sentinel2-to-stac': '0.1.1'}2023-08-18T06:10:25.042Z
3POLYGON ((-97.06177 33.42442, -97.32332 32.437...2023-08-15T04:07:22.379Zsentinel-2asentinel-2[msi]0.0142113261414SPB...S2A_OPER_MSI_L2A_DS_2APS_20230815T002553_S2023...S2A_OPER_MSI_L2A_TL_2APS_20230815T002553_A0425...0.9734762023-08-14T17:14:49.390000Z0s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/P...roda-sentinel2/workflow-sentinel2-to-stac/ccee...True{'sentinel2-to-stac': '0.1.1'}2023-08-15T04:07:22.379Z
\n", + "

4 rows × 42 columns

\n", + "
" + ], + "text/plain": [ + " geometry \\\n", + "0 POLYGON ((-96.84938 33.42092, -96.87321 32.431... \n", + "1 POLYGON ((-96.81576 34.32217, -96.82780 34.277... \n", + "2 POLYGON ((-97.91284 34.33683, -97.92531 33.346... \n", + "3 POLYGON ((-97.06177 33.42442, -97.32332 32.437... \n", + "\n", + " created platform constellation instruments \\\n", + "0 2023-08-20T04:40:37.325Z sentinel-2b sentinel-2 [msi] \n", + "1 2023-08-20T04:44:38.807Z sentinel-2b sentinel-2 [msi] \n", + "2 2023-08-18T06:10:25.042Z sentinel-2a sentinel-2 [msi] \n", + "3 2023-08-15T04:07:22.379Z sentinel-2a sentinel-2 [msi] \n", + "\n", + " eo:cloud_cover proj:epsg mgrs:utm_zone mgrs:latitude_band \\\n", + "0 0.004539 32614 14 S \n", + "1 0.076934 32614 14 S \n", + "2 0.006437 32614 14 S \n", + "3 0.014211 32614 14 S \n", + "\n", + " mgrs:grid_square ... s2:datastrip_id \\\n", + "0 QB ... S2B_OPER_MSI_L2A_DS_2BPS_20230819T223356_S2023... \n", + "1 QC ... S2B_OPER_MSI_L2A_DS_2BPS_20230819T223356_S2023... \n", + "2 PC ... S2A_OPER_MSI_L2A_DS_2APS_20230818T002256_S2023... \n", + "3 PB ... S2A_OPER_MSI_L2A_DS_2APS_20230815T002553_S2023... \n", + "\n", + " s2:granule_id \\\n", + "0 S2B_OPER_MSI_L2A_TL_2BPS_20230819T223356_A0337... \n", + "1 S2B_OPER_MSI_L2A_TL_2BPS_20230819T223356_A0337... \n", + "2 S2A_OPER_MSI_L2A_TL_2APS_20230818T002256_A0425... \n", + "3 S2A_OPER_MSI_L2A_TL_2APS_20230815T002553_A0425... \n", + "\n", + " s2:reflectance_conversion_factor datetime s2:sequence \\\n", + "0 0.975198 2023-08-19T17:14:46.266000Z 0 \n", + "1 0.975198 2023-08-19T17:14:31.780000Z 0 \n", + "2 0.974489 2023-08-17T17:24:31.907000Z 0 \n", + "3 0.973476 2023-08-14T17:14:49.390000Z 0 \n", + "\n", + " earthsearch:s3_path \\\n", + "0 s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/Q... \n", + "1 s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/Q... \n", + "2 s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/P... \n", + "3 s3://sentinel-cogs/sentinel-s2-l2a-cogs/14/S/P... \n", + "\n", + " earthsearch:payload_id \\\n", + "0 roda-sentinel2/workflow-sentinel2-to-stac/a707... \n", + "1 roda-sentinel2/workflow-sentinel2-to-stac/2524... \n", + "2 roda-sentinel2/workflow-sentinel2-to-stac/a898... \n", + "3 roda-sentinel2/workflow-sentinel2-to-stac/ccee... \n", + "\n", + " earthsearch:boa_offset_applied processing:software \\\n", + "0 True {'sentinel2-to-stac': '0.1.1'} \n", + "1 True {'sentinel2-to-stac': '0.1.1'} \n", + "2 True {'sentinel2-to-stac': '0.1.1'} \n", + "3 True {'sentinel2-to-stac': '0.1.1'} \n", + "\n", + " updated \n", + "0 2023-08-20T04:40:37.325Z \n", + "1 2023-08-20T04:44:38.807Z \n", + "2 2023-08-18T06:10:25.042Z \n", + "3 2023-08-15T04:07:22.379Z \n", + "\n", + "[4 rows x 42 columns]" + ] + }, + "execution_count": 193, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "search_gdf2" + ] + }, + { + "cell_type": "code", + "execution_count": 194, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 194, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbMAAAGdCAYAAACYS53BAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABE20lEQVR4nO3dfVxU170/+s8ekBGFGcAIyE+I+FCUJJjE3JpJWxufH9qUWNv8NHhMeqgPOTU22tOknNdpj0mawqkxUdOG5N4Ya0609BfPIclNX8rxRDFGkSDRSI16Y9T4wCCNyAygDDCz7h/AyMDwMLOHNXvPfN6v1yiz957F3vu12d9Za33X2ooQQoCIiEjHDMHeASIiIrUYzIiISPcYzIiISPcYzIiISPcYzIiISPcYzIiISPcYzIiISPcYzIiISPcig70DsrhcLlRXVyM2NhaKogR7d4iIqB9CCDQ0NCAlJQUGQ991r7AJZtXV1UhNTQ32bhARkY8uXbqE0aNH97lN2ASz2NhYAO0nxWQyBXlviIioP3a7Hampqe77d1/CJph1Ni2aTCYGMyIiHRlI1xATQIiISPcYzIiISPcYzIiISPcYzIiISPcYzIiISPcYzIiISPcYzIiISPcYzIiISPcYzIiISPcYzIiISPcYzIiISPcYzIiISPcYzIiISPfCZtb8QGqtrkbLxUuAQYFiMAAGA6B0/dkAxaAAERHdlnvZpuN9f9u4l3X+TEREbgxmfmitqcGNiorg7kRnIFU6A5wCGCK6Lffy84C26RI0+9ima9DtLbB7lKfcCt4D2cbjZwZwIuoDg5k/hAj2HgAuAeFyAnACADSwR4NLUfoPwooBiOgnCCsGKBFegnAf27hr0N1+hkGBEhHR+zadAbn7Nt6CdkSE9+VENCAMZv7QQjALN0IATgHhdN1aFMTdkaJbAFciDHAIoNx+A0pHbdXQ8b8S0f6zQTFAiYiAYlAQYTBAMUTAEKFAiTKi5cHpiAAQqSgwKO3/R7hfuPU/FC/btK+PVBREAO7PRSoDe3Ai0WBjMPODcLn634hIrW4BXACwtbbCcKPZvclAr8S2oUNx7t5vBn4fARh6BD/A0Bn4OoMk2gNf1+DZ/pmO5ehleddgCs+g2iPY4tbvZIANPwxm/gj5KgFpVUObf1+khCEiwHtyiwsCLUJo6u+iM4D2FvzcP8Ozltkj2PYXhDuXw9s2nb9DQaSBwXWwMZj5g82MFCQNbU7/PhhmCTROIeCE9gJse4D03nzrraYZoXQNtl1rur3XYPur8UZ0+T2hhMHMH4LNjCSfUwg0Of2smYXYjUuPnELAqaEvwkq3YBkBINIwgGDb/XPd+1MNt2qq8UMikWwcIuV4GMz8oaELksJHo9MF4WdVQ0QMXjMj6ZOAQJsA2rrez/ys+PcmK3YYko3mwBbai/BqewgQwWBGQdDobxMjABFmzYykDZESWwR4hfvDxWBG8jU4GcxIXzQbzAoLC5GVlQWTyQSTyQSLxYLdu3f32E4Igfnz50NRFLz77ru9ltfa2opnnnkGd911F4YPH46UlBQsW7YM1dXVHtuNGTMGiqJ4vAoKCnzZ9QBjMCP5WlV8iWIwo2CIkNhV61Of2ejRo1FQUIAJEyZACIHt27cjOzsbx44dwx133OHebtOmTQMa53Hjxg18+umn+PWvf43Jkyfj+vXr+PnPf44f/OAHOHr0qMe2zz33HJYvX+5+Hxsb68uuBxbHmVEQqPoKpTCYkXwya2Y+BbOHHnrI4/0LL7yAwsJCHDlyxB3Mjh8/jo0bN+Lo0aMYNWpUn+WZzWbs3bvXY9kf/vAHfPOb38TFixeRlpbmXh4bG4vk5GRfdnfQsM+MgkHNVSciGMxIPs02M3bldDpRVFSEpqYmWCwWAO01rUcffRR//OMf/Q48NpsNiqIgLi7OY3lBQQFGjBiBe+65Bxs2bEBbW5u/u64egxkFgUvFdcdmRgoGmWPZfE7Nr6qqgsViQXNzM2JiYlBcXIzMzEwAwNq1a/HAAw8gOzvbr51pbm7GM888gyVLlsBkMrmXr1mzBvfeey8SEhJw+PBh5OXlwWq14qWXXuq1LIfDAYfD4X5vt9v92ievGMwoCFTVzAZxBhCi3gzRap8ZAGRkZOD48eOw2WzYtWsXHnvsMRw4cABnz57Fvn37cOzYMb92pLW1FY888giEECgsLPRYt27dOvfPWVlZiIqKwsqVK5Gfnw+j0ei1vPz8fDz77LN+7Uu/GMwoCNQFM9bMSD6ZNTNFqOwAmjVrFsaNG4fo6Ghs2bIFhi5/NE6nEwaDAd/5zndQWlraaxmdgezcuXPYt28fRowY0efvPHnyJO68806cPn0aGRkZXrfxVjNLTU2FzWbzqPX5o+F//gfNp06rKoPIV0dtTWjxc/YZ29jxuPrAtwO8R0R9ezgxHhOGD/X783a7HWazeUD3bdUzgLhcLjgcDjz77LP46U9/6rHurrvuwssvv9wjcaSrzkD2xRdfYP/+/f0GMqA9ycRgMCAxMbHXbYxGY6+1NrU4az4Fg0tN3YwT3VIQaDabMS8vD/Pnz0daWhoaGhqwc+dOlJaWoqSkBMnJyV6TPtLS0pCenu5+P3HiROTn52PhwoVobW3Fj370I3z66af44IMP4HQ6UVNTAwBISEhAVFQUysrKUF5ejunTpyM2NhZlZWVYu3Ytli5divj4eJWH7ye2MpLOsM+MgkGz48xqa2uxbNkyWK1WmM1mZGVloaSkBLNnzx5wGWfOnIHNZgMAXLlyBe+//z4A4O677/bYbv/+/XjwwQdhNBpRVFSE9evXw+FwID09HWvXrvXoR5OOfWYUBGomnmGfGQWDZmtmW7du9alwb91xXZeNGTOm3zFb9957L44cOeLT7x10nDWfgoAJIKQ3QyQ2b/MK9wdrZhQE/s6YDzCYUXDIzGbkFe4HzgBCsqlK/gD7zCg4dDEDSFjjrPkkmervT8xmpCCQmQDCYOYXBjOSS+0Vx2ZGCgbWzLSOzYwkGZsZSY8YzDSOg6ZJNrXfn1gzI9kMUJgAonmsmJFkbGYkvZFZKwMYzPzDZkaSjMGM9EZm8gfAYOYfDpomydQ8ywwAwGBGkrFmpgesmZFkrJmR3kRKHg7CK9wPHDRNsjGYkd7ITP4AGMz8w0HTJBmzGUlvhjCY6QBrZiSZ6nFmERxnRnIxAUQXGMxIX4Tkb8lETADRAQ6aJtlUt2yzmZEkYzDTAzYzkmTqE0DYzEhyMQFED5gAQpKpeZYZwAQQki+SfWY6wJoZSaY6mzGCf+okF5sZdYHBjORS3cyo8E+d5GIw0wEmgJBsHDRNesNgpgesmJFkaudmZDAj2TjOTA/YZ0aSqb7iGMxIMtbM9ICz5pNk6hNAmJpPcjGY6QFrZiQZ+8xIbzhrvg5w1nySTc3cjEJRAE5nRZKxZqYHHDRNkqn5/sRaGQUDE0D0gDUzkkzNFceprCgYWDPTBQYzkkvVFceaGQUBg5kOcNA0yaZmnBmbGSkYONGwHrCZkXSEwYyCgU+a1gPGMpJMTVsAgxkFAxNANE4IwZoZScdsRtIb9plpHQMZBYGa55kxmFEwaDqYFRYWIisrCyaTCSaTCRaLBbt37+6xnRAC8+fPh6IoePfdd/ssUwiB3/zmNxg1ahSio6Mxa9YsfPHFFx7b1NXVIScnByaTCXFxccjNzUVjY6Mvux44DGYUBMxmJL3RdALI6NGjUVBQgMrKShw9ehQzZsxAdnY2Tp486bHdpk2boAzwQH7/+99jy5YteO2111BeXo7hw4dj7ty5aG5udm+Tk5ODkydPYu/evfjggw/w0UcfYcWKFb7seuAwk5GCQM04fY4zo2CQ/aTpSF82fuihhzzev/DCCygsLMSRI0dwxx13AACOHz+OjRs34ujRoxg1alSf5QkhsGnTJvzrv/4rsrOzAQBvvfUWkpKS8O6772Lx4sU4deoU9uzZg4qKCtx3330AgFdeeQULFizAiy++iJSUFF8OQT3WzCgI1A2a5lRWJJ9ushmdTieKiorQ1NQEi8UCALhx4wYeffRR/PGPf0RycnK/ZZw/fx41NTWYNWuWe5nZbMbUqVNRVlYGACgrK0NcXJw7kAHArFmzYDAYUF5e3mvZDocDdrvd4xUIDGUUDOwzIz2JUJQBt84Fis9XeVVVFWJiYmA0GrFq1SoUFxcjMzMTALB27Vo88MAD7lpWf2pqagAASUlJHsuTkpLc62pqapCYmOixPjIyEgkJCe5tvMnPz4fZbHa/UlNTB3yMfWIzIwWBumxGNjOSXLKTPwAfmxkBICMjA8ePH4fNZsOuXbvw2GOP4cCBAzh79iz27duHY8eODcZ++iwvLw/r1q1zv7fb7YEJaGxmpCBQ18zImhnJJTv5A/AjmEVFRWH8+PEAgClTpqCiogKbN29GdHQ0vvzyS8TFxXlsv2jRInznO99BaWlpj7I6myKvXr3q0b929epV3H333e5tamtrPT7X1taGurq6PpsyjUYjjEajr4fXPwYzCgJV7QEMZiSZ7OQPIADjzFwuFxwOB371q1/hxIkTOH78uPsFAC+//DK2bdvm9bPp6elITk7Ghx9+6F5mt9tRXl7u7oezWCyor69HZWWle5t9+/bB5XJh6tSpanffZ4KPf6EgUPMMPdbMSDbN18zy8vIwf/58pKWloaGhATt37kRpaSlKSkqQnJzstaaUlpaG9PR09/uJEyciPz8fCxcuhKIoeOqpp/Db3/4WEyZMQHp6On79618jJSUFDz/8MABg0qRJmDdvHpYvX47XXnsNra2tWL16NRYvXiw/kxEAU0AoGNjMSHoiO5MR8DGY1dbWYtmyZbBarTCbzcjKykJJSQlmz5494DLOnDkDm83mfv/000+jqakJK1asQH19Pb797W9jz549GDp0qHubHTt2YPXq1Zg5cyYMBgMWLVqELVu2+LLrgcMEEAoCBjPSk2AkgChCTfuFjtjtdpjNZthsNphMJr/LcdpsqHvrPwK4Z0T9q7A1oVX490XqesYk/P3/kt8kT+ErdWgUFo8aobocX+7b/Mrmq/CI/aQxHGdGehKMmhmvch+FSUWWNEZdMyPHmZFcDGZ6wGBGQaDqsovgnznJFYxsRl7lvmIwoyBQ9XDOINxYKLwFI5uRwcxXzGYkydr7y9T0mbGZkeSS/ZRpgMHMZ+wzI9nUXnJMACHZ2GemB4xlJJnatgAGM5KNwUwP/BzrQ+Qvtd+fBBNASDImgOgBmxlJMtVN2wr/zEkuXU40HHYYzEgy1TUzNjOSZJFBeLo5r3IfcdZ8ko19ZqQ37DPTBQYzkkt1NiP7zEgyBjM9YDMjSaZmXkaA48xIPiaA6AEHTZNk7DMjvWECiB6wZkaSqb7kOJ0VScZmRh3gDCAkm/oEEDYzklxsZtQDBjOSTHWfGRNASDJONKwHDGYkGedmJL1hzUwPGMxIMiaAkN4wAUQHBLMZSTLVVxynsyLJmACiB6yYkWwqWwNYMyPZ2MyoC4xmJBdnzSe9Yc1MD9jMSJIxNZ/0hn1mesAEEJKM2YykJ5GKAoU1M+3jrPkkm/q5GflnTvIEo4kRYDDzHWtmJJmaK04oCsBgRhIFI/kDYDDzA4MZyaWqMYBp+SRZMPrLAAYz3zEBhCRTVTNjrYwkY81ML9jMSJKp6TNjMCPZgjEvI8Bg5jPOmk+yqbnkGMxINiaA6AWDGUmmqpmRA6ZJMjYz6gWDGUmmqpeWCSAkmS4SQAoLC5GVlQWTyQSTyQSLxYLdu3e7169cuRLjxo1DdHQ0Ro4ciezsbJw+fbrPMpWOAXbdXxs2bHBvM2bMmB7rCwoKfDzUAGEwI8nUNG2zmZFk00XNbPTo0SgoKEBlZSWOHj2KGTNmIDs7GydPngQATJkyBdu2bcOpU6dQUlICIQTmzJkDp9PZa5lWq9Xj9eabb0JRFCxatMhju+eee85juyeffNKPw1WPs+aTbMxmJD0JVp9ZpC8bP/TQQx7vX3jhBRQWFuLIkSO44447sGLFCve6MWPG4Le//S0mT56MCxcuYNy4cV7LTE5O9nj/3nvvYfr06Rg7dqzH8tjY2B7bBgUrZiSZumDGeRlJriEGHdTMunI6nSgqKkJTUxMsFkuP9U1NTdi2bRvS09ORmpo6oDKvXr2Kv/71r8jNze2xrqCgACNGjMA999yDDRs2oK2tzd9dV4fNjCSZmkHTTAAh2YLVzOhTzQwAqqqqYLFY0NzcjJiYGBQXFyMzM9O9/tVXX8XTTz+NpqYmZGRkYO/evYiKihpQ2du3b0dsbCx++MMfeixfs2YN7r33XiQkJODw4cPIy8uD1WrFSy+91GtZDocDDofD/d5ut/t4pL0QbGYkuVSNMwvSjYXCV7ASQBThY+9yS0sLLl68CJvNhl27duGNN97AgQMH3AHNZrOhtrYWVqsVL774Iq5cuYJDhw5h6NCh/ZY9ceJEzJ49G6+88kqf27355ptYuXIlGhsbYTQavW6zfv16PPvssz2W22w2mEymARypd02HD+NG5ad+f57IV6eabuJ6q38tEU3JKbgya06A94iod5a4GHw7PjYgZdntdpjN5gHdt31ug4iKisL48eMxZcoU5OfnY/Lkydi8ebN7vdlsxoQJEzBt2jTs2rULp0+fRnFxcb/lHjx4EGfOnMFPf/rTfredOnUq2tracOHChV63ycvLg81mc78uXbo0oOPrDwdNk2yqLjkmgJBkumlm7M7lcnk053UlhIAQotf1XW3duhVTpkzB5MmT+932+PHjMBgMSExM7HUbo9HYa61NFT4ChiRjNiPpiS6yGfPy8jB//nykpaWhoaEBO3fuRGlpKUpKSnDu3Dn85S9/wZw5czBy5EhcvnwZBQUFiI6OxoIFC9xlTJw4Efn5+Vi4cKF7md1uxzvvvIONGzf2+J1lZWUoLy/H9OnTERsbi7KyMqxduxZLly5FfHy8ikP3F4MZyeVS02fGBBCSTBfBrLa2FsuWLYPVaoXZbEZWVhZKSkowe/ZsVFdX4+DBg9i0aROuX7+OpKQkTJs2DYcPH/aoQZ05cwY2m82j3KKiIgghsGTJkh6/02g0oqioCOvXr4fD4UB6ejrWrl2LdevW+XnIKrGZkSTj3IykJ7pJANErXzoS+9JQWormqr8FcM+I+vZZww009THxQF9sY8fj6gPfDvAeEfXu+yPjMCkmOiBlDWoCSNgLj9hPGsI+M9ITXUxnRWCXGUnnUvMFisGMJOMjYPSCg6ZJMnWPgOF0ViRXhB5mzSewmZGkYwII6QmfNK0TnDWfZGOfGekJmxn1ghUzkkzd3Iz8Eye5mACiF2xmJMnYzEh6oosnTROYAELSqbniOAMIycZmRr1gzYwkU9PMyNR8ko3NjDoRJhOmkEaoCmTgk6ZJPt09aTpscdZ8kkjt5caHc5JMChTWzPSDwYzkUXu1sc+MZApW8gfAYOY7NjOSRKqDGfvMSKJg1coABjOfcdA0yaS2j5Z9ZiRTsDIZAQYz37FiRhKp/urEmhlJxGCmJ2xmJInYzEh6EhmkTEaAwcx3HDRNEqn97sRgRjIxAURPWDMjidSPM+OfOMnDBBAd4aBpkkltOwCDGcnEPjM94aBpkojNjKQnDGZ6wpoZScTprEhPgvWUaYDBzA8MZiSP6qstiNllFH6C9ZRpgMHMZxw0TTKxmZH0hM2MesJmRpJIfQIImxlJHmYz6gljGUnE1HzSE9bM9ITNjCQTmxlJR5gAoiusmpE8HGdGesKamZ6wz4wkUp/NyD9xkofZjDoiOGiaJFLz3UkoBoBPmiaJmACiJ6yZkURqEkDYxEiycaJhPeGs+SSRmoYAEcE/b5KLNTM9Yc2MJFJztbFmRrIxAURHOGs+yaSumZEDpkku3QSzwsJCZGVlwWQywWQywWKxYPfu3e71K1euxLhx4xAdHY2RI0ciOzsbp0+f7rPMxx9/HIqieLzmzZvnsU1dXR1ycnJgMpkQFxeH3NxcNDY2+rLrgcMEEJJI1XcnJn+QZLp50vTo0aNRUFCAyspKHD16FDNmzEB2djZOnjwJAJgyZQq2bduGU6dOoaSkBEIIzJkzB06ns89y582bB6vV6n79+c9/9lifk5ODkydPYu/evfjggw/w0UcfYcWKFT4eaoCwZkYSqemhZTMjyRbMBBBFqGw3S0hIwIYNG5Cbm9tj3YkTJzB58mScPXsW48aN8/r5xx9/HPX19Xj33Xe9rj916hQyMzNRUVGB++67DwCwZ88eLFiwAJcvX0ZKSsqA9tNut8NsNsNms8FkMg3s4Lz4+rXXIFrb/P48kS/O33TA6mjx67OOuHh89f3sAO8RUe8e/1+3YWTUkICV58t92++vbk6nE0VFRWhqaoLFYumxvqmpCdu2bUN6ejpSU1P7LKu0tBSJiYnIyMjAE088gWvXrrnXlZWVIS4uzh3IAGDWrFkwGAwoLy/vtUyHwwG73e7xCgTOmk8yqfmuyZoZyaarbMaqqirExMTAaDRi1apVKC4uRmZmpnv9q6++ipiYGMTExGD37t3Yu3cvoqKiei1v3rx5eOutt/Dhhx/i3//933HgwAHMnz/f3TRZU1ODxMREj89ERkYiISEBNTU1vZabn58Ps9nsfvUXUAeMzYwkEbMZSU90kwACABkZGTh+/DjKy8vxxBNP4LHHHsPnn3/uXp+Tk4Njx47hwIED+MY3voFHHnkEzc3NvZa3ePFi/OAHP8Bdd92Fhx9+GB988AEqKipQWlrq1wF1ysvLg81mc78uXbqkqjw3xjKSSNXlpjCYkVzBnGg40tcPREVFYfz48QDaEz4qKiqwefNmvP766wDgrglNmDAB999/P+Lj41FcXIwlS5YMqPyxY8fitttuw9mzZzFz5kwkJyejtrbWY5u2tjbU1dUhOTm513KMRiOMRqOvh9cnIQRrZiSVqkHTrJmRZLqem9HlcsHhcHhdJ4SAEKLX9d5cvnwZ165dw6hRowAAFosF9fX1qKysdG+zb98+uFwuTJ06Vd3O+4qBjCRTNc6MM4CQZLppZszLy8NHH32ECxcuoKqqCnl5eSgtLUVOTg7OnTuH/Px8VFZW4uLFizh8+DB+/OMfIzo6GgsWLHCXMXHiRBQXFwMAGhsb8ctf/hJHjhzBhQsX8OGHHyI7Oxvjx4/H3LlzAQCTJk3CvHnzsHz5cnzyySc4dOgQVq9ejcWLFw84kzFgGMxIMvaZkV4YoMAQxGDmUzNjbW0tli1bBqvVCrPZjKysLJSUlGD27Nmorq7GwYMHsWnTJly/fh1JSUmYNm0aDh8+7JHAcebMGdhsNgBAREQETpw4ge3bt6O+vh4pKSmYM2cOnn/+eY8mwh07dmD16tWYOXMmDAYDFi1ahC1btgToFPiAmYwkmapZ8zkDCEkUzFoZEIBxZnoRiHFmoqUFX7/+fwd4z4h6d7LxJmxt/o1rtI8Zi5pvTwvwHhF5F20wYPXtSQEtU8o4s3AUFlGfNEVNnxmnsyKZgl0zYzDzBZsZSTJVzYxMACGJgjkvI8Bg5pvwaJElDVGXAMI+M5KHNTM9YTAjyTjRMOkFg5mOCD7+hSTj3IykF8Gc/QNgMPMRgxnJxXFmpBfBrpn5PJ1VWGMzY1g6cHMYmoSCCAAKgAhFtP8PwAABg9L+rbDHz0DH+46fu31WgUBEP59talPQKhT3e6VjuwHdNxjMSCIGMz1hNmPYaRXA/9caFbQ6+eXGIXB6++0CMCjtQU9BewBU0L5M6QiGZmsLIhOb3JFPUTr+6fJ/j2UdG7Yv91znXoaOqAsv21HYYjDTE9bMwk6tMzKojcu9/m4FcEHpkiCi9PjA0FbAcEPyg2S7Bj50BsIuyxQvy9zBEV2CrOd2HssA70G26zJ0+1006IL5lGmAwcwnYTJZCnVR6wxueru6R8AE4e4iAIjOod6ix6qg6FKj7BFQvS3rEXgVdzlK12WKl2V9bNej3BATzAdzAgxmvmEwCztXncH+E/H/mlPYZ9ZOdLygxSDbWYtEzyZgeFnmZTsAUDoHLPcWZLsu6287P7GZUU8YzMLO34MczNRccUqQby7UD49abOcC9PJOoj6CbM8+0i5BVkQCI4K10wxmvmECSFixuQy4KYIXEFR/dwry9EKkU30E2b4uSUOs5P7Z7r8/qL9dZ9hnFl6C38SoDpsZSabIIF9vvNp9wVgWVoKe/KH2yxODGUnEiYb1RLCZMZzU6ri/DOiSFEAkAWtmesJmxrDRJoBrwa6ZqS2ANTOSiDUzPWEwCxvBHiwNQP31pvDPm+SJDPJMw7zafcBZ88NHsPvLgAA0M/LhnCRRZJCvN32na0mmRA1BZGIiIFwQLhfgEu3p+sLVHui8/tyxHemKFjIZ1afmM5iRPMFuZgz+X6yODElMRPz/fsSvz7YHtfaXEO3BTjjbAx5cHUGvc3mXn7tu375OdPlM+8/C6WwPmKL3bXr+3O33uctyeW7fPSgP9Gen0z1eRY+CnfwREGxmJImGsGYWHhSDwf1NOZxyzLwF8T5/9hZ8nU51AbpHkO17G1uLCw5hgAGifduOlxDiVoAWrltTJAnP7TqXqz53ar8IsJmRJGLNjEKaHoN4tdWOoX+rUVlK1yAIz2CH7sHR1SVIdiyHQGRzG0ZebYToKMPVETiF+3+41wl0Wd6xzdioYRgqIuAEOl4CLvfP7e+dAFwA2jr+71wWxIlPSKfYZ0akMTW25gCUonhOGOt9i75LiGpDbKP/iSjTh8TCJPz7vEuILkGv78DXPVjeWt+xjXJrG1ePz3iW7fRSbnuZ7WUzyGpXRJCzGRnMiLqxBiSYBYDaCUBU3FsMaH+69RD3EhWFBbDb1CWEO1i2/9974PMWdD0+pwwgEHf7TG/rGWTZZ0akKa1OF/7e4Aj2bnRQFwUMIThrvgEKojyWaCPIOkX3oNo98PUMqj1rtoBT8d4U3D1Q911rDk6QjWAwI9KOq/ZmuLSSgam2ZhaYvaABiIACzwZdP6NIgC+97kG2Z5Out2ZdL59R+m9iNkYymBFpRmD6y7QhyF0YpAEyg2ywE0D45Y2oi2otBTOVNcRQbGYkbVKU4E9szWBG1EWN7Wawd+EWNjOSXmjgCQ283ok62G62osnhDPZuuKmpmClQoLBmRrIwmBFph1VLtTKV2F9GMgW7iRHwMZgVFhYiKysLJpMJJpMJFosFu3fvdq9fuXIlxo0bh+joaIwcORLZ2dk4ffp0r+W1trbimWeewV133YXhw4cjJSUFy5YtQ3V1tcd2Y8aMgaIoHq+CggIfD5Wob5oZX9ZJRdWM/WUkld6C2ejRo1FQUIDKykocPXoUM2bMQHZ2Nk6ePAkAmDJlCrZt24ZTp06hpKQEQgjMmTMHTqf3ppsbN27g008/xa9//Wt8+umn+K//+i+cOXMGP/jBD3ps+9xzz8FqtbpfTz75pB+HS9Q7zWUyqmhm1MC9hcKIooGmAEWonM00ISEBGzZsQG5ubo91J06cwOTJk3H27FmMGzduQOVVVFTgm9/8Jr766iukpaUBaK+ZPfXUU3jqqaf83k+73Q6z2QybzQaTyeR3ORSaWp0uFJZ+CaeGHtfjtDnQds2/ps9hERF47PbbArxHRN5FmKIQM3VUwMv15b7td5+Z0+lEUVERmpqaYLFYeqxvamrCtm3bkJ6ejtTU1AGXa7PZoCgK4uLiPJYXFBRgxIgRuOeee7Bhwwa0tbX5u+tEPdQ2ODQVyACoambUwBdlCiNa6DPzedB0VVUVLBYLmpubERMTg+LiYmRmZrrXv/rqq3j66afR1NSEjIwM7N27F1FRUX2UeEtzczOeeeYZLFmyxCMKr1mzBvfeey8SEhJw+PBh5OXlwWq14qWXXuq1LIfDAYfj1rREdrvd10OlMKKplPxOarIZ2WdGMmkgmPnczNjS0oKLFy/CZrNh165deOONN3DgwAF3QLPZbKitrYXVasWLL76IK1eu4NChQxg6dGif5ba2tmLRokW4fPkySktL+6xSvvnmm1i5ciUaGxthNBq9brN+/Xo8++yzPZazmZG8+X8/q8bZ2sZg74aHtuvNcF73rx8vfkgkFqeOCPAeEXk35LZoDLsnMeDl+tLMqLrPbNasWRg3bhxef/31HutaWloQHx+PN954A0uWLOm1jNbWVjzyyCM4d+4c9u3bhxEj+v4jPHnyJO68806cPn0aGRkZXrfxVjNLTU1lMCOv/p+PzqHRoa2m67a6m3DW+zfp8YioIXhkdEKA94jIuyGJwzBs8siAl+tLMFM9N6PL5fIIGl11Piiwt/XArUD2xRdfYP/+/f0GMgA4fvw4DAYDEhN7/yZgNBp7rbURdWVvbtVcIAPAbEbSDw1ccD4Fs7y8PMyfPx9paWloaGjAzp07UVpaipKSEpw7dw5/+ctfMGfOHIwcORKXL19GQUEBoqOjsWDBAncZEydORH5+PhYuXIjW1lb86Ec/wqeffooPPvgATqcTNTXtT/hNSEhAVFQUysrKUF5ejunTpyM2NhZlZWVYu3Ytli5divj4+MCeDQpL1nqNpeQHgAbuLRRGdJcAUltbi2XLlsFqtcJsNiMrKwslJSWYPXs2qqurcfDgQWzatAnXr19HUlISpk2bhsOHD3vUoM6cOQObzQYAuHLlCt5//30AwN133+3xu/bv348HH3wQRqMRRUVFWL9+PRwOB9LT07F27VqsW7dO5aETtdPszB8qamYRap7zReQrDaTPqu4z0wuOM6Pe/PmTi9obMA2g7e834Gxo8euzo6Oj8NAotlyQHMbbTRj6jcBfb1LGmRGFgjZNPVm6G1V9ZsH/pkxhRAORRAO7QBQ8mhws3UHNXvEPm2TSQp8Zr3kKa5rtLwNUzgAS/JsLhREGM6Lg0txM+QGigXsLhRMNXHAMZhTWtJj44cY+M9IJNjMSBZG9uRUNzRocLN1JzfPMArgbRP1iMCMKHk3XygDWzEg3tPA8MwYzCluh2l8GaGIMK4UT1syIgsdar+FMRrTPbeovA2cAIYnYZ0YUJE6X0O5g6U6caJj0QgMXHIMZhaXahma0aXSwdCBo4N5CYYQ1M6IgqdbDTPlqBk2zmZFkYjAjCg7NZzICzGYk/WAwIwoOTU9jFQAauLdQGGFqPlEQNGh9sHQnJoCQXmjggmMwo7CjiyZGqEvNZ58ZycQEEKIgCOXB0p3YZUZSMZgRyaeb/jIVzYx8BAzJoiismRFJ53QJ1No1Pli6EycaJj3QQCADeM1TmPl7g0Mfg6VVBDKAqfkkEYMZkXzVemliVEkj9xcKA1poYgQYzCjM6CWTUU1/GcA+M5KIwYxIPv1kMqpsZgzQXhD1RwsDpgFe8xRGGh1tsN9sDfZuDIjKLjOtfFmmcKCRVgAGMwobNXrqL1MdzLRxg6HQxz4zIsn008QI1VUzzgBC0jCYEcll1cNjXwKEFTOShn1mRPI4XQK1DToKZqqzGQOzG0T9UTQSRTSyG0SD6+tGB1qdOhgs3Yl9ZqQXbGYkkqe6XkfJHwCYmk96wQQQIol0M1i6g/rUfG3cYCgMMJgRyaOrTEaAfWakG6yZEUnS5GiDTSeDpW9R28yojRsMhQE9BrPCwkJkZWXBZDLBZDLBYrFg9+7d7vUrV67EuHHjEB0djZEjRyI7OxunT5/us0whBH7zm99g1KhRiI6OxqxZs/DFF194bFNXV4ecnByYTCbExcUhNzcXjY2Nvuw6hTHd1cqAACSABGY3iPqlkYvNp2A2evRoFBQUoLKyEkePHsWMGTOQnZ2NkydPAgCmTJmCbdu24dSpUygpKYEQAnPmzIHT6ey1zN///vfYsmULXnvtNZSXl2P48OGYO3cumptv3YBycnJw8uRJ7N27Fx988AE++ugjrFixws9DpnCjm4dxdqUimClQ2GdG0mhlbkZFCHVdzQkJCdiwYQNyc3N7rDtx4gQmT56Ms2fPYty4cT3WCyGQkpKCX/ziF/jnf/5nAIDNZkNSUhL+9Kc/YfHixTh16hQyMzNRUVGB++67DwCwZ88eLFiwAJcvX0ZKSsqA9tNut8NsNsNms8FkMqk4YtKb/3P0Eq5c11dAczW1oPXqDb8+G6EoWJGeGOA9IvJuaEY8jGmDc0/15b7td5+Z0+lEUVERmpqaYLFYeqxvamrCtm3bkJ6ejtTUVK9lnD9/HjU1NZg1a5Z7mdlsxtSpU1FWVgYAKCsrQ1xcnDuQAcCsWbNgMBhQXl7e6/45HA7Y7XaPF4Ufl0ug1h5ezYwaafWhMKHbBJCqqirExMTAaDRi1apVKC4uRmZmpnv9q6++ipiYGMTExGD37t3Yu3cvoqKivJZVU1MDAEhKSvJYnpSU5F5XU1ODxETPb5mRkZFISEhwb+NNfn4+zGaz+9VbQKXQ9ne9DZbuoKa9hMkfJJVeg1lGRgaOHz+O8vJyPPHEE3jsscfw+eefu9fn5OTg2LFjOHDgAL7xjW/gkUce8ej/kiUvLw82m839unTpkvR9oODTZfKHSnwwJ8mklZpZpK8fiIqKwvjx4wG0J3xUVFRg8+bNeP311wHAXROaMGEC7r//fsTHx6O4uBhLlizpUVZycjIA4OrVqxg1apR7+dWrV3H33Xe7t6mtrfX4XFtbG+rq6tyf98ZoNMJoNPp6eBRidPXYl65UVM0Yy0gqjQQz1ePMXC4XHA6H13VCCAghel2fnp6O5ORkfPjhh+5ldrsd5eXl7n44i8WC+vp6VFZWurfZt28fXC4Xpk6dqnb3KcRV63WmfBXNjBGB2wuifmmlZuZTMMvLy8NHH32ECxcuoKqqCnl5eSgtLUVOTg7OnTuH/Px8VFZW4uLFizh8+DB+/OMfIzo6GgsWLHCXMXHiRBQXFwMAFEXBU089hd/+9rd4//33UVVVhWXLliElJQUPP/wwAGDSpEmYN28eli9fjk8++QSHDh3C6tWrsXjx4gFnMlJ4utGix8HS6jEtn6TSSDDzqZmxtrYWy5Ytg9VqhdlsRlZWFkpKSjB79mxUV1fj4MGD2LRpE65fv46kpCRMmzYNhw8f9kjgOHPmDGw2m/v9008/jaamJqxYsQL19fX49re/jT179mDo0KHubXbs2IHVq1dj5syZMBgMWLRoEbZs2RKAw6dQpuv+MhXNjBoZ9kPhQiMXnOpxZnrBcWbh5+MvvkbFhbpg74ZfnNeb0Xbdv2B8W9QQ/Hh0QoD3iMi7mPtHISLWe8a6WlLGmRFpnS5n/uig5iumRr4oU7jQSDMjgxmFJJdLoLbBe+KRPvgfzdhnRjLpMgGESC++bnSgpc0V7N3wH2cAIb3QyAXHYEYhSdfJH4C6YMYZQEgi1syIBpHug5mKaMY+M5KKwYxo8Og5+QOAukfAsM+MJFEU7TwChsGMQs7NFifqb+h8sDRnACE90NAXJwYzCjm6r5UBEMxmJD3QSK0MYDCjEKT//jKoq5lp5/5CIU4ryR8AgxmFoHAPZqyYkTQMZkSDw+USuKrHJ0sHUART80kS1syIBsnXTTofLN1JxXxWGrq/UKjT0MXGYEYhpSYUmhgBlTOAaOcGQ6GNNTOiQRIS/WUq8Y+apGEwIxoc1nr9p+UD7U9p91cEa2Yki4ZSZxnMKGQ0tzpxXe+DpTsxm5F0QNFQBNHQrhCpwybGdqyZkTRsZiQKvFBpYgSgLpsxgLtB1BcmgBANgpCqmamaAUQ7NxgKcQxmRIElhEBNKA2WZp8Z6QBrZkQB9nVjS2gMlg4AzgBC0jCYEQVWyAyW7qAmNV9D9xcKdRq62BjMKCSEwmNfPKiaASRwu0HUF608mBNgMKMQEVLJHypxOiuSRkPfnBjMSPfaB0u3BHs3AkvNDCAB3A2ivjABhCiAamzNau792qPyYBTWzEgWBjOiwKkOtf4ylTTUjUEhjjUzogAKtUxGNckfAGBgaj7JwmBGFBhCiJBL/lCTlg+wZkbysGZGFCDXmjhYujv2mZE0DGZEgRFyTYyA6mZG1sxIGg1dbAxmpGvVoTRTfieVzYzsMyNZdNvMWFhYiKysLJhMJphMJlgsFuzevRsAUFdXhyeffBIZGRmIjo5GWloa1qxZA5vN1meZiqJ4fW3YsMG9zZgxY3qsLygo8ONwKdSE1OTCAaKh+wuFOg1dbJG+bDx69GgUFBRgwoQJEEJg+/btyM7OxrFjxyCEQHV1NV588UVkZmbiq6++wqpVq1BdXY1du3b1WqbVavV4v3v3buTm5mLRokUey5977jksX77c/T42NtaXXacQ1NzqRF1TiA2WBtRnM7LPjCTRUs3Mp2D20EMPebx/4YUXUFhYiCNHjiA3Nxf/+Z//6V43btw4vPDCC1i6dCna2toQGen9VyUnJ3u8f++99zB9+nSMHTvWY3lsbGyPbSm8hdxg6U5q+8wCsxdE/dNQMPO7z8zpdKKoqAhNTU2wWCxet7HZbDCZTL0Gsu6uXr2Kv/71r8jNze2xrqCgACNGjMA999yDDRs2oK2tzd9dpxARain5nYTKaKah+wuFON3WzACgqqoKFosFzc3NiImJQXFxMTIzM3ts9/XXX+P555/HihUrBlz29u3bERsbix/+8Icey9esWYN7770XCQkJOHz4MPLy8mC1WvHSSy/1WpbD4YDD4XC/t9vtA94P0ocaewgmfwBsZiT90FAwU4SPIzRbWlpw8eJF2Gw27Nq1C2+88QYOHDjgEdDsdjtmz56NhIQEvP/++xgyZMiAyp44cSJmz56NV155pc/t3nzzTaxcuRKNjY0wGo1et1m/fj2effbZHss7a4ukb0IIFB74Eo7W0Btj5rrZhlZro9+ff2JsUgD3hqh3pllpgzqu0W63w2w2D+i+7XMzY1RUFMaPH48pU6YgPz8fkydPxubNm93rGxoaMG/ePMTGxqK4uHjAgezgwYM4c+YMfvrTn/a77dSpU9HW1oYLFy70uk1eXh5sNpv7denSpQHtB+lDXVNLSAYyAKpS81krI1kUg6KpAfo+NzN253K53M15drsdc+fOhdFoxPvvv4+hQ4cOuJytW7diypQpmDx5cr/bHj9+HAaDAYmJib1uYzQae621kf6Fan+ZWhw4StJoaMA04GMwy8vLw/z585GWloaGhgbs3LkTpaWlKCkpgd1ux5w5c3Djxg28/fbbsNvt7n6qkSNHIiKiPcdq4sSJyM/Px8KFC93l2u12vPPOO9i4cWOP31lWVoby8nJMnz4dsbGxKCsrw9q1a7F06VLEx8erOXbSsZAOZqqeMq2tGwyFLi0lfwA+BrPa2losW7YMVqsVZrMZWVlZKCkpwezZs1FaWory8nIAwPjx4z0+d/78eYwZMwYAcObMmR4DqYuKiiCEwJIlS3r8TqPRiKKiIqxfvx4OhwPp6elYu3Yt1q1b58uuU4ipCenHvqh4MKe27i8UyjT2xcnnBBC98qUjkbTN0eZEYemXoTnGDICzsQVttTf8+uywiAg8dvttAd4jop4ihkUi5lv/a1B/x6AmgBAFW8gOlu6k4thYMyNpNHaxMZiR7oR0fxnAbEbSB431mTGYke6E5GNfAoR/0CSL1hJAeO2TroTik6V7YDYj6QGDGZH/rt9oRXOrM9i7MbhUNDNqrBuDQhhrZkQqWEM6JV891sxIGgYzIv9Z60O8iRHqHjTNP2iShTUzIhWs4fBkaVXZjAHcD6K+aOxiYzAj3XC0OXGt0dH/hmEsgs2MJIvGOmgZzEg3rtocoT1YupOKY9TW7YVCGZsZifwUNskfqmYA0dYNhkIYgxmRf2rCob8MYJ8Z6QJrZkR+CvnB0gHA1HyShsGMyHfXm1pwsyXEB0t3Ymo+6QBrZkR+CKdamZqnMrHPjKRhMCPyXdgkf6iksfsLhTCFqflEvgunmpm6ZkZt3WAohGnsmxODGWleS5sL1xpbgr0buqCx+wuFMo1dbAxmpHlX7c1whcVo6Q7sMyMdYAIIkY/CqokRYDYj6QODGZFvwi75gw/nJB1gzYzIRzVhVjMTKqKZxu4vFMo0Fj00tjtEnupvtOBGuAyW7qSqZha43SDqC2tmRD6oDoOHcfagZqJhpuaTLBxnRjRwNfYw6y8DoCaaaezLMoUw1syIfBB2mYwAE0BIHxjMiAam1enC1w1hOFiaqfmkBwxmRANTYwuzwdJuHDRN2qYYFCgau9YYzEizwuZhnN2oid8a+7JMoUqDFxqDGWlWdX04Jn+AfWakeVpL/gAYzEjDwm2wtJuKqhn/oEkKBjOigbHdaA2/wdIBwD4zkkHRYOTQ4C4RAdXhNh9jJ5UJL4xlJIXGBkwDPgazwsJCZGVlwWQywWQywWKxYPfu3QCAuro6PPnkk8jIyEB0dDTS0tKwZs0a2Gy2Pst8/PHHoSiKx2vevHke29TV1SEnJwcmkwlxcXHIzc1FY2Ojj4dKehK+TYzqPs4ZQEgKDTYzRvqy8ejRo1FQUIAJEyZACIHt27cjOzsbx44dgxAC1dXVePHFF5GZmYmvvvoKq1atQnV1NXbt2tVnufPmzcO2bdvc741Go8f6nJwcWK1W7N27F62trfjJT36CFStWYOfOnb7sPulIWA6WDgAN3mMoBGkxAUQRQl27RkJCAjZs2IDc3Nwe69555x0sXboUTU1NiIz0Hjcff/xx1NfX49133/W6/tSpU8jMzERFRQXuu+8+AMCePXuwYMECXL58GSkpKQPaT7vdDrPZDJvNBpPJNLCDo6Bodbrw6v4vw3KMmXC60PKV3e/P56TeBtOQiADuEVFPkSOGYvi9SYP+e3y5b/vdZ+Z0OlFUVISmpiZYLBav23TuQG+BrFNpaSkSExORkZGBJ554AteuXXOvKysrQ1xcnDuQAcCsWbNgMBhQXl7ea5kOhwN2u93jRfoQdk+WDiD2mZEMWqyZ+dTMCABVVVWwWCxobm5GTEwMiouLkZmZ2WO7r7/+Gs8//zxWrFjRZ3nz5s3DD3/4Q6Snp+PLL7/Ev/zLv2D+/PkoKytDREQEampqkJiY6LnTkZFISEhATU1Nr+Xm5+fj2Wef9fXwSAPCtr8MCECfGZEEoRDMMjIycPz4cdhsNuzatQuPPfYYDhw44BHQ7HY7vve97yEzMxPr16/vs7zFixe7f77rrruQlZWFcePGobS0FDNnzvR199zy8vKwbt06j31KTU31uzySpzqsg5m6aMZB0ySDFmtmPjczRkVFYfz48ZgyZQry8/MxefJkbN682b2+oaEB8+bNQ2xsLIqLizFkyBCfyh87dixuu+02nD17FgCQnJyM2tpaj23a2tpQV1eH5OTkXssxGo3urMvOF+lDTbim5QOqa2YavMdQKNLghaZ6nJnL5YLD4QDQXvuZM2cOoqKi8P7772Po0KE+l3f58mVcu3YNo0aNAgBYLBbU19ejsrLSvc2+ffvgcrkwdepUtbtPGmO72YomBwdL+8vA1HySQe/jzPLy8vDRRx/hwoULqKqqQl5eHkpLS5GTk+MOZE1NTdi6dSvsdjtqampQU1MDp/PWzWnixIkoLi4GADQ2NuKXv/wljhw5ggsXLuDDDz9EdnY2xo8fj7lz5wIAJk2ahHnz5mH58uX45JNPcOjQIaxevRqLFy8ecCYj6Yc1nGtlgOpmRg3eYygEabGZ0ac+s9raWixbtgxWqxVmsxlZWVkoKSnB7NmzUVpa6s4uHD9+vMfnzp8/jzFjxgAAzpw54x5IHRERgRMnTmD79u2or69HSkoK5syZg+eff95jrNmOHTuwevVqzJw5EwaDAYsWLcKWLVvUHDdpVLiPL1MTyxRo77EcFKI0GMxUjzPTC44z04c/f3IxrLMZXc1taK32b3abCEXBivTE/jckUmno+DgY082D/nukjDMjCrRWpwt/b3AEezeCS8V3S04yTNJosGbGYEaaUdvggNMVFg0FveODOUkHtNhnxmBGmhHWKfkBwExGkobBjKh3Xze2ICrSgEiDEr6Df9U8mDNMTxnJp2gwbdbnGUCIBsvcO5Ix945b74UQcAnAJQScLgHR+bMQEK5bP7uEgKvjfY+fO8pwutp/Fl1+7izb5eoo09vvcnXZrvMzrp4/Ozveiy6fEd0/3+XnXqlqZtTeDYZClAa/OTGYkWYpioIIpf0ZXaE0Eby3IO0Oym0utDW3tS93CjidrvaA6Ox8tb/vut4lBJxOgSEKYIwbDggB0f4LABfaf26Pzh3L0W2b9n1wrxddPkfkDYMZEfUbpGOMXhbKJ0Qvgc8l2muQLtG+jfNWMOyx3ksg7fwMOmrYHdXYW4G2s9z+gi8FjRYTQBjMiMgrRVE6puFXNJda0hns3MGxWyDtNfh2Lu+yTY/aqDtgdgmkzm7bdK/9ijALtAxmRETqtQfa9mCrtduqZ20U/dRMewuu6DX4dq25dg3A7uDbW4AWgQu0rJkREYW49hu9hgOtu2YJL03B6BkwBdw1087PK0O114nNYEZEFCYUg+JuItRaoFWL48yIiEj3GMyIiEj3GMyIiEj3GMyIiEj3GMyIiEj3GMyIiEj3GMyIiEj3GMyIiEj3GMyIiEj3GMyIiEj3GMyIiEj3GMyIiEj3GMyIiEj3GMyIiEj3wuYRMKLjqXR2uz3Ie0JERAPReb8WA3iqaNgEs4aGBgBAampqkPeEiIh80dDQALPZ3Oc2ihhIyAsBLpcL1dXViI2NbX/kege73Y7U1FRcunQJJpMpiHuoXTxHfeP56R/PUf94jnoSQqChoQEpKSkwGPruFQubmpnBYMDo0aN7XW8ymXgB9YPnqG88P/3jOeofz5Gn/mpknZgAQkREusdgRkREuhf2wcxoNOLf/u3fYDQag70rmsVz1Deen/7xHPWP50idsEkAISKi0BX2NTMiItI/BjMiItI9BjMiItI9BjMiItK9kA9mn376KWbPno24uDiMGDECK1asQGNjo8c2FRUVmDlzJuLi4hAfH4+5c+fis88+67Pc5uZm/OxnP8OIESMQExODRYsW4erVq4N5KIOmv3P0pz/9CYqieH3V1tb2Wu6YMWN6bF9QUCDjkAJusM5RXV0dcnJyYDKZEBcXh9zc3B7Xpx4M5O8MaD9PWVlZGDp0KBITE/Gzn/2sz3IffPDBHudz1apVg3UYg2qwzlEo3YtUESHsypUrIj4+XqxatUqcPn1afPLJJ+KBBx4QixYtcm/T0NAgEhISxOOPPy5Onz4t/va3v4lFixaJpKQk0dLS0mvZq1atEqmpqeLDDz8UR48eFffff7944IEHZBxWQA3kHN24cUNYrVaP19y5c8V3v/vdPsu+/fbbxXPPPefxucbGxkE+osAbzHM0b948MXnyZHHkyBFx8OBBMX78eLFkyZJBPqLAGsj5EUKIjRs3ipSUFLFjxw5x9uxZ8dlnn4n33nuvz7K/+93viuXLl3ucV5vNNpiHMygG8xyFyr1IrZAOZq+//rpITEwUTqfTvezEiRMCgPjiiy+EEEJUVFQIAOLixYu9btNdfX29GDJkiHjnnXfcy06dOiUAiLKyskE6msExkHPUXW1trRgyZIh46623+iz79ttvFy+//HIgdzcoBuscff755wKAqKiocC/bvXu3UBRFXLlyJXAHMMgGcn7q6upEdHS0+J//+R+fyv7ud78rfv7znwdyd4NisM5RKN2L1ArpZkaHw4GoqCiPCSqjo6MBAB9//DEAICMjAyNGjMDWrVvR0tKCmzdvYuvWrZg0aRLGjBnjtdzKykq0trZi1qxZ7mUTJ05EWloaysrKBu+ABsFAzlF3b731FoYNG4Yf/ehH/ZZfUFCAESNG4J577sGGDRvQ1tYWmB2XaLDOUVlZGeLi4nDfffe5l82aNQsGgwHl5eUB2vvBN5Dzs3fvXrhcLly5cgWTJk3C6NGj8cgjj+DSpUv9lr9jxw7cdtttuPPOO5GXl4cbN24MzoEMosE6R6F0L1IrpIPZjBkzUFNTgw0bNqClpQXXr1/Hr371KwCA1WoFAMTGxqK0tBRvv/02oqOjERMTgz179mD37t2IjPQ+D3NNTQ2ioqIQFxfnsTwpKQk1NTWDekyBNpBz1N3WrVvx6KOPuv8Ye7NmzRoUFRVh//79WLlyJX73u9/h6aefDvgxDLbBOkc1NTVITEz0WBYZGYmEhARdXUcDOT/nzp2Dy+XC7373O2zatAm7du1CXV0dZs+ejZaWll7LfvTRR/H2229j//79yMvLw3/8x39g6dKlUo4rkAbrHIXSvUgtXQazX/3qV712tne+Tp8+jTvuuAPbt2/Hxo0bMWzYMCQnJyM9PR1JSUnub0g3b95Ebm4uvvWtb+HIkSM4dOgQ7rzzTnzve9/DzZs3g3yk/gvkOeqqrKwMp06dQm5ubr/7sG7dOjz44IPIysrCqlWrsHHjRrzyyitwOByDccg+08I50rJAnh+Xy4XW1lZs2bIFc+fOxf33348///nP+OKLL7B///5e92HFihWYO3cu7rrrLuTk5OCtt95CcXExvvzyS1mnoU9aOEfUTpePgPnFL36Bxx9/vM9txo4dC6D9m92jjz6Kq1evYvjw4VAUBS+99JJ7/c6dO3HhwgWUlZW5L6qdO3ciPj4e7733HhYvXtyj7OTkZLS0tKC+vt7jG9HVq1eRnJwcmINUKZDnqKs33ngDd999N6ZMmeLzPk2dOhVtbW24cOECMjIyfP58oAX7HCUnJ/fIdGxra0NdXZ0mrqNAnp9Ro0YBADIzM92fHTlyJG677TZcvHhxwPs0depUAMDZs2cxbtw4Xw5nUAT7HOnhXiRNsDvtZNu6dasYNmyYuH79uhBCiC1btojk5GThcrnc27S2torhw4eLHTt2eC2js9N1165d7mWnT58OmU7X7ueoU0NDg4iJiRGvvPKKX+W+/fbbwmAwiLq6ugDsZXAF4hx1JoAcPXrUvaykpER3CSDedD8/Z86cEQA8khuuXbsmDAaDKCkpGXC5H3/8sQAgPvvss0DvsnSBOEehfi/yRcgHs1deeUVUVlaKM2fOiD/84Q8iOjpabN682b3+1KlTwmg0iieeeEJ8/vnn4m9/+5tYunSpMJvNorq6WgghxOXLl0VGRoYoLy93f27VqlUiLS1N7Nu3Txw9elRYLBZhsVikH18g9HeOOr3xxhti6NChPW7gQghRXl4uMjIyxOXLl4UQQhw+fFi8/PLL4vjx4+LLL78Ub7/9thg5cqRYtmzZYB/OoBiMcyREe2r+PffcI8rLy8XHH38sJkyYoLvUfCEGdn6ys7PFHXfcIQ4dOiSqqqrE97//fZGZmekeAtP97+zs2bPiueeeE0ePHhXnz58X7733nhg7dqyYNm2a9OMLhME4R0KE1r1IjZAPZv/wD/8gEhISRFRUlMjKyvKaKv3f//3f4lvf+pYwm80iPj5ezJgxw+Nbzfnz5wUAsX//fveymzdvin/6p38S8fHxYtiwYWLhwoXCarXKOKSAG8g5EkIIi8UiHn30Ua/r9u/fLwCI8+fPCyGEqKysFFOnThVms1kMHTpUTJo0Sfzud78Tzc3Ng3UYg2owzpEQ7d+8lyxZImJiYoTJZBI/+clPRENDw2AcwqAayPmx2WziH//xH0VcXJxISEgQCxcu9BgS0/3v7OLFi2LatGkiISFBGI1GMX78ePHLX/5Sl+PMhBiccyREaN2L1OAjYIiISPd0mc1IRETUFYMZERHpHoMZERHpHoMZERHpHoMZERHpHoMZERHpHoMZERHpHoMZERHpHoMZERHpHoMZERHpHoMZERHpHoMZERHp3v8P6OZ+DhMPKesAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "search_gdf2.plot(\"mgrs:grid_square\", alpha=0.5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### plot to accentuate paved and non-paved divide\n" + ] + }, + { + "cell_type": "code", + "execution_count": 195, + "metadata": {}, + "outputs": [], + "source": [ + "search_gdf2_list = leafmap.stac_search(\n", + " url=url,\n", + " max_items=4,\n", + " collections=[collection],\n", + " bbox=bbox,\n", + " datetime=time_range,\n", + " query=q,\n", + " get_links=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 196, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e4a0f376aa60460c9f8243e90fbb43d5", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Map(center=[20, 0], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', 'zoom_out_text…" + ] + }, + "execution_count": 196, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m = leafmap.Map()\n", + "\n", + "for layer in search_gdf2_list:\n", + " m.add_stac_layer(layer, bands=[\"nir\", \"red\", \"green\"], name=layer.split(\"/\")[-1])\n", + "m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### download files for analysis\n" + ] + }, + { + "cell_type": "code", + "execution_count": 197, + "metadata": {}, + "outputs": [], + "source": [ + "def get_raster_band_urls(item: str, bands: list | None = None):\n", + " available_bands = leafmap.stac_bands(item)\n", + " stac = requests.get(item).json()\n", + " band_urls = {\n", + " x: stac[\"assets\"][x][\"href\"]\n", + " for x in available_bands\n", + " if stac[\"assets\"][x][\"href\"].startswith(\"http\")\n", + " }\n", + "\n", + " # if bands, only return bands in list\n", + " if bands:\n", + " band_urls = {x: band_urls[x] for x in bands if x in band_urls}\n", + "\n", + " return band_urls\n", + "\n", + "\n", + "def download_stac_layers(layers, out_dir, bands=None):\n", + " for layer in layers:\n", + " band_urls = get_raster_band_urls(layer, bands)\n", + " for band, url in band_urls.items():\n", + " print(url)\n", + " out_file = f\"{out_dir}/{layer.split('/')[-1]}_{band}.tif\"\n", + " leafmap.download_file(url, out_file, overwrite=False)\n", + "\n", + "\n", + "def get_stac_crs(item):\n", + " stac = requests.get(item).json()\n", + " return stac[\"properties\"][\"proj:epsg\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 198, + "metadata": {}, + "outputs": [], + "source": [ + "stac_crs = get_stac_crs(search_gdf2_list[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 199, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QB/2023/8/S2B_14SQB_20230819_0_L2A/AOT.tif\n", + "../Data/stac/dallas/S2B_14SQB_20230819_0_L2A_aot.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QB/2023/8/S2B_14SQB_20230819_0_L2A/B02.tif\n", + "../Data/stac/dallas/S2B_14SQB_20230819_0_L2A_blue.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QB/2023/8/S2B_14SQB_20230819_0_L2A/B01.tif\n", + "../Data/stac/dallas/S2B_14SQB_20230819_0_L2A_coastal.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QB/2023/8/S2B_14SQB_20230819_0_L2A/B03.tif\n", + "../Data/stac/dallas/S2B_14SQB_20230819_0_L2A_green.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QB/2023/8/S2B_14SQB_20230819_0_L2A/B08.tif\n", + "../Data/stac/dallas/S2B_14SQB_20230819_0_L2A_nir.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QB/2023/8/S2B_14SQB_20230819_0_L2A/B8A.tif\n", + "../Data/stac/dallas/S2B_14SQB_20230819_0_L2A_nir08.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QB/2023/8/S2B_14SQB_20230819_0_L2A/B09.tif\n", + "../Data/stac/dallas/S2B_14SQB_20230819_0_L2A_nir09.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QB/2023/8/S2B_14SQB_20230819_0_L2A/B04.tif\n", + "../Data/stac/dallas/S2B_14SQB_20230819_0_L2A_red.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QB/2023/8/S2B_14SQB_20230819_0_L2A/B05.tif\n", + "../Data/stac/dallas/S2B_14SQB_20230819_0_L2A_rededge1.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QB/2023/8/S2B_14SQB_20230819_0_L2A/B06.tif\n", + "../Data/stac/dallas/S2B_14SQB_20230819_0_L2A_rededge2.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QB/2023/8/S2B_14SQB_20230819_0_L2A/B07.tif\n", + "../Data/stac/dallas/S2B_14SQB_20230819_0_L2A_rededge3.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QB/2023/8/S2B_14SQB_20230819_0_L2A/SCL.tif\n", + "../Data/stac/dallas/S2B_14SQB_20230819_0_L2A_scl.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QB/2023/8/S2B_14SQB_20230819_0_L2A/B11.tif\n", + "../Data/stac/dallas/S2B_14SQB_20230819_0_L2A_swir16.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QB/2023/8/S2B_14SQB_20230819_0_L2A/B12.tif\n", + "../Data/stac/dallas/S2B_14SQB_20230819_0_L2A_swir22.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QB/2023/8/S2B_14SQB_20230819_0_L2A/TCI.tif\n", + "../Data/stac/dallas/S2B_14SQB_20230819_0_L2A_visual.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QB/2023/8/S2B_14SQB_20230819_0_L2A/WVP.tif\n", + "../Data/stac/dallas/S2B_14SQB_20230819_0_L2A_wvp.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QC/2023/8/S2B_14SQC_20230819_0_L2A/AOT.tif\n", + "../Data/stac/dallas/S2B_14SQC_20230819_0_L2A_aot.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QC/2023/8/S2B_14SQC_20230819_0_L2A/B02.tif\n", + "../Data/stac/dallas/S2B_14SQC_20230819_0_L2A_blue.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QC/2023/8/S2B_14SQC_20230819_0_L2A/B01.tif\n", + "../Data/stac/dallas/S2B_14SQC_20230819_0_L2A_coastal.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QC/2023/8/S2B_14SQC_20230819_0_L2A/B03.tif\n", + "../Data/stac/dallas/S2B_14SQC_20230819_0_L2A_green.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QC/2023/8/S2B_14SQC_20230819_0_L2A/B08.tif\n", + "../Data/stac/dallas/S2B_14SQC_20230819_0_L2A_nir.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QC/2023/8/S2B_14SQC_20230819_0_L2A/B8A.tif\n", + "../Data/stac/dallas/S2B_14SQC_20230819_0_L2A_nir08.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QC/2023/8/S2B_14SQC_20230819_0_L2A/B09.tif\n", + "../Data/stac/dallas/S2B_14SQC_20230819_0_L2A_nir09.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QC/2023/8/S2B_14SQC_20230819_0_L2A/B04.tif\n", + "../Data/stac/dallas/S2B_14SQC_20230819_0_L2A_red.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QC/2023/8/S2B_14SQC_20230819_0_L2A/B05.tif\n", + "../Data/stac/dallas/S2B_14SQC_20230819_0_L2A_rededge1.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QC/2023/8/S2B_14SQC_20230819_0_L2A/B06.tif\n", + "../Data/stac/dallas/S2B_14SQC_20230819_0_L2A_rededge2.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QC/2023/8/S2B_14SQC_20230819_0_L2A/B07.tif\n", + "../Data/stac/dallas/S2B_14SQC_20230819_0_L2A_rededge3.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QC/2023/8/S2B_14SQC_20230819_0_L2A/SCL.tif\n", + "../Data/stac/dallas/S2B_14SQC_20230819_0_L2A_scl.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QC/2023/8/S2B_14SQC_20230819_0_L2A/B11.tif\n", + "../Data/stac/dallas/S2B_14SQC_20230819_0_L2A_swir16.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QC/2023/8/S2B_14SQC_20230819_0_L2A/B12.tif\n", + "../Data/stac/dallas/S2B_14SQC_20230819_0_L2A_swir22.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QC/2023/8/S2B_14SQC_20230819_0_L2A/TCI.tif\n", + "../Data/stac/dallas/S2B_14SQC_20230819_0_L2A_visual.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/QC/2023/8/S2B_14SQC_20230819_0_L2A/WVP.tif\n", + "../Data/stac/dallas/S2B_14SQC_20230819_0_L2A_wvp.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PC/2023/8/S2A_14SPC_20230817_0_L2A/AOT.tif\n", + "../Data/stac/dallas/S2A_14SPC_20230817_0_L2A_aot.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PC/2023/8/S2A_14SPC_20230817_0_L2A/B02.tif\n", + "../Data/stac/dallas/S2A_14SPC_20230817_0_L2A_blue.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PC/2023/8/S2A_14SPC_20230817_0_L2A/B01.tif\n", + "../Data/stac/dallas/S2A_14SPC_20230817_0_L2A_coastal.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PC/2023/8/S2A_14SPC_20230817_0_L2A/B03.tif\n", + "../Data/stac/dallas/S2A_14SPC_20230817_0_L2A_green.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PC/2023/8/S2A_14SPC_20230817_0_L2A/B08.tif\n", + "../Data/stac/dallas/S2A_14SPC_20230817_0_L2A_nir.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PC/2023/8/S2A_14SPC_20230817_0_L2A/B8A.tif\n", + "../Data/stac/dallas/S2A_14SPC_20230817_0_L2A_nir08.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PC/2023/8/S2A_14SPC_20230817_0_L2A/B09.tif\n", + "../Data/stac/dallas/S2A_14SPC_20230817_0_L2A_nir09.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PC/2023/8/S2A_14SPC_20230817_0_L2A/B04.tif\n", + "../Data/stac/dallas/S2A_14SPC_20230817_0_L2A_red.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PC/2023/8/S2A_14SPC_20230817_0_L2A/B05.tif\n", + "../Data/stac/dallas/S2A_14SPC_20230817_0_L2A_rededge1.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PC/2023/8/S2A_14SPC_20230817_0_L2A/B06.tif\n", + "../Data/stac/dallas/S2A_14SPC_20230817_0_L2A_rededge2.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PC/2023/8/S2A_14SPC_20230817_0_L2A/B07.tif\n", + "../Data/stac/dallas/S2A_14SPC_20230817_0_L2A_rededge3.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PC/2023/8/S2A_14SPC_20230817_0_L2A/SCL.tif\n", + "../Data/stac/dallas/S2A_14SPC_20230817_0_L2A_scl.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PC/2023/8/S2A_14SPC_20230817_0_L2A/B11.tif\n", + "../Data/stac/dallas/S2A_14SPC_20230817_0_L2A_swir16.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PC/2023/8/S2A_14SPC_20230817_0_L2A/B12.tif\n", + "../Data/stac/dallas/S2A_14SPC_20230817_0_L2A_swir22.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PC/2023/8/S2A_14SPC_20230817_0_L2A/TCI.tif\n", + "../Data/stac/dallas/S2A_14SPC_20230817_0_L2A_visual.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PC/2023/8/S2A_14SPC_20230817_0_L2A/WVP.tif\n", + "../Data/stac/dallas/S2A_14SPC_20230817_0_L2A_wvp.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PB/2023/8/S2A_14SPB_20230814_0_L2A/AOT.tif\n", + "../Data/stac/dallas/S2A_14SPB_20230814_0_L2A_aot.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PB/2023/8/S2A_14SPB_20230814_0_L2A/B02.tif\n", + "../Data/stac/dallas/S2A_14SPB_20230814_0_L2A_blue.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PB/2023/8/S2A_14SPB_20230814_0_L2A/B01.tif\n", + "../Data/stac/dallas/S2A_14SPB_20230814_0_L2A_coastal.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PB/2023/8/S2A_14SPB_20230814_0_L2A/B03.tif\n", + "../Data/stac/dallas/S2A_14SPB_20230814_0_L2A_green.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PB/2023/8/S2A_14SPB_20230814_0_L2A/B08.tif\n", + "../Data/stac/dallas/S2A_14SPB_20230814_0_L2A_nir.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PB/2023/8/S2A_14SPB_20230814_0_L2A/B8A.tif\n", + "../Data/stac/dallas/S2A_14SPB_20230814_0_L2A_nir08.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PB/2023/8/S2A_14SPB_20230814_0_L2A/B09.tif\n", + "../Data/stac/dallas/S2A_14SPB_20230814_0_L2A_nir09.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PB/2023/8/S2A_14SPB_20230814_0_L2A/B04.tif\n", + "../Data/stac/dallas/S2A_14SPB_20230814_0_L2A_red.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PB/2023/8/S2A_14SPB_20230814_0_L2A/B05.tif\n", + "../Data/stac/dallas/S2A_14SPB_20230814_0_L2A_rededge1.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PB/2023/8/S2A_14SPB_20230814_0_L2A/B06.tif\n", + "../Data/stac/dallas/S2A_14SPB_20230814_0_L2A_rededge2.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PB/2023/8/S2A_14SPB_20230814_0_L2A/B07.tif\n", + "../Data/stac/dallas/S2A_14SPB_20230814_0_L2A_rededge3.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PB/2023/8/S2A_14SPB_20230814_0_L2A/SCL.tif\n", + "../Data/stac/dallas/S2A_14SPB_20230814_0_L2A_scl.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PB/2023/8/S2A_14SPB_20230814_0_L2A/B11.tif\n", + "../Data/stac/dallas/S2A_14SPB_20230814_0_L2A_swir16.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PB/2023/8/S2A_14SPB_20230814_0_L2A/B12.tif\n", + "../Data/stac/dallas/S2A_14SPB_20230814_0_L2A_swir22.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PB/2023/8/S2A_14SPB_20230814_0_L2A/TCI.tif\n", + "../Data/stac/dallas/S2A_14SPB_20230814_0_L2A_visual.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n", + "https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/14/S/PB/2023/8/S2A_14SPB_20230814_0_L2A/WVP.tif\n", + "../Data/stac/dallas/S2A_14SPB_20230814_0_L2A_wvp.tif already exists. Skip downloading. Set overwrite=True to overwrite.\n" + ] + } + ], + "source": [ + "download_stac_layers(\n", + " search_gdf2_list,\n", + " \"../Data/stac/dallas\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 200, + "metadata": {}, + "outputs": [], + "source": [ + "# mosaic files based on band name\n", + "\n", + "\n", + "def mosaic_by_band(\n", + " dir,\n", + " bands: list = [\n", + " \"red\",\n", + " \"blue\",\n", + " \"green\",\n", + " \"nir\",\n", + " \"coastal\",\n", + " \"nir08\",\n", + " \"nir09\",\n", + " \"rededge1\",\n", + " \"rededge2\",\n", + " \"rededge3\",\n", + " \"scl\",\n", + " \"swir16\",\n", + " \"swir22\",\n", + " ],\n", + " crs: str = None,\n", + "):\n", + " mosaics = {}\n", + " for band in bands:\n", + " files = glob.glob(f\"{dir}/*{band}.tif\")\n", + "\n", + " out_file = f\"{dir}/mosaic_{band}_.tif\"\n", + " raster_data = [rio.open(f) for f in files]\n", + "\n", + " mosaic, out_trans = merge(raster_data)\n", + " out_meta = raster_data[0].meta.copy()\n", + " out_meta.update(\n", + " {\n", + " \"driver\": \"GTiff\",\n", + " \"height\": mosaic.shape[1],\n", + " \"width\": mosaic.shape[2],\n", + " \"transform\": out_trans,\n", + " \"crs\": f\"epsg:{crs}\",\n", + " }\n", + " )\n", + "\n", + " with rio.open(out_file, \"w\", **out_meta) as dest:\n", + " dest.write(mosaic)\n", + "\n", + " mosaics[band] = out_file\n", + "\n", + " return mosaics" + ] + }, + { + "cell_type": "code", + "execution_count": 201, + "metadata": {}, + "outputs": [], + "source": [ + "mosaic_bands_all = mosaic_by_band(\"../Data/stac/dallas\", crs=stac_crs)" + ] + }, + { + "cell_type": "code", + "execution_count": 202, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'red': '../Data/stac/dallas/mosaic_red_.tif',\n", + " 'blue': '../Data/stac/dallas/mosaic_blue_.tif',\n", + " 'green': '../Data/stac/dallas/mosaic_green_.tif',\n", + " 'nir': '../Data/stac/dallas/mosaic_nir_.tif',\n", + " 'coastal': '../Data/stac/dallas/mosaic_coastal_.tif',\n", + " 'nir08': '../Data/stac/dallas/mosaic_nir08_.tif',\n", + " 'nir09': '../Data/stac/dallas/mosaic_nir09_.tif',\n", + " 'rededge1': '../Data/stac/dallas/mosaic_rededge1_.tif',\n", + " 'rededge2': '../Data/stac/dallas/mosaic_rededge2_.tif',\n", + " 'rededge3': '../Data/stac/dallas/mosaic_rededge3_.tif',\n", + " 'scl': '../Data/stac/dallas/mosaic_scl_.tif',\n", + " 'swir16': '../Data/stac/dallas/mosaic_swir16_.tif',\n", + " 'swir22': '../Data/stac/dallas/mosaic_swir22_.tif'}" + ] + }, + "execution_count": 202, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mosaic_bands_all" + ] + }, + { + "cell_type": "code", + "execution_count": 203, + "metadata": {}, + "outputs": [], + "source": [ + "nir = rio.open(mosaic_bands_all[\"nir\"]).read(1).astype(\"float32\")\n", + "red = rio.open(mosaic_bands_all[\"red\"]).read(1).astype(\"float32\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### calculate NDVI\n" + ] + }, + { + "cell_type": "code", + "execution_count": 204, + "metadata": {}, + "outputs": [], + "source": [ + "ndvi = (nir - red) / (nir + red)" + ] + }, + { + "cell_type": "code", + "execution_count": 205, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 206, + "metadata": {}, + "outputs": [], + "source": [ + "# fill nan with -2, outside of the range but not so far outside\n", + "ndvi[np.isnan(ndvi)] = -1.1" + ] + }, + { + "cell_type": "code", + "execution_count": 207, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.3274692 , 0.3274692 , 0.3274692 , ..., 0.7303442 ,\n", + " 0.76319176, 0.77117 ],\n", + " [ 0.3274692 , 0.3274692 , 0.3274692 , ..., 0.7558475 ,\n", + " 0.7614915 , 0.76831234],\n", + " [ 0.3274692 , 0.3274692 , 0.3274692 , ..., 0.75866497,\n", + " 0.7780662 , 0.7763371 ],\n", + " ...,\n", + " [-1.1 , -1.1 , -1.1 , ..., 0.28754655,\n", + " 0.29281315, 0.29498464],\n", + " [-1.1 , -1.1 , -1.1 , ..., 0.29339352,\n", + " 0.28872368, 0.29512894],\n", + " [-1.1 , -1.1 , -1.1 , ..., 0.29570553,\n", + " 0.2825 , 0.2805515 ]], dtype=float32)" + ] + }, + "execution_count": 207, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ndvi" + ] + }, + { + "cell_type": "code", + "execution_count": 208, + "metadata": {}, + "outputs": [], + "source": [ + "ndvi_mult = ndvi * 10 # to be able to visualize more easily" + ] + }, + { + "cell_type": "code", + "execution_count": 209, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 3.274692 , 3.274692 , 3.274692 , ..., 7.303442 ,\n", + " 7.6319175, 7.7117004],\n", + " [ 3.274692 , 3.274692 , 3.274692 , ..., 7.558475 ,\n", + " 7.614915 , 7.6831236],\n", + " [ 3.274692 , 3.274692 , 3.274692 , ..., 7.58665 ,\n", + " 7.780662 , 7.763371 ],\n", + " ...,\n", + " [-11. , -11. , -11. , ..., 2.8754654,\n", + " 2.9281316, 2.9498463],\n", + " [-11. , -11. , -11. , ..., 2.9339352,\n", + " 2.8872368, 2.9512894],\n", + " [-11. , -11. , -11. , ..., 2.9570553,\n", + " 2.825 , 2.8055148]], dtype=float32)" + ] + }, + "execution_count": 209, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ndvi_mult" + ] + }, + { + "cell_type": "code", + "execution_count": 210, + "metadata": {}, + "outputs": [], + "source": [ + "ndvi_image = leafmap.array_to_image(ndvi, source=mosaic_bands_all[\"nir\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 211, + "metadata": {}, + "outputs": [], + "source": [ + "ndvi_multi_image = leafmap.array_to_image(ndvi_mult, source=mosaic_bands_all[\"nir\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 212, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "edab90d716ee4f049184ac126784852b", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Map(center=[20, 0], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', 'zoom_out_text…" + ] + }, + "execution_count": 212, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m = leafmap.Map()\n", + "m.add_raster(ndvi_multi_image, layer_name=\"NDVI\", vmin=-10, vmax=10, cmap=\"PiYG\")\n", + "m" + ] + }, + { + "cell_type": "code", + "execution_count": 213, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([1.0000000e+00, 1.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 0.0000000e+00, 1.0000000e+00, 0.0000000e+00, 0.0000000e+00,\n", + " 1.0000000e+00, 1.0000000e+00, 3.0000000e+00, 2.3000000e+01,\n", + " 5.1000000e+01, 1.1500000e+02, 1.6900000e+02, 2.6000000e+02,\n", + " 3.7300000e+02, 5.4800000e+02, 7.8100000e+02, 1.1400000e+03,\n", + " 2.1220000e+03, 3.5260000e+03, 4.1920000e+03, 6.2560000e+03,\n", + " 9.0690000e+03, 1.1939000e+04, 1.4623000e+04, 2.5026000e+04,\n", + " 4.5841000e+04, 5.6715000e+04, 7.4501000e+04, 1.1549700e+05,\n", + " 1.5755500e+05, 2.3552200e+05, 3.2187900e+05, 4.0848100e+05,\n", + " 5.1592800e+05, 6.7813300e+05, 8.2407800e+05, 9.9234300e+05,\n", + " 1.1705310e+06, 1.2067610e+06, 9.5766400e+05, 7.1196200e+05,\n", + " 6.6800000e+05, 5.9224800e+05, 3.7914600e+05, 3.6113400e+05,\n", + " 3.6551800e+05, 5.3938400e+05, 7.7683000e+05, 9.7845800e+05,\n", + " 1.2501920e+06, 1.5167980e+06, 1.7806160e+06, 2.1710810e+06,\n", + " 2.8675480e+06, 4.1374880e+06, 5.4322190e+06, 6.7979120e+06,\n", + " 8.4053350e+06, 1.0018410e+07, 1.1420253e+07, 1.2634642e+07,\n", + " 1.3546920e+07, 1.4244805e+07, 1.4672281e+07, 1.4902141e+07,\n", + " 1.4911962e+07, 1.4706881e+07, 1.4355706e+07, 1.3886098e+07,\n", + " 1.3240877e+07, 1.2531240e+07, 1.1706225e+07, 1.0875790e+07,\n", + " 1.0081013e+07, 9.3683160e+06, 8.6952310e+06, 8.1088050e+06,\n", + " 7.6558640e+06, 7.2681420e+06, 6.9721730e+06, 6.7763610e+06,\n", + " 6.6717810e+06, 6.7203420e+06, 6.8979990e+06, 7.3243660e+06,\n", + " 7.9683900e+06, 8.6983460e+06, 8.8496920e+06, 6.5411760e+06,\n", + " 2.3320010e+06, 2.8137700e+05, 1.2821000e+04, 1.3060000e+03,\n", + " 1.6000000e+01, 6.0000000e+00, 6.0000000e+00, 2.6400000e+02]),\n", + " array([-0.99603176, -0.97607714, -0.95612258, -0.93616796, -0.91621339,\n", + " -0.89625877, -0.87630421, -0.85634959, -0.83639503, -0.8164404 ,\n", + " -0.79648578, -0.77653122, -0.7565766 , -0.73662204, -0.71666741,\n", + " -0.69671285, -0.67675823, -0.65680367, -0.63684905, -0.61689448,\n", + " -0.59693986, -0.57698524, -0.55703068, -0.53707606, -0.51712149,\n", + " -0.49716687, -0.47721228, -0.45725769, -0.4373031 , -0.4173485 ,\n", + " -0.39739391, -0.37743932, -0.35748473, -0.33753014, -0.31757554,\n", + " -0.29762095, -0.27766633, -0.25771174, -0.23775715, -0.21780255,\n", + " -0.19784796, -0.17789337, -0.15793878, -0.13798417, -0.11802958,\n", + " -0.09807499, -0.0781204 , -0.0581658 , -0.0382112 , -0.01825661,\n", + " 0.00169799, 0.02165258, 0.04160718, 0.06156177, 0.08151637,\n", + " 0.10147096, 0.12142555, 0.14138015, 0.16133475, 0.18128935,\n", + " 0.20124394, 0.22119853, 0.24115312, 0.26110771, 0.2810623 ,\n", + " 0.30101693, 0.32097152, 0.34092611, 0.3608807 , 0.38083529,\n", + " 0.40078989, 0.42074448, 0.44069907, 0.46065366, 0.48060825,\n", + " 0.50056285, 0.52051747, 0.54047203, 0.56042665, 0.58038121,\n", + " 0.60033584, 0.62029046, 0.64024502, 0.66019964, 0.6801542 ,\n", + " 0.70010883, 0.72006339, 0.74001801, 0.75997257, 0.77992719,\n", + " 0.79988182, 0.81983638, 0.839791 , 0.85974556, 0.87970018,\n", + " 0.89965475, 0.91960937, 0.93956393, 0.95951855, 0.97947311,\n", + " 0.99942774]),\n", + " )" + ] + }, + "execution_count": 213, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# get histogram of ndvi image values\n", + "\n", + "import matplotlib.pyplot as plt\n", + "\n", + "plt.hist(ndvi[ndvi != -1.1].ravel(), bins=100, color=\"red\", alpha=0.7)" + ] + }, + { + "cell_type": "code", + "execution_count": 214, + "metadata": {}, + "outputs": [], + "source": [ + "def categorize_np_array(array):\n", + "\n", + " cat_array = np.zeros(array.shape)\n", + " cat_array[array < 1] = 5\n", + " cat_array[array < 0.8] = 4\n", + " cat_array[array < 0.6] = 3\n", + " cat_array[array < 0.4] = 2\n", + " cat_array[array < 0.2] = 1\n", + "\n", + " return cat_array" + ] + }, + { + "cell_type": "code", + "execution_count": 215, + "metadata": {}, + "outputs": [], + "source": [ + "cat_ndvi = categorize_np_array(ndvi)" + ] + }, + { + "cell_type": "code", + "execution_count": 216, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[2., 2., 2., ..., 4., 4., 4.],\n", + " [2., 2., 2., ..., 4., 4., 4.],\n", + " [2., 2., 2., ..., 4., 4., 4.],\n", + " ...,\n", + " [1., 1., 1., ..., 2., 2., 2.],\n", + " [1., 1., 1., ..., 2., 2., 2.],\n", + " [1., 1., 1., ..., 2., 2., 2.]])" + ] + }, + "execution_count": 216, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cat_ndvi" + ] + }, + { + "cell_type": "code", + "execution_count": 217, + "metadata": {}, + "outputs": [], + "source": [ + "ndvi_image_cat = leafmap.array_to_image(cat_ndvi, source=mosaic_bands_all[\"nir\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 218, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "17747057b93a4a2d8c2d1487815c330b", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Map(center=[20, 0], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', 'zoom_out_text…" + ] + }, + "execution_count": 218, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "m = leafmap.Map()\n", + "m.add_raster(\n", + " ndvi_image_cat, layer_name=\"NDVI\", vmin=1, vmax=5, cmap=\"Set1\", draw_control=False\n", + ")\n", + "m.add_colormap(\n", + " \"Set1\",\n", + " label=\"ndvi\",\n", + " width=8.0,\n", + " height=0.4,\n", + " orientation=\"horizontal\",\n", + " vmin=1,\n", + " vmax=5,\n", + ")\n", + "\n", + "m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## k-means\n" + ] + }, + { + "cell_type": "code", + "execution_count": 219, + "metadata": {}, + "outputs": [], + "source": [ + "def resample_raster(in_file, out_file, upscale_factor=0.5):\n", + " with rio.open(in_file) as dataset:\n", + "\n", + " # resample data to target shape\n", + " data = dataset.read(\n", + " out_shape=(\n", + " dataset.count,\n", + " int(dataset.height * upscale_factor),\n", + " int(dataset.width * upscale_factor),\n", + " ),\n", + " resampling=rio.enums.Resampling.bilinear,\n", + " )\n", + "\n", + " # scale image transform\n", + " transform = dataset.transform * dataset.transform.scale(\n", + " (dataset.width / data.shape[-1]), (dataset.height / data.shape[-2])\n", + " )\n", + "\n", + " # update metadata\n", + " meta = dataset.meta.copy()\n", + " meta.update(\n", + " {\n", + " \"height\": data.shape[1],\n", + " \"width\": data.shape[2],\n", + " \"transform\": transform,\n", + " }\n", + " )\n", + "\n", + " with rio.open(out_file, \"w\", **meta) as dst:\n", + " dst.write(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 220, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "red (20982, 20976)\n", + "blue (20982, 20976)\n", + "green (20982, 20976)\n", + "nir (20982, 20976)\n", + "coastal (3497, 3496)\n", + "nir08 (10491, 10488)\n", + "nir09 (3497, 3496)\n", + "rededge1 (10491, 10488)\n", + "rededge2 (10491, 10488)\n", + "rededge3 (10491, 10488)\n", + "scl (10491, 10488)\n", + "swir16 (10491, 10488)\n", + "swir22 (10491, 10488)\n" + ] + } + ], + "source": [ + "for band in mosaic_bands_all.keys():\n", + " print(band, rio.open(mosaic_bands_all[band]).read(1).shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 221, + "metadata": {}, + "outputs": [], + "source": [ + "# set resampling ratio for each band- note that some are higher resolution than others and need a different scaling factor\n", + "bands_to_resample = {\n", + " \"red\": 0.25,\n", + " \"blue\": 0.25,\n", + " \"green\": 0.25,\n", + " \"nir\": 0.25,\n", + " \"nir08\": 0.5,\n", + " \"rededge1\": 0.5,\n", + " \"rededge2\": 0.5,\n", + " \"rededge3\": 0.5,\n", + " \"scl\": 0.5,\n", + " \"swir16\": 0.5,\n", + " \"swir22\": 0.5,\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 222, + "metadata": {}, + "outputs": [], + "source": [ + "# resample the bands so they are all smaller and uniform\n", + "for band, ratio in bands_to_resample.items():\n", + " resample_raster(\n", + " mosaic_bands_all[band], f\"../Data/stac/dallas/upscaled_{band}.tif\", ratio\n", + " )\n", + " mosaic_bands_all[f\"{band}\"] = f\"../Data/stac/dallas/upscaled_{band}.tif\"" + ] + }, + { + "cell_type": "code", + "execution_count": 223, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'red': '../Data/stac/dallas/upscaled_red.tif',\n", + " 'blue': '../Data/stac/dallas/upscaled_blue.tif',\n", + " 'green': '../Data/stac/dallas/upscaled_green.tif',\n", + " 'nir': '../Data/stac/dallas/upscaled_nir.tif',\n", + " 'coastal': '../Data/stac/dallas/mosaic_coastal_.tif',\n", + " 'nir08': '../Data/stac/dallas/upscaled_nir08.tif',\n", + " 'nir09': '../Data/stac/dallas/mosaic_nir09_.tif',\n", + " 'rededge1': '../Data/stac/dallas/upscaled_rededge1.tif',\n", + " 'rededge2': '../Data/stac/dallas/upscaled_rededge2.tif',\n", + " 'rededge3': '../Data/stac/dallas/upscaled_rededge3.tif',\n", + " 'scl': '../Data/stac/dallas/upscaled_scl.tif',\n", + " 'swir16': '../Data/stac/dallas/upscaled_swir16.tif',\n", + " 'swir22': '../Data/stac/dallas/upscaled_swir22.tif'}" + ] + }, + "execution_count": 223, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mosaic_bands_all" + ] + }, + { + "cell_type": "code", + "execution_count": 224, + "metadata": {}, + "outputs": [], + "source": [ + "# create a new dict with all bands excpct coastal\n", + "mosaic_bands_all_no_coastal = {\n", + " k: v for k, v in mosaic_bands_all.items() if k not in [\"coastal\", \"nir09\"]\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 225, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "red (5245, 5244)\n", + "blue (5245, 5244)\n", + "green (5245, 5244)\n", + "nir (5245, 5244)\n", + "nir08 (5245, 5244)\n", + "rededge1 (5245, 5244)\n", + "rededge2 (5245, 5244)\n", + "rededge3 (5245, 5244)\n", + "scl (5245, 5244)\n", + "swir16 (5245, 5244)\n", + "swir22 (5245, 5244)\n" + ] + } + ], + "source": [ + "for band in mosaic_bands_all_no_coastal.keys():\n", + " print(band, rio.open(mosaic_bands_all_no_coastal[band]).read(1).shape)\n", + "\n", + "mosaic_bands_all_no_coastal = np.stack(\n", + " [\n", + " rio.open(mosaic_bands_all_no_coastal[band]).read(1)\n", + " for band in mosaic_bands_all_no_coastal.keys()\n", + " ],\n", + " axis=-1,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 226, + "metadata": {}, + "outputs": [], + "source": [ + "reshaped_img = reshape_as_image(mosaic_bands_all_no_coastal)" + ] + }, + { + "cell_type": "code", + "execution_count": 227, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(5244, 11, 5245)" + ] + }, + "execution_count": 227, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "reshaped_img.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 228, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(5245, 5244, 11)" + ] + }, + "execution_count": 228, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mosaic_bands_all_no_coastal.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 229, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.cluster import KMeans\n", + "\n", + "rows, cols, bands = mosaic_bands_all_no_coastal.shape\n", + "\n", + "k = 10 # num of clusters\n", + "\n", + "kmeans_predictions = KMeans(n_clusters=k, random_state=0).fit(\n", + " mosaic_bands_all_no_coastal.reshape(rows * cols, bands)\n", + ")\n", + "\n", + "kmeans_predictions_2d = kmeans_predictions.labels_.reshape(rows, cols)" + ] + }, + { + "cell_type": "code", + "execution_count": 230, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ebb171fef028483ead4e1332fc935483", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Map(center=[20, 0], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', 'zoom_out_text…" + ] + }, + "execution_count": 230, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# plot prediction results\n", + "\n", + "m = leafmap.Map()\n", + "m.add_raster(\n", + " leafmap.array_to_image(kmeans_predictions_2d, source=mosaic_bands_all[\"red\"]),\n", + " layer_name=\"KMeans\",\n", + " colormap=\"Set1\",\n", + " draw_control=False,\n", + ")\n", + "\n", + "# add a legend\n", + "m.add_colormap(\n", + " \"Set1\",\n", + " label=\"KMeans\",\n", + " width=8.0,\n", + " height=0.4,\n", + " orientation=\"horizontal\",\n", + " vmin=0,\n", + " vmax=9,\n", + ")\n", + "\n", + "m" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## classify using samples\n" + ] + }, + { + "cell_type": "code", + "execution_count": 231, + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd" + ] + }, + { + "cell_type": "code", + "execution_count": 232, + "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", + "
typegeometry
0NoneNone
1golfPOLYGON ((-96.90516 33.04001, -96.90676 33.038...
2wetlandPOLYGON ((-96.88824 33.05067, -96.88980 33.049...
3industrialPOLYGON ((-96.91752 33.05633, -96.91691 33.055...
4deep waterPOLYGON ((-96.93657 33.07736, -96.93907 33.074...
.........
74urbanPOLYGON ((-96.66727 32.79627, -96.66489 32.795...
75urbanPOLYGON ((-96.66537 32.79916, -96.66544 32.797...
76urbanPOLYGON ((-96.67495 32.79557, -96.67499 32.794...
77urbanPOLYGON ((-96.67810 32.79755, -96.67817 32.796...
78roadwayPOLYGON ((-96.68573 32.79747, -96.68570 32.797...
\n", + "

79 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " type geometry\n", + "0 None None\n", + "1 golf POLYGON ((-96.90516 33.04001, -96.90676 33.038...\n", + "2 wetland POLYGON ((-96.88824 33.05067, -96.88980 33.049...\n", + "3 industrial POLYGON ((-96.91752 33.05633, -96.91691 33.055...\n", + "4 deep water POLYGON ((-96.93657 33.07736, -96.93907 33.074...\n", + ".. ... ...\n", + "74 urban POLYGON ((-96.66727 32.79627, -96.66489 32.795...\n", + "75 urban POLYGON ((-96.66537 32.79916, -96.66544 32.797...\n", + "76 urban POLYGON ((-96.67495 32.79557, -96.67499 32.794...\n", + "77 urban POLYGON ((-96.67810 32.79755, -96.67817 32.796...\n", + "78 roadway POLYGON ((-96.68573 32.79747, -96.68570 32.797...\n", + "\n", + "[79 rows x 2 columns]" + ] + }, + "execution_count": 232, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# use a random forest classifier to classify the image using samples from the geojson dataset\n", + "samples = gpd.read_file(\"./data.geojson\")\n", + "\n", + "samples" + ] + }, + { + "cell_type": "code", + "execution_count": 233, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.ensemble import RandomForestClassifier" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 234, + "metadata": {}, + "outputs": [], + "source": [ + "rf = RandomForestClassifier(n_estimators=500, oob_score=True)\n", + "\n", + "# create matricies for the classifier by loading in the mosaic bands and creating a multiband array\n", + "mosaic_data = np.stack(\n", + " [rio.open(mosaic_bands[band]).read(1) for band in [\"nir\", \"red\", \"green\", \"blue\"]],\n", + " axis=-1,\n", + ")\n", + "\n", + "# reshape the data to be 2d\n", + "X = mosaic_data.reshape(-1, 4)" + ] + }, + { + "cell_type": "code", + "execution_count": 235, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[2641, 1338, 908, 648],\n", + " [2641, 1338, 922, 672],\n", + " [2641, 1338, 992, 714],\n", + " ...,\n", + " [3168, 1722, 1274, 952],\n", + " [3078, 1722, 1270, 916],\n", + " [3065, 1722, 1208, 924]], dtype=uint16)" + ] + }, + "execution_count": 235, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X" + ] + }, + { + "cell_type": "code", + "execution_count": 236, + "metadata": {}, + "outputs": [], + "source": [ + "samples_diss = samples.dissolve(by=\"type\").reset_index()" + ] + }, + { + "cell_type": "code", + "execution_count": 237, + "metadata": {}, + "outputs": [], + "source": [ + "samples[\"class\"] = samples[\"type\"].astype(\"category\").cat.codes" + ] + }, + { + "cell_type": "code", + "execution_count": 238, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-1, 3, 11, 4, 1, 7, 6, 0, 2, 8, 9, 10, 5], dtype=int8)" + ] + }, + "execution_count": 238, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "samples[\"class\"].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 239, + "metadata": {}, + "outputs": [], + "source": [ + "ref_raster = rio.open(mosaic_bands_all[\"nir\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 240, + "metadata": {}, + "outputs": [], + "source": [ + "samples.geometry.dropna(inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 241, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Affine(10.0, 0.0, 600000.0,\n", + " 0.0, -10.0, 3800040.0)" + ] + }, + "execution_count": 241, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ref_raster.transform" + ] + }, + { + "cell_type": "code", + "execution_count": 242, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "CRS.from_epsg(32614)" + ] + }, + "execution_count": 242, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ref_raster.crs" + ] + }, + { + "cell_type": "code", + "execution_count": 243, + "metadata": {}, + "outputs": [], + "source": [ + "samples.to_crs(ref_raster.crs, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 244, + "metadata": {}, + "outputs": [], + "source": [ + "samples.dropna(inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 245, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 3, 11, 4, 1, 7, 6, 0, 2, 8, 9, 10, 5], dtype=int8)" + ] + }, + "execution_count": 245, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "samples[\"class\"].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 246, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 3\n", + " 11\n", + " 4\n", + " 1\n", + " 7\n", + " 6\n", + " 0\n", + " 0\n", + " 2\n", + " 11\n", + " 2\n", + " 6\n", + " 6\n", + " 8\n", + " 8\n", + " 8\n", + " 8\n", + " 8\n", + " 8\n", + " 8\n", + " 8\n", + " 9\n", + " 9\n", + " 8\n", + " 8\n", + " 8\n", + " 8\n", + " 8\n", + " 8\n", + " 8\n", + " 8\n", + " 8\n", + " 6\n", + " 6\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 9\n", + " 9\n", + " 9\n", + " 9\n", + " 9\n", + " 9\n", + " 9\n", + " 9\n", + " 9\n", + " 5\n", + " 5\n", + " 5\n", + " 5\n", + " 5\n", + " 5\n", + " 5\n", + " 5\n", + " 5\n", + " 5\n", + " 1\n", + " 10\n", + " 10\n", + " 10\n", + " 10\n", + " 6\n" + ] + } + ], + "source": [ + "# print each value pair in geom_value\n", + "for geom, value in zip(samples.geometry, samples[\"class\"]):\n", + " print(type(geom), value)" + ] + }, + { + "cell_type": "code", + "execution_count": 247, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "Name: WGS 84 / UTM zone 14N\n", + "Axis Info [cartesian]:\n", + "- [east]: Easting (metre)\n", + "- [north]: Northing (metre)\n", + "Area of Use:\n", + "- undefined\n", + "Coordinate Operation:\n", + "- name: UTM zone 14N\n", + "- method: Transverse Mercator\n", + "Datum: World Geodetic System 1984\n", + "- Ellipsoid: WGS 84\n", + "- Prime Meridian: Greenwich" + ] + }, + "execution_count": 247, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "samples.crs" + ] + }, + { + "cell_type": "code", + "execution_count": 248, + "metadata": {}, + "outputs": [], + "source": [ + "geom_value = (\n", + " (geom, value) for geom, value in zip(samples[\"geometry\"], samples[\"class\"])\n", + ")\n", + "\n", + "# geom = [g for g, v in geom_value if g is not None]\n", + "\n", + "# Rasterize vector using the shape and transform of the raster\n", + "rasterized = rio.features.rasterize(\n", + " geom_value,\n", + " out_shape=ref_raster.shape,\n", + " transform=ref_raster.transform,\n", + " all_touched=True,\n", + " fill=-2, # background value\n", + " # default_value=1,\n", + " merge_alg=rio.enums.MergeAlg.replace,\n", + " dtype=np.int16,\n", + ")\n", + "\n", + "# geom_value,\n", + "# out_shape = raster.shape,\n", + "# transform = raster.transform,\n", + "# all_touched = True,\n", + "# fill = -5, # background value\n", + "# merge_alg = MergeAlg.replace,\n", + "# dtype = int16)" + ] + }, + { + "cell_type": "code", + "execution_count": 249, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], dtype=int16)" + ] + }, + "execution_count": 249, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# get uniqe values in the rasterized array\n", + "np.unique(rasterized)" + ] + }, + { + "cell_type": "code", + "execution_count": 250, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 3, 11, 4, 1, 7, 6, 0, 2, 8, 9, 10, 5], dtype=int8)" + ] + }, + "execution_count": 250, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "samples[\"class\"].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 251, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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jrKyMpcOBwCAPcSOXDr8E33P0q5OLAEAwJ5lp33PEgAAwO5KLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJOxxLc+bMidNOOy0qKysjl8vFjBkzCtbncrnkberUqfkxBxxwwBbrJ0+eXLCd+fPnx/HHHx+dO3eOqqqqmDJlyhZzmT59egwYMCA6d+4cgwYNigceeGBHdwcAACBph2Np7dq1MXjw4Lj55puT65cvX15wu+OOOyKXy8UZZ5xRMO76668vGHfZZZfl1zU3N8fw4cOjb9++MW/evJg6dWpMnDgxbr/99vyYuXPnxtlnnx2jR4+OZ599NkaOHBkjR46MBQsW7OguAQAAbKHjjj7glFNOiVNOOeUj11dUVBTcv+++++LEE0+MAw88sGB5t27dthi72V133RXr16+PO+64I4qLi+Owww6LhoaGuPHGG+Piiy+OiIibbropTj755LjqqqsiIuKnP/1p1NbWxi9/+cu47bbbdnS3AAAACrTpZ5ZWrFgR999/f4wePXqLdZMnT4599tknPve5z8XUqVOjpaUlv66+vj6GDh0axcXF+WU1NTWxePHieOedd/Jjhg0bVrDNmpqaqK+v/8j5rFu3LpqbmwtuAAAAKTv8ztKO+PWvfx3dunWLr33tawXLv/e978VRRx0VPXv2jLlz58aECRNi+fLlceONN0ZERGNjY/Tr16/gMeXl5fl1PXr0iMbGxvyyD49pbGz8yPlMmjQprrvuutbYNQAAYDfXprF0xx13xLnnnhudO3cuWD5u3Lj8z0cccUQUFxfHd77znZg0aVKUlJS02XwmTJhQ8NzNzc1RVVXVZs8HAADsutoslv7yl7/E4sWL4+67797m2CFDhkRLS0ssXbo0+vfvHxUVFbFixYqCMZvvb/6c00eN+ajPQUVElJSUtGmMAQAAu482+8zSr371qzj66KNj8ODB2xzb0NAQRUVF0bt374iIqK6ujjlz5sSGDRvyY2pra6N///7Ro0eP/JjZs2cXbKe2tjaqq6tbcS8AAIA91Q7H0po1a6KhoSEaGhoiImLJkiXR0NAQy5Yty49pbm6O6dOnx4UXXrjF4+vr6+PnP/95PPfcc/Hqq6/GXXfdFVdeeWV885vfzIfQOeecE8XFxTF69OhYuHBh3H333XHTTTcV/And5ZdfHrNmzYobbrghFi1aFBMnToynn346xo4du6O7BAAAsIVclmXZjjygrq4uTjzxxC2Wjxo1KqZNmxYREbfffntcccUVsXz58igrKysY98wzz8R3v/vdWLRoUaxbty769esX5513XowbN67gT+Tmz58fY8aMiaeeeip69eoVl112WYwfP75gW9OnT4+rr746li5dGoccckhMmTIlTj311O3el+bm5igrK4sT4vTomOu0A0cBAADYFbVkG6Iu7oumpqYoLS3d6tgdjqXdiVgCAIA9y47EUpt+zxIAAMCuSiwBAAAkiCUAAIAEsQQAAJAglgAAABLEEgAAQIJYAgAASBBLAAAACWIJAAAgQSwBAAAkiCUAAIAEsQQAAJAglgAAABLEEgBsSy7X3jPYQod9923vKQDs9sQSAGxD0d57t/cUCnToXhb/b/xB+ftFgw9tx9kA7L7EEgBsRdFee0W2fn1yXYde++y0eXQ8YP/o+JnKiIho+tcBcfCEZ/Lr3jm8bKfNA2BPIpYAYCs2rV0bG754eHplhw6RVQ/eKfNoWbosNq5YGRERe09/IrIN/wi4DuuznTIHgD1Nx/aeAAB82nWcPS+5fOOKldGpqChadtI8spb0M+09/YmdNAOAPYt3lgBgB/zz54Nalje200wAaGtiCQB2QG79P97d6VDeOzr2qdhyTEnJzpwSAG1ELAHAh6RCJ9epOP/zxhdfyv+86e1V0dK3d3To/o8LLORKSiLXv1/+YgwA7LrEEgB8SIeePf7+vUof+m6lD19M4cOylpaIJ56PTWvf/8fCjRujaNW70fJfb7b1VAFoY2IJAD6kZcVbUdS16/Z/t1KWFcRU0QFVkTW/20azA2BnEksA8E82rV0bRWWlUXTEgB1+7MaXl8TG5uaPHlDUITrsu+8nmB0AO4tYAoAP27QxIpeLt07aP9bvu1frb/5fBsV7nz+g1bcLQOvzPUsAkLDP9Odi03vvRRR1+HtAtYKO/frG2rJOERFR1LlzbPrgg1bZLgBtwztLAPDPsuzvoRQRHcpKW22zm1a8lf95/RcOa7XtAtA2xBIAbMXGd95ptW1tDrCIiJLlLgIB8GknlgBgJ+m432cisoji1Rti4wv/r72nA8A2+MwSAOwkm1a9E3s9uzE2/m1VZO09GQC2SSwBwE6y6b33Cv4UD4BPN3+GBwAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEnY4lubMmROnnXZaVFZWRi6XixkzZhSsv+CCCyKXyxXcTj755IIxq1atinPPPTdKS0uje/fuMXr06FizZk3BmPnz58fxxx8fnTt3jqqqqpgyZcoWc5k+fXoMGDAgOnfuHIMGDYoHHnhgR3cHAAAgaYdjae3atTF48OC4+eabP3LMySefHMuXL8/ffve73xWsP/fcc2PhwoVRW1sbM2fOjDlz5sTFF1+cX9/c3BzDhw+Pvn37xrx582Lq1KkxceLEuP322/Nj5s6dG2effXaMHj06nn322Rg5cmSMHDkyFixYsKO7BAAAsIVclmXZx35wLhf33ntvjBw5Mr/sggsuiNWrV2/xjtNmL774YgwcODCeeuqpOOaYYyIiYtasWXHqqafGG2+8EZWVlXHrrbfGj3/842hsbIzi4uKIiPjRj34UM2bMiEWLFkVExJlnnhlr166NmTNn5rd93HHHxZFHHhm33Xbbds2/ubk5ysrK4oQ4PTrmOn2MIwAAAOxKWrINURf3RVNTU5SWlm51bJt8Zqmuri569+4d/fv3j0svvTTefvvt/Lr6+vro3r17PpQiIoYNGxZFRUXxxBNP5McMHTo0H0oRETU1NbF48eJ455138mOGDRtW8Lw1NTVRX1//kfNat25dNDc3F9wAAABSWj2WTj755Pg//+f/xOzZs+N//a//FY8++miccsopsXHjxoiIaGxsjN69exc8pmPHjtGzZ89obGzMjykvLy8Ys/n+tsZsXp8yadKkKCsry9+qqqo+2c4CAAC7rY6tvcGzzjor//OgQYPiiCOOiIMOOijq6uripJNOau2n2yETJkyIcePG5e83NzcLJgAAIKnNLx1+4IEHRq9eveLll1+OiIiKiopYuXJlwZiWlpZYtWpVVFRU5MesWLGiYMzm+9sas3l9SklJSZSWlhbcAAAAUto8lt544414++23o0+fPhERUV1dHatXr4558+blxzz88MOxadOmGDJkSH7MnDlzYsOGDfkxtbW10b9//+jRo0d+zOzZswueq7a2Nqqrq9t6lwAAgD3ADsfSmjVroqGhIRoaGiIiYsmSJdHQ0BDLli2LNWvWxFVXXRWPP/54LF26NGbPnh2nn356HHzwwVFTUxMREYceemicfPLJcdFFF8WTTz4Zf/3rX2Ps2LFx1llnRWVlZUREnHPOOVFcXByjR4+OhQsXxt133x033XRTwZ/QXX755TFr1qy44YYbYtGiRTFx4sR4+umnY+zYsa1wWAAAgD3dDl86vK6uLk488cQtlo8aNSpuvfXWGDlyZDz77LOxevXqqKysjOHDh8dPf/rTgosxrFq1KsaOHRt/+tOfoqioKM4444z4xS9+EXvvvXd+zPz582PMmDHx1FNPRa9eveKyyy6L8ePHFzzn9OnT4+qrr46lS5fGIYccElOmTIlTTz11u/fFpcMBAGDPsiOXDv9E37O0qxNLAACwZ2n371kCAADY1YklAACABLEEAACQIJYAAAASxBIAAECC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nx4DBgyIzp07x6BBg+KBBx7Y0d0BAABI2uFYWrt2bQwePDhuvvnm5PopU6bEL37xi7jtttviiSeeiL322itqamrigw8+yI8599xzY+HChVFbWxszZ86MOXPmxMUXX5xf39zcHMOHD4++ffvGvHnzYurUqTFx4sS4/fbb82Pmzp0bZ599dowePTqeffbZGDlyZIwcOTIWLFiwo7sEAACwhVyWZdnHfnAuF/fee2+MHDkyIv7+rlJlZWV8//vfjx/84AcREdHU1BTl5eUxbdq0OOuss+LFF1+MgQMHxlNPPRXHHHNMRETMmjUrTj311HjjjTeisrIybr311vjxj38cjY2NUVxcHBERP/rRj2LGjBmxaNGiiIg488wzY+3atTFz5sz8fI477rg48sgj47bbbkvOd926dbFu3br8/ebm5qiqqooT4vTomOv0cQ8DAACwi2jJNkRd3BdNTU1RWlq61bGt+pmlJUuWRGNjYwwbNiy/rKysLIYMGRL19fUREVFfXx/du3fPh1JExLBhw6KoqCieeOKJ/JihQ4fmQykioqamJhYvXhzvvPNOfsyHn2fzmM3PkzJp0qQoKyvL36qqqj75TgMAALulVo2lxsbGiIgoLy8vWF5eXp5f19jYGL179y5Y37Fjx+jZs2fBmNQ2PvwcHzVm8/qUCRMmRFNTU/72+uuv7+guAgAAe4iO7T2BnamkpCRKSkraexoAAMAuoFXfWaqoqIiIiBUrVhQsX7FiRX5dRUVFrFy5smB9S0tLrFq1qmBMahsffo6PGrN5PQAAwCfRqrHUr1+/qKioiNmzZ+eXNTc3xxNPPBHV1dUREVFdXR2rV6+OefPm5cc8/PDDsWnTphgyZEh+zJw5c2LDhg35MbW1tdG/f//o0aNHfsyHn2fzmM3PAwAA8EnscCytWbMmGhoaoqGhISL+flGHhoaGWLZsWeRyubjiiivif/7P/xl//OMf4/nnn4/zzz8/Kisr81fMO/TQQ+Pkk0+Oiy66KJ588sn461//GmPHjo2zzjorKisrIyLinHPOieLi4hg9enQsXLgw7r777rjpppti3Lhx+XlcfvnlMWvWrLjhhhti0aJFMXHixHj66adj7Nixn/yoAAAAe7wdvnR4XV1dnHjiiVssHzVqVEybNi2yLItrr702br/99li9enV88YtfjFtuuSU++9nP5seuWrUqxo4dG3/605+iqKgozjjjjPjFL34Re++9d37M/PnzY8yYMfHUU09Fr1694rLLLovx48cXPOf06dPj6quvjqVLl8YhhxwSU6ZMiVNPPXW796W5uTnKyspcOhwAAPYQO3Lp8E/0PUu7OrEEAAB7lnb7niUAAIDdhVgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAEsQSAABAglgCAABIEEsAAAAJYgkAACBBLAEAACSIJQAAgASxBAAAkCCWAAAAElo9lg444IDI5XJb3MaMGRMRESeccMIW6y655JKCbSxbtixGjBgRXbt2jd69e8dVV10VLS0tBWPq6uriqKOOipKSkjj44INj2rRprb0rAADAHqxja2/wqaeeio0bN+bvL1iwIP71X/81/vt//+/5ZRdddFFcf/31+ftdu3bN/7xx48YYMWJEVFRUxNy5c2P58uVx/vnnR6dOneLf/u3fIiJiyZIlMWLEiLjkkkvirrvuitmzZ8eFF14Yffr0iZqamtbeJQAAYA/U6rG07777FtyfPHlyHHTQQfGlL30pv6xr165RUVGRfPz//b//N1544YV46KGHory8PI488sj46U9/GuPHj4+JEydGcXFx3HbbbdGvX7+44YYbIiLi0EMPjcceeyx+9rOfiSUAAKBVtOlnltavXx+/+c1v4tvf/nbkcrn88rvuuit69eoVhx9+eEyY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o4+OTp06xezZs/PrFy9eHMuWLYvq6uqIiKiuro7nn38+Vq5cmR9TW1sbpaWlMXDgwPyYD29j85jN2wAAAPikWj2WfvCDH8Sjjz4aS5cujblz58ZXv/rV6NChQ5x99tlRVlYWo0ePjnHjxsUjjzwS8+bNi29961tRXV0dxx13XEREDB8+PAYOHBjnnXdePPfcc/Hggw/G1VdfHWPGjImSkpKIiLjkkkvi1VdfjR/+8IexaNGiuOWWW+Kee+6JK6+8srV3BwAA2EO1+meW3njjjTj77LPj7bffjn333Te++MUvxuOPPx777rtvRET87Gc/i6KiojjjjDNi3bp1UVNTE7fcckv+8R06dIiZM2fGpZdeGtXV1bHXXnvFqFGj4vrrr8+P6devX9x///1x5ZVXxk033RT77bdf/Od//mfU1NS09u4AAAB7qFb/nqVdie9ZAgCAPUu7f88SAADArk4sAQAAJIglAACABLEEAACQIJYAAAASxBIAAECCWAIAAEgQSwAAAAliCQAAIEEsAQAAJIglAACABLEEAACQIJYAAAASxBIAAECCWAIAAEgQSwAAAAliCQAAIEEsAQAAJIglAACABLEEAACQIJYAAAASxBIAAECCWAIAAEgQSwAAAAliCQAAIEEsAQAAJIglAACABLEEAACQIJYAAAASxBIAAECCWAIAAEgQSwAAAAliCQAAIEEsAQAAJIglAACABLEEAACQIJYAAAASxBIAAECCWAIAAEgQSwAAAAliCQAAIEEsAQAAJIglAACABLEEAACQIJYAAAASxBIAAECCWAIAAEgQSwAAAAliCQAAIEEsAQAAJIglAACABLEEAACQIJYAAAASxBIAAECCWAIAAEgQSwAAAAliCQAAIEEsAQAAJIglAACABLEEAACQIJYAAAASxBIAAECCWAIAAEgQSwAAAAliCQAAIEEsAQAAJIglAACABLEEAACQIJYAAAASxBIAAECCWAIAAEgQSwAAAAliCQAAIEEsAQAAJIglAACABLEEAACQIJYAAAASxBIAAECCWAIAAEgQSwAAAAliCQAAIKHVY2nSpEnx+c9/Prp16xa9e/eOkSNHxuLFiwvGnHDCCZHL5Qpul1xyScGYZcuWxYgRI6Jr167Ru3fvuOqqq6KlpaVgTF1dXRx11FFRUlISBx98cEybNq21dwcAANhDtXosPfroozFmzJh4/PHHo7a2NjZs2BDDhw+PtWvXFoy76KKLYvny5fnblClT8us2btwYI0aMiPXr18fcuXPj17/+dUybNi2uueaa/JglS5bEiBEj4sQTT4yGhoa44oor4sILL4wHH3ywtXcJAADYA+WyLMva8gneeuut6N27dzz66KMxdOjQiPj7O0tHHnlk/PznP08+5s9//nN8+ctfjjfffDPKy8sjIuK2226L8ePHx1tvvRXFxcUxfvz4uP/++2PBggX5x5111lmxevXqmDVr1nbNrbm5OcrKyuKEOD065jp9sh0FAAA+9VqyDVEX90VTU1OUlpZudWybf2apqakpIiJ69uxZsPyuu+6KXr16xeGHHx4TJkyI9957L7+uvr4+Bg0alA+liIiamppobm6OhQsX5scMGzasYJs1NTVRX1//kXNZt25dNDc3F9wAAABSOrblxjdt2hRXXHFFfOELX4jDDz88v/ycc86Jvn37RmVlZcyfPz/Gjx8fixcvjj/84Q8REdHY2FgQShGRv9/Y2LjVMc3NzfH+++9Hly5dtpjPpEmT4rrrrmvVfQQAAHZPbRpLY8aMiQULFsRjjz1WsPziiy/O/zxo0KDo06dPnHTSSfHKK6/EQQcd1GbzmTBhQowbNy5/v7m5Oaqqqtrs+QAAgF1Xm/0Z3tixY2PmzJnxyCOPxH777bfVsUOGDImIiJdffjkiIioqKmLFihUFYzbfr6io2OqY0tLS5LtKERElJSVRWlpacAMAAEhp9VjKsizGjh0b9957bzz88MPRr1+/bT6moaEhIiL69OkTERHV1dXx/PPPx8qVK/Njamtro7S0NAYOHJgfM3v27ILt1NbWRnV1dSvtCQAAsCdr9VgaM2ZM/OY3v4nf/va30a1bt2hsbIzGxsZ4//33IyLilVdeiZ/+9Kcxb968WLp0afzxj3+M888/P4YOHRpHHHFEREQMHz48Bg4cGOedd14899xz8eCDD8bVV18dY8aMiZKSkoiIuOSSS+LVV1+NH/7wh7Fo0aK45ZZb4p577okrr7yytXcJAADYA7X6pcNzuVxy+Z133hkXXHBBvP766/HNb34zFixYEGvXro2qqqr46le/GldffXXBn8W99tprcemll0ZdXV3stddeMWrUqJg8eXJ07PiPj1nV1dXFlVdeGS+88ELst99+8ZOf/CQuuOCC7Z6rS4cD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GkOGDIlp06ZF//79Y/ny5XHdddfF8ccfHwsWLIjGxsYoLi7e4sVNeXn5No/j5nVbG7OnHesPmzFjRqxevTouuOCC/DLnddvZfHxSx+bDx653794F6zt27Bg9e/YsGNOvX78ttrF5XY8ePT7y32DzNvZEH3zwQYwfPz7OPvvsKC0tzS//3ve+F0cddVT07Nkz5s6dGxMmTIjly5fHjTfeGBGO9444+eST42tf+1r069cvXnnllfgf/+N/xCmnnBL19fXRoUMH53cb+fWvfx3dunWLr33tawXLndsfT+p13856LfLOO++062v3PS6WaB1jxoyJBQsWxGOPPVaw/OKLL87/PGjQoOjTp0+cdNJJ8corr8RBBx20s6e5SzvllFPyPx9xxBExZMiQ6Nu3b9xzzz177AvrneFXv/pVnHLKKVFZWZlf5rxmd7Rhw4b4xje+EVmWxa233lqwbty4cfmfjzjiiCguLo7vfOc7MWnSpCgpKdnZU92lnXXWWfmfBw0aFEcccUQcdNBBUVdXFyeddFI7zmz3dscdd8S5554bnTt3Llju3P54Pup1355gj/szvF69ekWHDh22uFLHihUroqKiop1mtWsZO3ZszJw5Mx555JHYb7/9tjp2yJAhERHx8ssvR0RERUVF8thvXre1MaWlpXt0JHTv3j0++9nPxssvvxwVFRWxfv36WL16dcGYD5/HjvWOe+211+Khhx6KCy+8cKvjnNetZ/Px2drv5IqKili5cmXB+paWlli1alWrnO974u/+zaH02muvRW1tbcG7SilDhgyJlpaWWLp0aUQ43p/EgQceGL169Sr4/eH8bl1/+ctfYvHixdv8XR7h3N4eH/W6b2e9Fmnv1+57XCwVFxfH0UcfHbNnz84v27RpU8yePTuqq6vbcWafflmWxdixY+Pee++Nhx9+eIu3qVMaGhoiIqJPnz4REVFdXR3PP/98wX8YNv+HeuDAgfkxH/732TxmT//3WbNmTbzyyivRp0+fOProo6NTp04Fx2nx4sWxbNmy/HFyrHfcnXfeGb17944RI0ZsdZzzuvX069cvKioqCo5Nc3NzPPHEEwXn8urVq2PevHn5MQ8//HBs2rQpH67V1dUxZ86c2LBhQ35MbW1t9O/fP3r06JEf49/gH6H00ksvxUMPPRT77LPPNh/T0NAQRUVF+T8Xc7w/vjfeeCPefvvtgt8fzu/W9atf/SqOPvroGDx48DbHOrc/2rZe9+2s1yLt/tq9zS8h8Sn0+9//PispKcmmTZuWvfDCC9nFF1+cde/eveBKHWzp0ksvzcrKyrK6urqCS26+9957WZZl2csvv5xdf/312dNPP50tWbIku++++7IDDzwwGzp0aH4bmy8hOXz48KyhoSGbNWtWtu+++yYvIXnVVVdlL774YnbzzTfvMZdY/rDvf//7WV1dXbZkyZLsr3/9azZs2LCsV69e2cqVK7Ms+/vlOvfff//s4Ycfzp5++umsuro6q66uzj/esd4xGzduzPbff/9s/PjxBcud15/cu+++mz377LPZs88+m0VEduONN2bPPvts/uprkydPzrp3757dd9992fz587PTTz89eenwz33uc9kTTzyRPfbYY9khhxxScGnl1atXZ+Xl5dl5552XLViwIPv973+fde3adYvL/Xbs2DH73//7f2cvvvhidu211+6Wl/vd2vFev3599pWvfCXbb7/9soaGhoLf5ZuvTDV37tzsZz/7WdbQ0JC98sor2W9+85ts3333zc4///z8czje/7C14/3uu+9mP/jBD7L6+vpsyZIl2UMPPZQdddRR2SGHHJJ98MEH+W04v7fPtn6XZNnfL/3dtWvX7NZbb93i8c7tHbOt131ZtvNei7Tna/c9MpayLMv+/d//Pdt///2z4uLi7Nhjj80ef/zx9p7Sp15EJG933nlnlmVZtmzZsmzo0KFZz549s5KSkuzggw/OrrrqqoLvo8myLFu6dGl2yimnZF26dMl69eqVff/73882bNhQMOaRRx7JjjzyyKy4uDg78MAD88+xJznzzDOzPn36ZMXFxdlnPvOZ7Mwzz8xefvnl/Pr3338/++53v5v16NEj69q1a/bVr341W758ecE2HOvt9+CDD2YRkS1evLhgufP6k3vkkUeSvztGjRqVZdnfLx/+k5/8JCsvL89KSkqyk046aYt/h7fffjs7++yzs7333jsrLS3NvvWtb2XvvvtuwZjnnnsu++IXv5iVlJRkn/nMZ7LJkydvMZd77rkn++xnP5sVFxdnhx12WHb//fe32X63l60d7yVLlnzk7/LN3ys2b968bMiQIVlZWVnWuXPn7NBDD83+7d/+reDFfZY53ptt7Xi/99572fDhw7N9990369SpU9a3b9/soosu2uIFnvN7+2zrd0mWZdl//Md/ZF26dMlWr169xeOd2ztmW6/7smznvhZpr9fuuSzLsjZ60woAAGCXtcd9ZgkAAGB7iCUAAIAEsQQAAJAglgAAABLEEgAAQIJYAgAASBBLAAAACWIJAAAgQSwBAAAkiCUAAIAEsQQAAJDw/wMeS92DfqsRbgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(1, figsize=(10, 10))\n", + "rio.plot.show(\n", + " rasterized,\n", + " ax=ax,\n", + ")\n", + "plt.gca().invert_yaxis()" + ] + }, + { + "cell_type": "code", + "execution_count": 253, + "metadata": {}, + "outputs": [], + "source": [ + "# now make y the rasterized array\n", + "y = rasterized.reshape(-1)" + ] + }, + { + "cell_type": "code", + "execution_count": 254, + "metadata": {}, + "outputs": [], + "source": [ + "# fit the model\n", + "rf.fit(X, y)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "cdp", + "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.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Tutorials/04_change_classification.qgz b/Tutorials/04_change_classification.qgz new file mode 100644 index 0000000000000000000000000000000000000000..2ec3ac96d263bfb11fd2a8c58754ec477d4ddffc GIT binary patch literal 17272 zcmcG$byOt57N<$$PUG(GE{(fO>nfK=G?Abqd z^VInwGH=vPDT$2u-J9R#ARsZoz`Z!Wz7cpoGA{KpEg*1YlrbEF6ZWmd5rL zW`?G=#x5>a=2oW0u2v5AOimUq7hPx0>(VJqFWX8%lY~BTXBZ+>m%^OIJRpjW&K7${ z*@H_*p098uA_a)xwqQx(N_P;GJzimg%hap zO4LeLrCp()nG&9o58eW#gWUVPl%oa?VTmL|iTo$97W;I05&()yvN;KvHem5K#x3{g zDI7P2ObE}~87+haVcD((ny-wsTB1(}>_FEREhTLy!XI0rc#7kT9<(2`961RHSqh=w z-eB5U0Oi{8p@0C6iBC`xq!g_?yQNgxAd%|n+ zs_w`Upo*wWd%ttT?Cp6BA6?;@dB5*9TwkALCYnnBOq@aALOpiEYVG$-HwREjV|^!6 zmNjPyH2B1TCpO&DeY(da42XZ9du>#|_6Q4ZX0pK>TQZ}RS6kbBq*5J@T$tB3`>Uep7Ie%Xq-iijmIjX$em79F@?d;qi z^zCd5jX^+;Vy9l^;}iQ_p@|l(_hvu5lm$3GT<-If{!W0~7v2Sv39Fz5QQ82_$|J#( ztt?`hhpxQ+)DzsKdH981_nw^JKHknvYr9Ak<7)kd!gp=^kEclbX=U`X24!kRhS?HC zeB2zpz&L4K6pcvD5#nI$m9P)U`trY0_fbSNUs)A?nHQgvg>d3nT?w|-jWGUp7qKswR5qP-50bI~e{&!d$kf)7zSR0aHJ%*n zyB6?_mPF5Ja2ORB4Gj~cH~|wldX)`77KEPGeO9h(;{s0Zty*4=Ql)0V)HdrFqHZj{ z=WrUT#dB-45)pUueeekK_XN7^7&16Hv?oL8g)G`$EqYTnVe-dF8l{4N@OpQ9 z5H>tX^u)gH!tEgfWav7>X5U49UJoaqw*?EjVc*X)=@`Vinl_DEWKK(!3P}Z`#$D2L zj!!>o@20oNGU0mWHe0C6`)i39T2_e&@Er@@WHmL~VOEuGeH>Tf!n_87^6)C->zeUq zv0=|wyy50EC02^$5X?rKp0AA#J($lDD%$o@c5~8K1EJX@PMnB)uhw^3* zBFPjWptmM>zLPxPVJyyj;Q*S&N}j0le8aN72_T$vJb`0Mz`1)@8`+sm(z#q3Pdg?H zJ=R~my`1j8j4i2Yy4RVmfr`I1!|OFF#7J{J#G87S>`8Zb_qYBGAK2u9>7Wd}5DDYv z!F_RpO`6*g$LGzU+zxxmrYNQ9Q2o4fVBD_zR4W(G6d#~(AJ+qx)NR=MK0Z8cj?Ubf zLCGKo^>ka~3c6z~bE?U)>5sdqd!@zMI3@xP5Z_TLR)gK!awtw<(u=gSc6*!9cUQa1 zUuqa^xWc~Gt5=;gTk+)BJ!hQtCy{Dyn-tWLKL$w%;sl3=ggdsj)@==ZEgfjb4q^Bs z*Su6Nw0pzsO$_z38XssT{R_mXEm;SJ2r$)mwnh5ZUQ(HJc|5j!z;IU((h&aw;gWJX zk#K>>lwg#*RuhKFlUi?U3V3d=dFnnmsk2SEcJms4neEe0`GB}xhQt2Fr9P^O1h<;9 zbKG2EBHcnU_`t7E4azT%yh~1Hx{!qNu)2vG+3;}Uhx;i2Z44D@Dru`t9cy(0jNykI zuBoZyYF68P(4SQ29|k{L*WLMZ!LX^oZ$AEQwL{ncdE1lgb39f1>qY)9b@zJW?RFH! zMqy1=(hG>qip7}FjHo)(7KbVEE`V0*i3X&^KO` zbA(u#EhkRNt}d4hg}PTson0ZCg@8NExRR)E#=&+itVTNQK!z=1s+Ly%;z z8uUd{t(ppVr6`0a9nlyojD=4uEwzsz`qD(wh(q*S2DTu+mlLaEU?TX>wDkn{QZiTs z>*k&_QcgUOwLV8PHpS!DRgI}_F%w?MKr!ZQL_de^io3|dNgB9eodWPI%1pi_S}C1C z8iwyvtR_}Ldofwn%9)H1x!5QOTN6oAE-lW)e~1AMrUj26{FeT*N48C-o=ZQ}1oYt4 z%!JtX3v3&Q8B^1^@7g3pTIQJsqNA}5OX_Tp{MvEGqFxYlUY!aepBkJ+QiLLqa7wXw zM=c6MKh&R$YqynEync&MW_TWHZxF9;+)*KD3&?VabQ{(e-&1R$66} zZAjD%hb%k$G<_{~FVp2jh^OB{B*l11*yDD3TJ0?ka02lo#+?y2_&N4Ii#Di`?BDa; zj|}3R%G?x`>xaV=Sd(=F&3<#jbK7uvZXe@T(?OoR9uw>jDhS)V93fAxDR*_1yA6bW z({ZZ?iJdj~Am^@NRBd3|j+YPJU5u1vUmA9!R^r9>R%5B}!T-i*sLo~^F8MIO zQ4_aOXbOyHCC2F|ZjWC~>7NR9$h|wh)j!CGHc7duAX75D@6;+eHt%vK3)*c?(JhX_ zeY{Y_u1)EB`BX3-onJYj`Ti_K4CiR{B$BFAE{oIuhNi+r+@zbLpn33!!Fc-2p-lYI zpBoz$_DYcJO4D0}nR_Hwqsa5X)yiuX_2|ue3$Dw<+wy3OW%`7*rBH#;BYt#<2$P^i z-y$K5?D(ylLhx&PPV=?pWEBA?jJFR^C|AnD3F~QmZ;0~|qx4+k5J~apFvk&?d_JWF z=wSKx`BulJu#$9xnKW{rc}8zP)rr9s3F7cYV{+8>%a|Tn51C7~P-!m$zcEg)-g*yg zy<7={?ejasG%W;J=X;3Ge2c=g6w`?OdLzNA#!riWX6)4(2GT{=hy!#R4u<8uh!@%0 zKLzizb=UDn{#4`ZJlBfBjT#>gELw}-c|LXJ-*o!;PXpKRCbuxJu^67!+eV)h*s-JD zO47GEZZpmO=O-L8a<59-%7YG6-je`nV^6##a}bk!e;|P8s@ZwoWk&Hl`BsxEHZpE$ z#vIy#<{+g|-|L2nLOOImKd^Vz;_7Zyl3YRRNi?29lEN45rmy0msSRrS(tESi6rnoj zN}*%X8)@KBq+KuCgVfZM@%tBUaiXtU+K-E4hPoq*Dv~y5t$L%DZkWqwo__Z=Roh5% zO)m9Y9V#75r+#v-!xHVr>7cTWFyu5Jg$l>n%j9vBpz(6zSq*FOtEgm|`)5BZ4qJiL zP^M9aZd$no6tjo4-@md`o?}Wuy%MpMMd+Fz47?l16AdH^(?=^%wDPaB-cwP+xnyw} ze2vui1C=JX(8})TuPocigp0=CI3XmpL{|l2YpzUnC`lS+Zu}-In&jec*2I!fRS=QV zAtaKK=7H*iqV4&CWE<|6sh98f@L@G0(o1fI7r&S`S01^)cUa3=T)f}m*KF>LaZX)O za4sShCdoG%^OSH2XHblmh!FO+$70wG2vZCc@S43($8$9JAZA8z`E1YXTfYfn>Hg+~ zlCgU5r^i`nuimt?^H^Wc#^O%K)lPw&3hqj>fR_uX)qJ>pcxXPSo(glE3iMA0wR(B$ zFbijeI6_&;(ng$nu}qp9JA7hHL#?Ur7=BWc%b+{k$A!g|tO-Myuh(wr)vmtVjeoM< zcx=A(NRReM4XzdKAqNKd!1PM+8~)%y6<%U+gf)q}h-pez@rJ&n-#VcOTbK5e=?1?e z$O*=b`k=(Qm9Y4+9I!rF#_U7V`SH3}^@{R~meJGPVw*#AXpB?BtWwnq8ta{hd+9d3 z;RP+Ec>fXSd3v!Dad07;bKHBdIj7GW!++3c@B`i7?KGEk%C@cs^(~Sdf0o$eIoIst z=r(78qpzO(%PsllYe1m{4t$Sj1Bp3z=3$eQy$WqtUl}cX$3@15poIhxiz8R|RR@k> zk~SZ{kS^}&v;`EWz)mLOL%71jX7t1B~q zmK?ZM7kc{Bmp^YON3KmvJRDtp@oXj&Ogs?Vl4$k81}7ARyb4#v`ts3|6FBgU!EK^3 zZV+Z`AG|Q63vun09}3wPQC^%52szx%4Wj^?^UL@{Ol# z(>HX$dr<*@y3IxAQX7mHP*$#|t7t!oN|EDGUi96(_tSj9c+Pb-aLl;8AL_HsVTO5G z`kEnHSh~mGihrMDjP-pKZDyJ};bOiT2YBFLM6B(QIvD5Hs=eUka@1nK4DRA z0+jwj?pPG$_L>M}Bw78*D?QaUIaaZly|k9f8#}afoNf}3>XA|#qC@p$JVQgJ=%@mT zT0V>4r019M?PQU$aG3O{gt zmh*Ex!0I%u&MkzgRIGcY_IhQ`dbxm-x{!yeaIPFwS2&+;Mg9P^W8Do`RT|cWNZsfq zjUBK>1V^w%0o+y0KGD}B^HE6xg@DQ+O^#7;BSM>kvG z<-njZb6x|n+mLPLgn&w%4-=+~!tC?6MJkE2qtET%zMUgE1u|0Cboo*?bD(b7)6q58 zs2TF~B@kvaK0#^~vm~fSPRTp!d#grE!0TDqPc7q7H#OJpeQBrgCW4o9wj-j$DmF9K zEd9&w9{58AE6}vweY}>T7^DlC;Q7ObnWJuP&4tFIs^&cJKr=48sl4v6wf;=fV>*sF zW0!bsnqH^J-|466h)2Qps>m!XV%(pwVcx5_a8#<)1{4fSaoxW83?l|f8OuV30Nt-R zH4I0|v9UM31E-a=#p8w%w|R08nY4ipTF8D^;uxwQ1apPm8qg=hWTK*#?6@=DSL%hN zSlqvA%s0(^s4PTW;Z4m%2rDC%SPHMqc%sPh)RTp(Hf|0`orz1Fq?xqEDiZ?kDdpUM zw?{#CjKA-3jALrLpQx0!RJKN~k^xf7!=uhAx}hHOzW`6RbjDjt5AS`atmjrfVxt%B zy`}aK86j%URT<20+uY3E8tgc1r)|iGWsYIY$$%yH1ZItCEPV~yHNThB+n5ZKEH{bf zm=76^c4lb^nx9vGz!<_Jm=#=&a{8#Rc_nSLsTZ%Be(eKJt-#aak44305)YIoZtv?5 zQ}WCF0iFmgBI#-$120)B5)t`QxYw!cy7`(_D?OX?hj3%y%W}8b9=~=p*d<#M5-iSl ziHr@fjitd5-sbHQQy)LEUXgAK{C=vhz567Z9X!i+-g^cT=6AgZyr()MKbxi~iAAm& z%l_=kU&cm88RQPY9)>{)#pE_T`6U+VCC!RLdq_ISUz8S(aT~vT1W#)(XH{WW#7sWc z+F*(g5w~6(qUMNY1cIGX>Ai~)V}CG*@LrkqgT;!ES8&pxr~FowQ$Wf7WEdOJuh=>A zgJOt?hG9nbYri4(>*sbrpW%yVRH~>>=TT8Ex>l>IF%~r>kumx&BO4Jh@m8}djx_>; zO&xd+i9EdD5NjGrmR0)JHcz1ys@?%Zwl8unM+4y~J=vW?uRROC=?U~H&_gJ%@v7@e zpt)kZfu{7s)JxUEDCcz6AFOjqyQ`60(zk204tr3RUh-<)OicrZ(BQ`jkIq5L)~6}G z2L+3lrcvT~`91xl3~*_j`La%ywMsY6{b#r2NBh`g5uIDS#RETBEl1PNe~4ShrYL$`Q3wg)NDJyr<}Fu^}KV>IT!-NUgKkZdQv)yb6(XH9_!mL(Hl2w zQP@w>vKGQSHqP9h!P4chZ+>0Mr@ow2KJu|y{Mj@>!J;TL%9E2o)SSL737o+8?!vAY zU7RLqFHDs(e`gq`>zXVdbB9qA=Ws z1b{#HF%5)s^L#P;p=i#VWho}ru)qGjCvhLc%;Ploqxt~`RLL}ykJj1J?Os_d;ui&5P;A@ou)rPoMBuE56$~5=xaDTzS zuEoBQmjAdH{pYLy>fyfM;>~~O-H@g85kG9*Z}1P?HmmPKD&jLWTK6h7TA9_NY`#dA z+9M89CLOF?Tq4|g5_9X5k?>hP=MJm%bEo`$LwW!@%sKwd^R{^`3jDt1F*l}SJC->Q ztknkT>pI(^DHq_O6gRDdw=DIQ61FDOX*2rFT#tLNeKl%sGDn@yM_R~7SZrNG$_JS8 zAT4kqHMkoAG{$W&mX7@IL8=5>JUm$-nG+&p0H-#)IwmsKBpV}7E#jtlV{8@qfVeal z=OBk`QF=;AdOI0@yM3@YD}{mtoq{@tjJmw`Vi14UAGC>lE1f?y{||#yk`6V6rmvuQ z6P-xJWOabBX-SwoCOmBTkR6sQM}-8axI$@x_^vO-5SK{oel*ey*M+XE_TqS2A6mDR#txo zicx+bB_DH7Z4NuO_|dk*AJI`l(;(KjV7=6#3N^!tX>90KE9(v?2q1UzT$dTXd(A|t zoE6j*hIP6i9pvBBF3|s zXs;(=nzt|q1|*iEoo^yrVDQJFK+;+`=!Gp`kJ%^DzL^}*%zv=7Ke(pyYpb@`GbfrQlHUb zZV5|Yi7rnf7&i#R3T1}|1`^CR-{1#UOKQp6AKlZ5^fyiT!}9$@ulZNhV?{qul}Fa| zgKWT9=sxa$tWPU`Bqv1OP??fHJ&OErmaTT2@sCCGMHuLe9MA*52n(?fN};AGF>W1~ z{Nx%)x#}}H0$qg7uw#cs5Tcb#N@})$@LBrNp7~-*f&GBP^eQ^mW0J4;APODF`k9CW zzwZ{6G;b{)^DD$Tgo_X(vzy)O1R~1sSy=@MAe~ZGfMl4amh?phQ8fWEJxokHEU7T2 zgJj~Rw+;Z6o?=YHhF}Ba7EVhJDwus@7?^QY=f?Pvb0aWHY{Y>NwmN}K{(n0oKXjBi zHFPD5oJPwXX!dS_CuN9FrBEIK70ofc@^+4sIdDD9OCV51ik0Y0V+^;7u2Gh@OzpHF=`ymeYM0OHUrLr^vLX8Nv)+rKFQp_8{{VK%otKzCSFl{j-X#BR zoa&FqeFN3En`8eZIzq%cD=6@57AEz@{g_s@wM&S)h0YO;vITvkvO&vkObkvrEP|h7 z31!TfKgTFZQUmqC1*4%h)S(3_psrFwbY=TD0XyhLI}P9;m#Gm1SHsu-LU3EP&-Yy2 z7~eMH2Hv~LHk4@Y_qw+37j}oW9Z3u4yM^Q3a_IAriID3k>*TluVKod$+zhx*lo$~w_si6 z3!V=_A#bC3<4ayS{}yst0ov9dGP($p!*JaE*c62C%Z~Cs!5%P7{2|&bUP0Tl&GN0SP>(uCn(~HJ*9ccn7(RE>#V)FFC^CSg_g>F zuTo5wf)BEWk+19}(|Ts&U%lmt09{e9b%9Oqj`-}~9KG}@RS?^z#irE!iEg+-SLK# z*QG}5*wReozF8~_WSh`QGP`g96PCPkUqv`zkWFG#1ylLHo;m}PuRzWf&Um>VF#Jw^ z!A(ec@5xk=E_?fv?xi!h=HfU|YDBMf@SKKrIz>`tmQ+1C;WSfATeFK zW4H-17+^@Q>n`n`CnktI@YKBQnGfT`z-y8w&E_|Xt-twQVv)4lQZ|x|3`VA=igdoA z`6A*?Sc=N&SaWlPI8u?OyMPakReT;4Uxqe_sQ~q{H#RaSV5s4yx&}fYgUE&@a}YWE zU3V(WUVa=;ty@!TnInw>qdKU8#t21Ua6&%sR!?tL(`FXF0K=Q~Yo%jwyn=htWfoIP zBE#V%g{BSq5A;BQygpfh$x~PfO-1pp9ksMi9{ovDbxiVN2T;cq!Fbz)K@Jns1WlP! zUhG#&Wn_kNITah>v|7ui@{8D}4o}ptKIP3qy8PqlD;y9YUHVRbMY=-Kbyhh@xtlzb zE{#;{;hvGtlz%3jfs_NU>{#Yn%~kA%qumQ>R-(>T4ILRL8c9=4ZFvTcG$s6vvBOw! zCPo(+ns&M=AyskY?9DHwf+>UU$AIgqI}jUe$K);E9~rBFNozS?qlMyHtU11XKx1r+^KGV%T>)JG4OyUKgyK)H|gn_W9F4l@A_ zJ3&v}|ElFd#}C)aZ(yGdI4;dZ-WKg^#RgnY(3AGR5@va!L#d;DuDocA{)c%am5SVq ziL5Q+ZHi1q!tZC8l{UXt27(L|MO(bDm8i;&C=g-v3W-MLBop>k<+bea@A|)tUqn?7 z{%NGAz{CXI+?R&(oB`kE?KbZY;p!i?=bNk03y-l&H zXb20_`TY!Ub|xJSrN9O9?2v9Wo5AWOStMK3| z2``|jf9>n9sUJ`@_)pWb0-uJVCjoRy(dlI~ zh)ic2GNIzn6A_bQ8_&V+9ew1y{mwTNIYNqq&f~k`&fle=J-FCT&mr03uGlN*mTeAQ zG#d&kr!Y-~x#i=AO~Zgn{}oSN@8mRKaPi>da$H0lw(*khpqKi7d@~~?s=Udu`G zrokSaN7YkgB4

uXdW(4Dt#h6$yC^!baF+X<)%I(Ci)14pEF)5Jiuy=kz-gLX)67 zXLp8?7avz$_72(cABR7EX8E~Hg6oyxlW`}U{S zuT?|Klegur^K+B^5{IIMbTR%oPhxNfQ4oe&j>P*t(F)U~g zwk5&L)i5DeE-w%KAIPM#anWkiZ4g|RgrwpKFe`4*;{Y=Nlk zdNkFtBY4d1)qYiEbnu}UTHxs*$MoO+kpNO)RQ*@i)~EQnp^{_Ws~4~r(i^7Ddsy*K zw$11l&^M-`R2xio%Y+O1f-_*qqY7P$B9auvBB@>6UxKO({qA=3I}0(sfXrT&zU^-- z13SfZ^tO2S_^%u2B@}7$<=thAkX(r9Yq|~{oF&eUg0E68K$N>D^O0s~;@hpiS^(&y ztB>~j19q+#PISrXSL@0?CO;MjDRcHv3yg=zn50(4`;q*Ds1t;G^`XEDfAe}4#UA*( z!H`6RK3m8MzgaHU`q}%1$57b=>F%(yyRscb9|Qt9+~M;+67pf*bxf+2r1|pIw&-Yg z(Vawj?R}HRykq|XyOL1FHEsrkhGOK7a>8KuiijphHc<)zz{s)nY@4UQ_oti9UikyG zox6umh}?ulLR#hpieZY`wj%**dJ0uVO+kcK0;95r{?FEo5COZ%4<2LHw$S(Mk#FTf zXSmRbBM*+eO-GLKi4<#Akz9TUF1qioF~En^)5M=`e+u+{5cBPA@=Mw}1|8$zH%K~) zKRUc5GhB=v?C9;jeIV~nk3}%OC>==$JJ{9nL&UAz^5`kKW zv^^i!Jo#`vALY+3A2ttHeJ?5BF*UAT81-}p9zx>%jxOL_^Ts9~grSB|%b+N3a^ie! zigJ?^&K7bf=DB2^5&?!$_|Z?A`%;RZCj@PjPYs)bUgSKHzzB+yL>gulp1Cy3hFncV zp{4OQ5s7t)&`k|v?{>V7O0rkqiu10lHJxmIk1uwxS_JOt?1ej#UIsptm-kR=gOPXW zYd={>*~*d*%>g5Vb9BC5D4dth;|(0(+C%(syG0zbrZCOv_=n>eWA$T3zWBRvO;QTh zW2M@<9Yk*IhxtvnPn-=GI$ke$+J^Y&XM>eY1;)#eYHjFf)6yvnE-K~m@!Gy(u~;s3 z9>ylqCM@;1XDs(&rv%8xL7i+;c4DeEGsN_om9_PHt^q}+vP1&SW!h9zPe^6>eq6nE=K&P_nUZtlu;?#;H4?wO64i<=Oecl3de*a*S_ zzDd@ru)tSJscXiOLJmbd(~EYGe99?w=Fdw%zCQrgC=EgR={ecYTHBzN9OxXWf)cuo zc)#el%3K}$*{{VJ;`g{iCM#WwE6L^oczV_>g>A0ClfdXmU}==*G=7cS<#6cAX};Ukg94um2qXKK;G-iSg@G>Ic$Ukn5|07NFa5E=jY?;A+uuyNg&A z=9vLgj{r{9R}7LtkD-C~{7V4pK_+SDt~{(I>P#H}j=QWSo-rorJ7yVQ-UqTlSGyt{ zKzOv>n!#u~L?5X`9d=LV_goQWG`9m59ifzwIjgtpCR}~)JQFRXmu^>q>Xosty7?7m z=0#s+2y900!YTrwJWwgXbniCNlj_YBttcewz_6ju5Wy)CzRwnUUE;~+Js2nOu2}3s6v2TV1DO+GUu3lF@CK2q^7& zdFY6tI!AWpb|D5&tcdcki$cLSM%v*c9bYK|1mmW58UCaW$3!jBDh?BR#Hyj#mKDM| z{;U`}ui~!~wCP!f@NwEutaPv#uUy~FZ_U*|8K-4|QcCkqp&y+1ku^jLTl3h!UrIW1 z!l`RIbQSp4Jq3ATIYM;WN$ID?fiTJjU|LW2m>Km$*AAPa>lbSvO2k=g%$jKM034hvdd69|36 zLkyGp!%-v{oDTy6FCBos_#z*0$)b(wk!Q0x^i#@I0k6|6NrwgdYo4R<0JuWxf@NOwtuBu$>&P=ot|n8LgOJ55cIwgR(I4lx`p2D3 zEf#fS8a=~oc*ETYSfKaPSfPtjBhXSt_d6?{wIEG6;FI(BD$%ZNM>gsV3D1Y)*O=CYkwWH z<<4GW;v@Fn?V}W@klP>&ZtMUX49I*0RB$5ux&L&&xp=i~aaAk$P{shQD4Q#&J|V=z z-`UO2^Y$v`6-e^Ddn4ewXL_YCD(#BjI&VOHk21BDO>l(4&lW@=P0)+1&MDChPyjKg zE9bFYOk58>>DSiMfsoJ#= zWb{kl@IoPJAaom7{1<`wm%V`y5ansF!Cbn{{NkGHwn}ciu&}stfP$gvZr;BGaLHyM zO8-9!!2RJ}`NK6~Bi@WS>GT`YNrsX!eb5q1c;}b%+>r6Tkhm^xijL4wCTZ!9<$!>% zj{9&a$UQI5zjxv>N&r|zE>AL$r8Ej3^}V)-d9CFiXFby|;963ubtzhCUCV_i5ML$$ z|F7b2XDn%0D28w?QOp0}Nj@U{)tS{OI*(`J1s+U? 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 literal 0 HcmV?d00001 diff --git a/Tutorials/data.geojson b/Tutorials/data.geojson new file mode 100644 index 00000000..c27182bd --- /dev/null +++ b/Tutorials/data.geojson @@ -0,0 +1,86 @@ +{ +"type": "FeatureCollection", +"name": "data", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, +"features": [ +{ "type": "Feature", "properties": { "type": null }, "geometry": null }, +{ "type": "Feature", "properties": { "type": "golf" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.905161714939155, 33.040007796194466 ], [ -96.906756645883775, 33.038155654133597 ], [ -96.905823209970222, 33.037831722894971 ], [ -96.904185387849665, 33.039286797000628 ], [ -96.904557531385379, 33.039762780765621 ], [ -96.905161714939155, 33.040007796194466 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "wetland" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.888236653132438, 33.050668496103896 ], [ -96.889799530523746, 33.049948071556223 ], [ -96.890782879828834, 33.049089787892939 ], [ -96.891275818813298, 33.048607315447029 ], [ -96.890949199080339, 33.047428116150819 ], [ -96.889422779101011, 33.048746680883141 ], [ -96.887741939010468, 33.049102331028301 ], [ -96.887860286246962, 33.050512744651037 ], [ -96.888236653132438, 33.050668496103896 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "industrial" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.917522271948968, 33.05632524385797 ], [ -96.916907592624696, 33.055525407779825 ], [ -96.911302223265096, 33.057885690051108 ], [ -96.911860156403066, 33.058940677982292 ], [ -96.917522271948968, 33.05632524385797 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "deep water" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.93656907894318, 33.077362812612741 ], [ -96.939067147071924, 33.074587298019502 ], [ -96.932530073563271, 33.072323731057139 ], [ -96.93108502171394, 33.075586068213177 ], [ -96.933864369564873, 33.078128915575093 ], [ -96.93656907894318, 33.077362812612741 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "shallow water" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.902824971550316, 33.08834428923339 ], [ -96.905518044627755, 33.087023852203508 ], [ -96.904344770660515, 33.085190269101368 ], [ -96.90208200415691, 33.087606240974807 ], [ -96.902319186797016, 33.088293097493512 ], [ -96.902824971550316, 33.08834428923339 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "roadway" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.892826896680091, 33.093019684918048 ], [ -96.892939792005265, 33.089351211176137 ], [ -96.892608335230463, 33.089430964084315 ], [ -96.892497462530983, 33.093014113666534 ], [ -96.892826896680091, 33.093019684918048 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "ag" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.82512566611058, 33.195648827491169 ], [ -96.825104625604723, 33.193726453653817 ], [ -96.820788345916611, 33.193554825508159 ], [ -96.820553651810698, 33.195645698486445 ], [ -96.82512566611058, 33.195648827491169 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "ag" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.83365897459268, 33.192607171214945 ], [ -96.833724272233127, 33.189955932505377 ], [ -96.830500163743707, 33.18999585725718 ], [ -96.830526642337887, 33.192629472233442 ], [ -96.83365897459268, 33.192607171214945 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "fallow" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.83684198906316, 33.261018891575134 ], [ -96.837172398130519, 33.253707544974056 ], [ -96.832731423095339, 33.252652479020313 ], [ -96.831927894383597, 33.253269250451552 ], [ -96.832617446559965, 33.254227451213239 ], [ -96.832403633344512, 33.258323815598104 ], [ -96.824514264066963, 33.258564449072253 ], [ -96.822983612633237, 33.25822225790801 ], [ -96.823109544056379, 33.253146668529119 ], [ -96.82178224961784, 33.252177243747397 ], [ -96.822946984789453, 33.250620692379016 ], [ -96.820780983233632, 33.25017273101215 ], [ -96.820238126648491, 33.258426452471781 ], [ -96.822101787545861, 33.258963747357996 ], [ -96.823243103058061, 33.261380710926495 ], [ -96.825344502770648, 33.261417496856296 ], [ -96.825509465065551, 33.262335016778763 ], [ -96.834638296135608, 33.262084389305436 ], [ -96.836152539150987, 33.26157459559748 ], [ -96.83684198906316, 33.261018891575134 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "wetland" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.88256169501355, 33.351724853441894 ], [ -96.882025359926359, 33.350597626671622 ], [ -96.882048692486251, 33.348576886732062 ], [ -96.880599338009262, 33.347068547344733 ], [ -96.878508909578855, 33.347699383089846 ], [ -96.877483010663852, 33.347746349636978 ], [ -96.877114617199709, 33.349202148103416 ], [ -96.879142005918013, 33.351171935635847 ], [ -96.879710171275306, 33.352041700400697 ], [ -96.882526194406353, 33.35213277564673 ], [ -96.88256169501355, 33.351724853441894 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "fallow" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.843300556338434, 33.300219745503824 ], [ -96.843156275221205, 33.295680443769918 ], [ -96.840648207726133, 33.295636872184403 ], [ -96.839151121193566, 33.296126873133645 ], [ -96.837639164785443, 33.297218635318707 ], [ -96.837223096650177, 33.304736869027089 ], [ -96.838412142009176, 33.304284537858287 ], [ -96.839298809247964, 33.303633422973761 ], [ -96.83968152259726, 33.302651016883864 ], [ -96.841323811371637, 33.30250755813546 ], [ -96.841815582641402, 33.300215455168832 ], [ -96.843300556338434, 33.300219745503824 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "roadway" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.836995679480651, 33.268784020540309 ], [ -96.837030620662361, 33.267650849066079 ], [ -96.837025658160954, 33.267568519607821 ], [ -96.836850763799831, 33.267571350038381 ], [ -96.836827772771258, 33.268786972502213 ], [ -96.836995679480651, 33.268784020540309 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "roadway" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.833953489274222, 33.26964158126647 ], [ -96.834014052882395, 33.268038898191918 ], [ -96.833860417811991, 33.268030345905657 ], [ -96.833820966853764, 33.269627522356103 ], [ -96.833953489274222, 33.26964158126647 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.83670930114674, 33.268203334272719 ], [ -96.836717557235531, 33.267868631175638 ], [ -96.836612852027031, 33.267860934014109 ], [ -96.836611440719608, 33.268201630754803 ], [ -96.83670930114674, 33.268203334272719 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.83722924835152, 33.268670595491237 ], [ -96.837267845874536, 33.267672601146039 ], [ -96.837169841192051, 33.267676770077927 ], [ -96.837131532188707, 33.268663020376344 ], [ -96.83722924835152, 33.268670595491237 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.840907399279558, 33.265955585985061 ], [ -96.840991950548286, 33.263482967367906 ], [ -96.840818814538565, 33.26346006078451 ], [ -96.840781122544044, 33.265953392136169 ], [ -96.840907399279558, 33.265955585985061 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.841509867203129, 33.265216528605556 ], [ -96.84154902496185, 33.263625302227744 ], [ -96.841391020006483, 33.263629190990216 ], [ -96.841320779980933, 33.265199978549916 ], [ -96.841509867203129, 33.265216528605556 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.841928155630583, 33.265223792646196 ], [ -96.841965348379233, 33.26371212718243 ], [ -96.841846966883196, 33.263710071582082 ], [ -96.84180993523924, 33.265215106817969 ], [ -96.841928155630583, 33.265223792646196 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.842464990886697, 33.265226480375411 ], [ -96.842525524545835, 33.263728485611274 ], [ -96.842320819125788, 33.263705033079631 ], [ -96.842307146118713, 33.265223740074447 ], [ -96.842464990886697, 33.265226480375411 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.842915011650334, 33.265227659019814 ], [ -96.842961873000675, 33.263643198259679 ], [ -96.84283543636765, 33.263647636747748 ], [ -96.842773114382439, 33.265218563157546 ], [ -96.842915011650334, 33.265227659019814 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.814111554723482, 33.25849694914119 ], [ -96.81409312762959, 33.258364244826701 ], [ -96.813408594452923, 33.258361333868955 ], [ -96.81342736167133, 33.258480349739166 ], [ -96.814111554723482, 33.25849694914119 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "trees" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.813947059126178, 33.258338851685544 ], [ -96.813909523349409, 33.258100820038877 ], [ -96.812513647921136, 33.258080826095046 ], [ -96.812496869969209, 33.258317902185631 ], [ -96.813947059126178, 33.258338851685544 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "trees" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.813659324291748, 33.257457342223219 ], [ -96.813679937884757, 33.257284241044346 ], [ -96.812355246535645, 33.25724267354466 ], [ -96.812388825928707, 33.25742129310067 ], [ -96.813659324291748, 33.257457342223219 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.809114377902432, 33.255098553841982 ], [ -96.809151641711196, 33.254399868895433 ], [ -96.808946527698382, 33.254412904475899 ], [ -96.808942971081734, 33.255084431841965 ], [ -96.809114377902432, 33.255098553841982 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.808394487769064, 33.255091413288078 ], [ -96.808411809211563, 33.25439792741021 ], [ -96.808319503388191, 33.254390749556073 ], [ -96.808288559034082, 33.255100646186612 ], [ -96.808394487769064, 33.255091413288078 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.809144253304495, 33.254166624738239 ], [ -96.809209865572498, 33.252597037072256 ], [ -96.809110958497442, 33.252589743503528 ], [ -96.809065015418213, 33.254165228103005 ], [ -96.809144253304495, 33.254166624738239 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.808506934131259, 33.254027732402626 ], [ -96.808553995406839, 33.25240786526944 ], [ -96.80844848560767, 33.252400454773877 ], [ -96.808414628683863, 33.254020554634486 ], [ -96.808506934131259, 33.254027732402626 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.81058171997978, 33.252154979701388 ], [ -96.80912245515006, 33.252129268483721 ], [ -96.809124255806907, 33.252057145886845 ], [ -96.810590260865979, 33.25207742543796 ], [ -96.81058171997978, 33.252154979701388 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.810223475988167, 33.254069084923529 ], [ -96.810252465591986, 33.253436857574265 ], [ -96.810140074316266, 33.25344042792598 ], [ -96.81011122236113, 33.25406710732134 ], [ -96.810223475988167, 33.254069084923529 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.793053196511636, 33.250135484145503 ], [ -96.793076467561349, 33.249071299136972 ], [ -96.792985830934043, 33.249066757203273 ], [ -96.792952018361603, 33.250133687783752 ], [ -96.793053196511636, 33.250135484145503 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.79240317780868, 33.250305774134077 ], [ -96.792437024663897, 33.248960230681767 ], [ -96.792332359056786, 33.248958371914284 ], [ -96.792308977320403, 33.250304101162087 ], [ -96.79240317780868, 33.250305774134077 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "suburban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.794770869202907, 33.25025981680573 ], [ -96.794010286888181, 33.250246321566692 ], [ -96.794022743204934, 33.250167357619446 ], [ -96.794769737528568, 33.250165947820783 ], [ -96.794770869202907, 33.25025981680573 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "roadway" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.786340553974696, 32.821775151414066 ], [ -96.789589478873495, 32.815902195365886 ], [ -96.788805851964881, 32.815888351302668 ], [ -96.785919483750263, 32.821629785617979 ], [ -96.786340553974696, 32.821775151414066 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "roadway" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.784204425534355, 32.826233396617013 ], [ -96.786065643456681, 32.822321951131173 ], [ -96.785577211324977, 32.82225814176811 ], [ -96.783815308285412, 32.826116172384644 ], [ -96.784204425534355, 32.826233396617013 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.790354729682079, 32.823252845853787 ], [ -96.790806541775538, 32.822157495421706 ], [ -96.790548728538923, 32.822015027282823 ], [ -96.789832268390171, 32.823243618391217 ], [ -96.790354729682079, 32.823252845853787 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.789089902064745, 32.822503883145629 ], [ -96.789462837169452, 32.821917827342844 ], [ -96.789394447497784, 32.82166442986653 ], [ -96.788566335938356, 32.821334560615917 ], [ -96.787712837593631, 32.822630857212474 ], [ -96.788040301501582, 32.822674474848 ], [ -96.78846146292075, 32.821950570696657 ], [ -96.788756883423773, 32.822081886284394 ], [ -96.788690925819836, 32.822332909879314 ], [ -96.789089902064745, 32.822503883145629 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.789702047486301, 32.821304189267046 ], [ -96.790342468677224, 32.820168038446468 ], [ -96.789928260827935, 32.820009409776546 ], [ -96.789286586414903, 32.821195974111056 ], [ -96.789702047486301, 32.821304189267046 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.791653924147241, 32.823293120166767 ], [ -96.791534816284269, 32.823278408500514 ], [ -96.790908174211978, 32.823254737230705 ], [ -96.790887058908865, 32.822901299371864 ], [ -96.791234498686265, 32.822138255367591 ], [ -96.791571273956762, 32.822408998580251 ], [ -96.79121483793331, 32.822932304843171 ], [ -96.791364112182549, 32.822934939812647 ], [ -96.791763457404201, 32.822488047193332 ], [ -96.791982688223584, 32.822681058046868 ], [ -96.791653924147241, 32.823293120166767 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.792079211431755, 32.816970668457422 ], [ -96.790964097928864, 32.816774455850243 ], [ -96.791004247901512, 32.816359051819717 ], [ -96.791892653705034, 32.816664749169746 ], [ -96.792101311199744, 32.816681040303195 ], [ -96.792079211431755, 32.816970668457422 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.794993247061512, 32.818093856167252 ], [ -96.79514998880606, 32.817793990228182 ], [ -96.794810103590024, 32.817649296750858 ], [ -96.794621950054861, 32.818011656097987 ], [ -96.794993247061512, 32.818093856167252 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.792200537378278, 32.816291897014473 ], [ -96.792342358501315, 32.815991771438831 ], [ -96.792017099353856, 32.815859938119921 ], [ -96.79187527739434, 32.81616006329493 ], [ -96.792200537378278, 32.816291897014473 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.790931330565613, 32.814478952123423 ], [ -96.791364856696916, 32.813856129963298 ], [ -96.790950363464191, 32.813710109677743 ], [ -96.790620380963105, 32.814372586888489 ], [ -96.790931330565613, 32.814478952123423 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.793681360888471, 32.81619191915275 ], [ -96.793312878468527, 32.815996279637147 ], [ -96.793422972818931, 32.815771250183268 ], [ -96.793821930430454, 32.815942207656178 ], [ -96.793681360888471, 32.81619191915275 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.795167543915639, 32.814061889313862 ], [ -96.795543515114659, 32.813349771304992 ], [ -96.795083616170601, 32.813228183769851 ], [ -96.794783206143279, 32.81390380335845 ], [ -96.795167543915639, 32.814061889313862 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.779796647903183, 32.812478752295902 ], [ -96.779255693440675, 32.812015214119178 ], [ -96.779957001905814, 32.811435012907893 ], [ -96.780350583058592, 32.811820277624676 ], [ -96.779833083834021, 32.812214600330854 ], [ -96.779796647903183, 32.812478752295902 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.777069812943424, 32.811648560996026 ], [ -96.775811044992352, 32.81063005055281 ], [ -96.7760262795194, 32.810381686859394 ], [ -96.77723901499273, 32.811449815318838 ], [ -96.777069812943424, 32.811648560996026 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.782164176261375, 32.812747702141706 ], [ -96.781403397559529, 32.812116354160494 ], [ -96.781555785886439, 32.811992961073734 ], [ -96.782286087063895, 32.812648986957392 ], [ -96.782164176261375, 32.812747702141706 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.773162730953786, 32.808451962797669 ], [ -96.772153682115501, 32.807601782762049 ], [ -96.772627040601606, 32.807181487382195 ], [ -96.773665624797616, 32.808044798468025 ], [ -96.773162730953786, 32.808451962797669 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.777104659473068, 32.810249532254716 ], [ -96.776621548927352, 32.809862667248318 ], [ -96.776864745714889, 32.809690455382274 ], [ -96.77731769232598, 32.810089393191838 ], [ -96.777104659473068, 32.810249532254716 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.780938601060484, 32.801982717830484 ], [ -96.780102673400009, 32.801375250143508 ], [ -96.780344899686241, 32.801240841744374 ], [ -96.78082704292035, 32.801665503295325 ], [ -96.781485364435753, 32.801008871421296 ], [ -96.781896338024524, 32.801293563317628 ], [ -96.780938601060484, 32.801982717830484 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.784904936435012, 32.799783266446802 ], [ -96.784524118945882, 32.799486508586121 ], [ -96.784858688562736, 32.799240240122657 ], [ -96.785076598925713, 32.799483676482772 ], [ -96.784904936435012, 32.799783266446802 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.780574970603098, 32.79799167809302 ], [ -96.78023800488802, 32.797733513577896 ], [ -96.780364282532659, 32.79745834441858 ], [ -96.780161626478559, 32.797202561264555 ], [ -96.780314929654097, 32.797041356646886 ], [ -96.781005974136463, 32.797469721358539 ], [ -96.780574970603098, 32.79799167809302 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.78111806280387, 32.796563825977174 ], [ -96.780602652692224, 32.796277280338018 ], [ -96.780846430106109, 32.796079850621567 ], [ -96.781271676323215, 32.796390016123617 ], [ -96.78111806280387, 32.796563825977174 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "trees" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.764528515656608, 32.801387984219495 ], [ -96.765825714805729, 32.800266011641874 ], [ -96.765580927015733, 32.800078420731921 ], [ -96.764438730457812, 32.801074904399464 ], [ -96.764528515656608, 32.801387984219495 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "trees" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.760832850097614, 32.802989237408831 ], [ -96.761936155947382, 32.802248602831575 ], [ -96.761702214019124, 32.802061198375732 ], [ -96.760674576521438, 32.802812345785028 ], [ -96.760832850097614, 32.802989237408831 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "trees" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.763791110985679, 32.800513672017175 ], [ -96.764177927366291, 32.800227427999133 ], [ -96.763750661075306, 32.799963285444548 ], [ -96.763559233646674, 32.80024385831446 ], [ -96.763791110985679, 32.800513672017175 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "trees" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.760985877426819, 32.801645299828564 ], [ -96.76193691388859, 32.800920262871117 ], [ -96.761438398994756, 32.800902187120364 ], [ -96.760903502086293, 32.801469766180062 ], [ -96.760985877426819, 32.801645299828564 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "trees" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.75995112429392, 32.812189472680139 ], [ -96.761246246372025, 32.811159127987189 ], [ -96.760968680054134, 32.810980102476364 ], [ -96.759670339401907, 32.812138641240757 ], [ -96.75995112429392, 32.812189472680139 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "trees" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.761613269040311, 32.810799251236269 ], [ -96.762697507596599, 32.809957500414171 ], [ -96.762308753208927, 32.809886422716566 ], [ -96.761300416310974, 32.810729527881193 ], [ -96.761613269040311, 32.810799251236269 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "trees" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.761875937205303, 32.809842039001332 ], [ -96.760806075572788, 32.809245755660818 ], [ -96.761303210429759, 32.808888207445968 ], [ -96.762153679590639, 32.809581335273663 ], [ -96.761875937205303, 32.809842039001332 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "trees" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.763506342744577, 32.809715447845576 ], [ -96.762962971558039, 32.809320972226381 ], [ -96.763360214665653, 32.80905324059318 ], [ -96.763512308727314, 32.809477367085961 ], [ -96.763717873034494, 32.80949936252243 ], [ -96.763506342744577, 32.809715447845576 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "trees" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.758203691434105, 32.812222309448337 ], [ -96.758908950994993, 32.811786050302899 ], [ -96.75833608197739, 32.811702501883751 ], [ -96.757983567108965, 32.811916051878526 ], [ -96.757954978398118, 32.812190370763155 ], [ -96.758203691434105, 32.812222309448337 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "lawn" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.750688355845341, 32.815990049342226 ], [ -96.751017138465102, 32.815858543499878 ], [ -96.751152805334542, 32.815641117325576 ], [ -96.750123320255014, 32.815595129272744 ], [ -96.748949400245422, 32.815683949789417 ], [ -96.749062216004958, 32.81594248734126 ], [ -96.749291083076514, 32.816331366253145 ], [ -96.750283202314193, 32.816138503339822 ], [ -96.750688355845341, 32.815990049342226 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "lawn" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.744330608594964, 32.815142729369256 ], [ -96.74480502812726, 32.814400078233895 ], [ -96.74481081363129, 32.814171157538347 ], [ -96.744321455935633, 32.814217303737614 ], [ -96.744163819989168, 32.814874053959841 ], [ -96.744330608594964, 32.815142729369256 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "lawn" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.746324520627212, 32.814803053370774 ], [ -96.745597057983829, 32.814826594162973 ], [ -96.744705283880336, 32.815341863392987 ], [ -96.744720293660848, 32.815177235960661 ], [ -96.745079561904575, 32.814698177356952 ], [ -96.745646216804218, 32.814598454756236 ], [ -96.746350833632548, 32.81462030721044 ], [ -96.746324520627212, 32.814803053370774 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "lawn" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.744754082352131, 32.813840339211602 ], [ -96.744696921798692, 32.813097268153015 ], [ -96.744541441968323, 32.812810475047392 ], [ -96.744310949143141, 32.812916252648755 ], [ -96.744433631492441, 32.813642182809616 ], [ -96.744622800607104, 32.813883778228963 ], [ -96.744754082352131, 32.813840339211602 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "lawn" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.746185196053943, 32.81430585007017 ], [ -96.745471820195135, 32.814201389942028 ], [ -96.745250579625647, 32.813940895895051 ], [ -96.745087092170749, 32.812682893095356 ], [ -96.74535216649349, 32.812925855122458 ], [ -96.745486887246599, 32.813175629295969 ], [ -96.745580287001047, 32.813772776994604 ], [ -96.745652260390173, 32.813929810589549 ], [ -96.745876046554699, 32.814089578793705 ], [ -96.746157059055648, 32.814131284275511 ], [ -96.746185196053943, 32.81430585007017 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "lawn" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.750282523634851, 32.815304839152951 ], [ -96.749000861177834, 32.815364240215793 ], [ -96.749017711036032, 32.815126357099587 ], [ -96.749819236468213, 32.815177416288329 ], [ -96.750221615754725, 32.815138845946507 ], [ -96.750282523634851, 32.815304839152951 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "lawn" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.747012670445841, 32.812039660016609 ], [ -96.745178297849179, 32.811649343245435 ], [ -96.744598305628884, 32.811419027819724 ], [ -96.744603859589219, 32.811199263878805 ], [ -96.745211089749461, 32.811210205932383 ], [ -96.745379957444044, 32.81139646840932 ], [ -96.745822224946934, 32.811496045514801 ], [ -96.745873435412548, 32.811616060984896 ], [ -96.746682070573669, 32.811813843639186 ], [ -96.746962151744938, 32.811892174408591 ], [ -96.747012670445841, 32.812039660016609 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "lawn" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.748854003024434, 32.811724677546579 ], [ -96.746178540897361, 32.809844320953069 ], [ -96.746606513645872, 32.809650485419169 ], [ -96.747927043195574, 32.810627000560849 ], [ -96.748391906457968, 32.811120898680691 ], [ -96.748752497908399, 32.811448021252808 ], [ -96.748945832329682, 32.811524787082959 ], [ -96.748854003024434, 32.811724677546579 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "lawn" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.747268774535172, 32.811778601176478 ], [ -96.746812446076945, 32.811376462729058 ], [ -96.74620706412037, 32.81129227366479 ], [ -96.746202926947376, 32.811026529988304 ], [ -96.746831843381699, 32.811037854690532 ], [ -96.747165214716304, 32.811153788423113 ], [ -96.747245258814687, 32.81142089855804 ], [ -96.747268774535172, 32.811778601176478 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "lawn" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.743558032414782, 32.811372792540126 ], [ -96.743283513484869, 32.811074690597543 ], [ -96.742256405506382, 32.810937072042385 ], [ -96.741946350576541, 32.810757419129743 ], [ -96.741167254196924, 32.810679232379655 ], [ -96.741171194128526, 32.81052356660598 ], [ -96.742136246912494, 32.810540981418598 ], [ -96.742305338395951, 32.810718090913568 ], [ -96.742846346434902, 32.810773654674129 ], [ -96.742985688674025, 32.810840294755238 ], [ -96.743440414333932, 32.810875977850138 ], [ -96.743714933238195, 32.811174079453259 ], [ -96.743721146528671, 32.811357411457557 ], [ -96.743558032414782, 32.811372792540126 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "deep water" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.728552873491338, 32.831617573508545 ], [ -96.726801070132367, 32.826470918697936 ], [ -96.728844952303618, 32.823363100142203 ], [ -96.724509800804839, 32.818411414644345 ], [ -96.721555496358675, 32.818703253231966 ], [ -96.722105971953255, 32.822791319625686 ], [ -96.719367841055956, 32.824227506357595 ], [ -96.717746009746762, 32.826824465673354 ], [ -96.721386724390982, 32.828515128149576 ], [ -96.723168232945369, 32.832487363030793 ], [ -96.728552873491338, 32.831617573508545 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.667273990895808, 32.796265269755907 ], [ -96.664890126355957, 32.795512664983185 ], [ -96.665142505980114, 32.795123952980191 ], [ -96.667470493771262, 32.795875511531925 ], [ -96.667273990895808, 32.796265269755907 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.665372434449864, 32.799156860860087 ], [ -96.665441761651749, 32.797930684232824 ], [ -96.664116514432408, 32.797307961586192 ], [ -96.663155300399552, 32.798438804982936 ], [ -96.663853526952451, 32.798813784837101 ], [ -96.663921436397686, 32.799066840839387 ], [ -96.665018173663285, 32.799165989362372 ], [ -96.665372434449864, 32.799156860860087 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.674949810499143, 32.795574030302426 ], [ -96.674988716985695, 32.79407975284181 ], [ -96.673617602145569, 32.793786752090739 ], [ -96.673628805030901, 32.795502275585875 ], [ -96.674949810499143, 32.795574030302426 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "urban" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.678103077954717, 32.797552457670655 ], [ -96.678168137996181, 32.796483558474506 ], [ -96.676679505265966, 32.796408726140008 ], [ -96.676759731788565, 32.797621952429893 ], [ -96.678103077954717, 32.797552457670655 ] ] ] } }, +{ "type": "Feature", "properties": { "type": "roadway" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -96.685725820175776, 32.797473311094592 ], [ -96.685697542263398, 32.797126576728047 ], [ -96.680031980825589, 32.798611119894417 ], [ -96.68036026104005, 32.798884730728339 ], [ -96.681980285463695, 32.798206584056281 ], [ -96.682763296702959, 32.798189608607345 ], [ -96.683702234442336, 32.797907986917032 ], [ -96.685725820175776, 32.797473311094592 ] ] ] } } +] +}