diff --git a/Use_cases/Enhanced_Combined_Drought_Index/00_EnhancedDroughtIndex.ipynb b/Use_cases/Enhanced_Combined_Drought_Index/00_EnhancedDroughtIndex.ipynb new file mode 100644 index 00000000..1990a13c --- /dev/null +++ b/Use_cases/Enhanced_Combined_Drought_Index/00_EnhancedDroughtIndex.ipynb @@ -0,0 +1,254 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a1ee47cf-3544-4245-9884-92989e9f8877", + "metadata": {}, + "source": [ + "\n", + "\n", + "# Enhanced Combined Drought Index" + ] + }, + { + "cell_type": "markdown", + "id": "4d6ce758-4950-4cea-96e6-ee58a302108a", + "metadata": {}, + "source": [ + "## Background " + ] + }, + { + "cell_type": "markdown", + "id": "1d1c29f8-816c-414b-8d63-efd95a7a647c", + "metadata": {}, + "source": [ + "Drought is an extended period, during which fresh water availability and accessibility for the ecosystem at a given place is below normal due to unfavourable spatial and temporal distribution of rainfall, temperature, soil moisture and wind characteristics [(Balint et al., 2013)](https://doi.org/10.1016/B978-0-444-59559-1.00023-2). Severe droughts can affect large populations, threatening people's livelihoods and resulting in economic loss [(Enenkel et al., 2016)](https://doi.org/10.3390/rs8040340)." + ] + }, + { + "cell_type": "markdown", + "id": "d93fb910-bc48-4a5b-a885-131251436d75", + "metadata": {}, + "source": [ + "The Enhanced Combined Drought Index (ECDI) provides timely and reliable detection of drought events with regard to their spatio-temporal extent and severity. The Enhanced Drought Index is a combination of the following:\n", + "\n", + "- **Vegetation** component which considers NDVI anomalies and their persistence. The index based on the vegetation component is named as **Vegetation Drought Index (VDI)**.\n", + "- **Precipitation** component, which considers rainfall deficits and dryness persistence. The index calculated using the precipitation component is referred as the **Precipitation Drought Index (PDI)**.\n", + "- **Temperature** component, which considers temperature excesses and persistence of high temperatures. The index based on temperature is named as **Temperature Drought Index (TDI)**.\n", + "- **Soil moisture** component, which considers soil moisture deficits and deficit persistence. The index based on soil moisture is named as the **Soil Moisture Drought Index (SMDI)**.\n", + "\n", + "The index uses **satellite-derived** rainfall, soil moisture, land surface temperature, and vegetation status as input datasets [(Enenkel et al., 2016)](https://doi.org/10.3390/rs8040340)." + ] + }, + { + "cell_type": "markdown", + "id": "6fa3a6ca-552c-44ee-a3cc-c77d1c2470f0", + "metadata": {}, + "source": [ + "### Enhanced Drought Index Formulae" + ] + }, + { + "cell_type": "markdown", + "id": "ecca9fa6-651b-415b-9552-b13e0e96ffbd", + "metadata": {}, + "source": [ + "Each drought index can be expressed as:\n", + "\n", + "$\\text{Drought Index} = \\frac{\\text{Actual Average for Interest Period}}{\\text{Long Term Average for Interest Period}} * \\sqrt{\\frac{\\text{Actual Length of Continuous Deficit or Excess in the Interest Period}}{\\text{Long Term Average of Continuous Deficit or Excess in the Interest Period}}}$" + ] + }, + { + "cell_type": "markdown", + "id": "7fcf3b69-9a11-4ce8-ab76-34f1dfc54ccf", + "metadata": {}, + "source": [ + "Each drought index is calculated similarly. The equation below illustrates the calculation of the ECDI precipitation component:\n", + "\n", + "\\begin{equation}\n", + "\\text{PDI}_{y,d} = \\frac{\n", + "\\frac{1}{\\text{IP}} \\sum_{j=0}^{\\text{IP} - 1} P^*_{y,(d-j)}}{\\frac{1}{n}\\sum_{k=1}^n[\\frac{1}{\\text{IP}} \\sum_{j=0}^{\\text{IP} - 1} P^*_{(d-j), k}]} * \\sqrt{\\frac{(\\text{RL}^*)P^*_{d, y}}{\\frac{1}{n}\\sum_{k=1}^{n}(\\text{RL}^*)P^*_{d, k}}}\n", + "\\end{equation}\n", + "\n", + "- $\\text{PDI}_{y,d}$ is the Precipitation Drought Index for year $\\text{y}$ and time unit (dekad/month) $\\text{d}$\n", + "\n", + "- $P^*$ is the modified dekadal/monthly precipitation average \n", + "\n", + "- $\\text{RL}*$ is the modified run length parameter \n", + "\n", + "- $\\text{RL*}(P*)$ (run length) is the maximum number of successive dekads/months below the long-term average rainfall in the interest period\n", + "> **Note**: For temperature, run length is the maximum number of successive dekads/months above the long-term average temperature in the interest period\n", + "\n", + "- $\\text{IP}$ is the interest period (e.g. 3, 4, 5, . . . dekads/months) (longer IPs detect more severe drought events). IP is flexible defines to what extent past observations are considered.\n", + "\n", + "- $n$ is the number of years where relevant data are available,\n", + "\n", + "- $j$ is the summation running parameter covering the Interest Period\n", + "\n", + "- $k$ is the summation parameter covering the years where relevant data are available\n", + "\n", + "- $d$ time unit (dekad or month) \n", + "\n", + "- $y$ year" + ] + }, + { + "cell_type": "markdown", + "id": "ef502771-249d-4f52-bc39-7f49491e3fe2", + "metadata": {}, + "source": [ + "The raw time series of temperature and precipitation as well as the run length are modified to adjust the range of all variables and to avoid a division by zero.\n", + "\n", + "\\begin{equation}\n", + "T^* = (T_{max} + 1) - T\n", + "\\end{equation}\n", + "\n", + "\\begin{equation}\n", + "P^* = P + 1\n", + "\\end{equation}\n", + "\n", + "\\begin{equation}\n", + "\\text{RL}^* = (\\text{RL}_{max} + 1) - \\text{RL}\n", + "\\end{equation}\n", + "\n", + "\\begin{equation}\n", + "\\text{NDVI}^* = \\text{NDVI} - (\\text{NDVI}_{min} -0.01)\n", + "\\end{equation}\n", + "\n", + "\n", + "- $T^*$ is the modified dekadal/monthly temperature average \n", + "- $P^*$ is the modified dekadal/monthly precipitation average \n", + "- $\\text{RL}^*$ is the modified run length" + ] + }, + { + "cell_type": "markdown", + "id": "67e6e6b9-a159-4fcc-b976-3ab9db86922e", + "metadata": {}, + "source": [ + "All the individual drought indices differ in range. To improve their interpretability and visual comparability a simple scaling factor is introduced.\n", + "\n", + "\\begin{equation}\n", + "PDI_{scaled} = \\frac{(PDI - PDI_{min})}{(PDI_{max} - PDI_{min})}\n", + "\\end{equation}" + ] + }, + { + "cell_type": "markdown", + "id": "e6caab44-32ee-4d7d-87b8-2486108f5cf7", + "metadata": {}, + "source": [ + "\n", + "The **weight** of each individual drought index is automatically calculated for every grid point (pixel) with respect to its capability to reflect the future vegetation status (NDVI) and multiplied by the respective individual index to calculate the ECDI. In the case of data gaps in one input dataset, the weights are automatically redistributed to other available variables.\n", + "\n", + "\\begin{equation}\n", + "ECDI = \\sum_{i-1}^{n}w_{i} * \\text{DI}_{i}\n", + "\\end{equation}\n", + "\n", + "- $ECDI$ Enhanced Combined Drought Index \n", + "\n", + "- $w$ Weight for each individual drought index (e.g., rainfall)\n", + "\n", + "- $\\text{DI}$ Individual drought index \n", + "\n", + "- $n$ number of drought indices used to calculate the ECDI \n", + "\n", + "- $i$ running parameter covering the number of drought indices\n", + "\n", + "\\begin{equation}\n", + "w_{i} = \\frac{\\frac{lag^*_{i}}{\\sum_{j=1}^{n} lag^*_{j}} + \\frac{corr^*_{i}}{\\sum_{j=1}^{n} corr^*_{j}}}{2}\n", + "\\end{equation}\n", + "\n", + "- $w$ weight for the respective drought index \n", + "\n", + "- $lag^*$ modified time lag for the respective parameter \n", + "\n", + "- $corr^*$ modified correlation coefficient for the respective parameter \n", + "\n", + "- $i$ index for the respective parameter/drought index \n", + "\n", + "- $j$ running parameter covering all parameters used for the ECDI calculation\n", + "\n", + "- $n$ number of individual drought indices used for the ECDI calculation" + ] + }, + { + "cell_type": "markdown", + "id": "9568d111-65c6-4dc8-a713-21a41c739e3c", + "metadata": {}, + "source": [ + "There are five primary notebooks in this notebook series, each represent a critical step in a ECDI workflow. \n", + "\n", + "1. The `Vegetation Drought Index notebook` calculates the Vegetation Drought Index using Landsat Surface Reflectance Collections 5, 7, 8, and 9.\n", + " \n", + "2. The `Precipitation Drought Index notebook` calculates the Precipitation Drought Index using CHIRPS.\n", + "\n", + "3. The `Temperature Drought Index notebook` calculates the Temperature Drought Index using Landsat Surface Temperature Collections 5, 7, 8, and 9\n", + "\n", + "4. The `Soil Moisture Drought Index`notebook calculates the Soil Moisture Drought Index using WAPOR.\n", + "\n", + "5. The `Enhanced Combined Drought Index` notebook combines the indices calculated from Step 1 to 4 to compute the ECDI results" + ] + }, + { + "cell_type": "markdown", + "id": "c78f1f54-fea9-41b0-ba00-cb4f8724a5a1", + "metadata": { + "jp-MarkdownHeadingCollapsed": true + }, + "source": [ + "## Getting Started\n", + "\n", + "To begin, work through the notebooks in this workflow, starting with Notebook 1 below:\n", + "\n", + "1. [VegetationDroughtIndex](01_VegetationDroughtIndex.ipynb)\n", + "2. [PrecipitationDroughtIndex](02_PrecipitationDroughtIndex.ipynb)\n", + "3. [TemperatureDroughtIndex](03_TemperatureDroughtIndex.ipynb)\n", + "4. [SoilMoistureDroughtIndex](04_SoilMoistureDroughtIndex.ipynb)\n", + "5. [EnhancedCombinedDroughtIndex](05_EnhancedCombinedDroughtIndex.ipynb)" + ] + }, + { + "cell_type": "markdown", + "id": "2792a22b-6593-42ea-a5c4-a2c3c7704063", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## Additional information\n", + "\n", + " License The code in this notebook is licensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0).\n", + "\n", + "Digital Earth Africa data is licensed under the [Creative Commons by Attribution 4.0](https://creativecommons.org/licenses/by/4.0/) license.\n", + "\n", + " Contact If you need assistance, please post a question on the [DE Africa Slack channel](https://digitalearthafrica.slack.com/) or on the [GIS Stack Exchange](https://gis.stackexchange.com/questions/ask?tags=open-data-cube) using the `open-data-cube` tag (you can view previously asked questions [here](https://gis.stackexchange.com/questions/tagged/open-data-cube)).\n", + "\n", + "If you would like to report an issue with this notebook, you can file one on [Github](https://github.com/digitalearthafrica/deafrica-sandbox-notebooks).\n", + "\n", + " Compatible datacube version " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Use_cases/Enhanced_Combined_Drought_Index/01_VegetationDroughtIndex.ipynb b/Use_cases/Enhanced_Combined_Drought_Index/01_VegetationDroughtIndex.ipynb new file mode 100644 index 00000000..b93cadf0 --- /dev/null +++ b/Use_cases/Enhanced_Combined_Drought_Index/01_VegetationDroughtIndex.ipynb @@ -0,0 +1,6368 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a1ee47cf-3544-4245-9884-92989e9f8877", + "metadata": {}, + "source": [ + "\n", + "\n", + "# Enhanced Combined Drought Index - Vegetation Drought Index\n", + "\n", + "* **Products used:** \n", + "[ls5_sr](https://explorer.digitalearth.africa/products/ls5_sr),\n", + "[ls7_sr](https://explorer.digitalearth.africa/products/ls7_sr),\n", + "[ls8_sr](https://explorer.digitalearth.africa/products/ls8_sr),\n", + "[ls9_sr](https://explorer.digitalearth.africa/products/ls9_st)" + ] + }, + { + "cell_type": "raw", + "id": "5f36c0bc-9aba-4e41-9698-96cc57458962", + "metadata": {}, + "source": [ + "**Keywords**: :index:`data used; landsat 9`, :index:`data used; landsat 8`, :index:`data used; landsat 7`, :index:`data used; landsat 5`, :index:`surface reflectance`, :index:`band index; NDVI`; " + ] + }, + { + "cell_type": "markdown", + "id": "4d6ce758-4950-4cea-96e6-ee58a302108a", + "metadata": {}, + "source": [ + "## Background " + ] + }, + { + "cell_type": "markdown", + "id": "1d1c29f8-816c-414b-8d63-efd95a7a647c", + "metadata": {}, + "source": [ + "Drought is an extended period during which fresh water availability and accessibility for the ecosystem at a given place is below normal, due to unfavourable spatial and temporal distribution of rainfall, temperature, soil moisture and wind characteristics [(Balint et al., 2013)](https://doi.org/10.1016/B978-0-444-59559-1.00023-2). Severe droughts can affect large populations, threatening people’s livelihoods and resulting economic loss [(Enenkel et al., 2016)](https://doi.org/10.3390/rs8040340)." + ] + }, + { + "cell_type": "markdown", + "id": "48d311ac-d044-47a6-b4db-420c76c297fb", + "metadata": {}, + "source": [ + "The **Enhanced Drought Index** is a combination of the following components: Vegetation, Precipitation, Temperature and Soil moisture.\n", + "\n", + "This notebook will focus on the **Vegetation component**, which considers Normalized Difference Vegetation Index (NDVI) deficits and the persistence of these deficits. The index based on the vegetation component is called the Vegetation Drought Index (VDI). The VDI is a remote sensing-based indicator designed to assess the impact of drought on vegetation health. The VDI provides a way to monitor the health of vegetation under drought stress over large areas and is useful in agricultural, forestry, and environmental monitoring." + ] + }, + { + "cell_type": "markdown", + "id": "4630c991-7329-4ef8-8d34-e4dd5a2ef280", + "metadata": {}, + "source": [ + "\n", + "The notebook outlines:\n", + "\n", + "***\n", + "1. Loading Python and DE Africa Packages\n", + "2. Setting dask cluster\n", + "3. Loading area on interest\n", + "5. Load Landsat Surface reflectance and Calculate the Normalized Difference Vegetation Index (NDVI)\n", + "6. Resampling of data to dekadal (10-day) intervals\n", + "7. Calculate the Vegetation Drought Index\n", + "8. Export the result as zip" + ] + }, + { + "cell_type": "markdown", + "id": "ec6d4e07-18c3-4830-b669-77e01b021a53", + "metadata": {}, + "source": [ + "## Getting started\n", + "\n", + "To run this analysis, run all the cells in the notebook, starting with the \"Load packages\" cell. " + ] + }, + { + "cell_type": "markdown", + "id": "3251008f-3b84-41eb-876d-d68059b0c6de", + "metadata": {}, + "source": [ + "### Load packages" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "73f5d02f-aee0-452f-81b3-ff22d921457f", + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "import os\n", + "\n", + "import dask\n", + "import geopandas as gpd\n", + "import numpy as np\n", + "import pandas as pd\n", + "import rioxarray\n", + "import toolz\n", + "import xarray as xr\n", + "import datacube\n", + "from deafrica_tools.bandindices import calculate_indices\n", + "from deafrica_tools.dask import create_local_dask_cluster\n", + "from deafrica_tools.datahandling import load_ard\n", + "from dekad import group_by_dekad, bin_by_interest_period, get_dekad_no_in_year, get_no_data_mask, max_consecutive_ones\n", + "from odc.geo.geobox import GeoBox\n", + "from odc.geo.geom import Geometry\n", + "from odc.geo.xr import rasterize\n", + "from pyarrow import Table\n", + "from pyarrow.parquet import write_table" + ] + }, + { + "cell_type": "markdown", + "id": "1cebec83-8c5b-4b87-a652-f7ab00d33ced", + "metadata": {}, + "source": [ + "### Connect to the datacube\n", + "\n", + "Connect to the datacube so we can access DE Africa data.\n", + "The `app` parameter is a unique name for the analysis which is based on the notebook file name." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "2ee46b55-a5c7-4404-991f-02d3e1b234df", + "metadata": {}, + "outputs": [], + "source": [ + "# Connect to the datacube\n", + "dc = datacube.Datacube(app=\"VegetationDroughtIndex\")" + ] + }, + { + "cell_type": "markdown", + "id": "8143eda0-f831-4f4c-bb2b-675587cfb09c", + "metadata": {}, + "source": [ + "### Set up a Dask cluster\n", + "\n", + "Dask can be used to better manage memory use and conduct the analysis in parallel. \n", + "For an introduction to using Dask with Digital Earth Africa, see the [Dask notebook](../../Beginners_guide/08_Parallel_processing_with_dask.ipynb).\n", + "\n", + ">**Note**: We recommend opening the Dask processing window to view the different computations that are being executed; to do this, see the *Dask dashboard in DE Africa* section of the [Dask notebook](../../Beginners_guide/08_Parallel_processing_with_dask.ipynb).\n", + "\n", + "To use Dask, set up the local computing cluster using the cell below." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e7bf7690-e8b4-468a-a9e6-9632953dd918", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/venv/lib/python3.12/site-packages/distributed/node.py:187: UserWarning: Port 8787 is already in use.\n", + "Perhaps you already have a cluster running?\n", + "Hosting the HTTP server on port 45637 instead\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "
\n", + "
\n", + "

Client

\n", + "

Client-a8eb349a-3464-11f0-8f51-62a7079d079f

\n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
Connection method: Cluster objectCluster type: distributed.LocalCluster
\n", + " Dashboard: /user/mickwelli@bigpond.com/proxy/45637/status\n", + "
\n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + "
\n", + "

Cluster Info

\n", + "
\n", + "
\n", + "
\n", + "
\n", + "

LocalCluster

\n", + "

4564d528

\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + "
\n", + " Dashboard: /user/mickwelli@bigpond.com/proxy/45637/status\n", + " \n", + " Workers: 1\n", + "
\n", + " Total threads: 2\n", + " \n", + " Total memory: 11.21 GiB\n", + "
Status: runningUsing processes: True
\n", + "\n", + "
\n", + " \n", + "

Scheduler Info

\n", + "
\n", + "\n", + "
\n", + "
\n", + "
\n", + "
\n", + "

Scheduler

\n", + "

Scheduler-8d8f7fe0-2d4c-4634-b7f7-d82d9157ea39

\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " Comm: tcp://127.0.0.1:33041\n", + " \n", + " Workers: 1\n", + "
\n", + " Dashboard: /user/mickwelli@bigpond.com/proxy/45637/status\n", + " \n", + " Total threads: 2\n", + "
\n", + " Started: Just now\n", + " \n", + " Total memory: 11.21 GiB\n", + "
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "

Workers

\n", + "
\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 0

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:37563\n", + " \n", + " Total threads: 2\n", + "
\n", + " Dashboard: /user/mickwelli@bigpond.com/proxy/32879/status\n", + " \n", + " Memory: 11.21 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:35859\n", + "
\n", + " Local directory: /tmp/dask-scratch-space/worker-83eftupu\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "\n", + "
\n", + "
\n", + "\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "\n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "create_local_dask_cluster()" + ] + }, + { + "cell_type": "markdown", + "id": "50542e91-46c5-4de9-823a-88c505db1a40", + "metadata": {}, + "source": [ + "### Analysis parameters\n", + "\n", + "The following cell sets important parameters for the analysis:\n", + "\n", + "* `resolution`: The x and y cell resolution of the satellite data in metres (spatial resolution). We'll use 5,000 m, which is approximately equal to the default CHIRPS resolution.\n", + "* `output_crs` : The coordinate reference system that the loaded data is to be reprojected to.\n", + "* `dask_chunks`: the size of the dask chunks, dask breaks data into manageable chunks that can be easily stored in memory, e.g. `dict(x=1000,y=1000)`\n", + "* `time_range` : Time range to load data for.\n", + "* `ip` : The interest period to use to calculate the drought indices e.g. (3, 4, 5 dekads). It defines to what extent past observations are considered. Longer IPs detect more severe drought events. For example, if the IP=3 dekads, then the drought index (say PDI) of 0.35 for dekad 2 of 2006 implies actual drought for dekad 36 of 2005, dekad 1 of 2006 and dekad 2 of 2006.\n", + "* `output_dir` : The directory in which to store results from the analysis.\n", + "\n", + "**If running the notebook for the first time**, keep the default settings below.\n", + "This will demonstrate how the analysis works and provide meaningful results." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "cc3c12d5-0a20-48db-8044-070ee03b3ddb", + "metadata": {}, + "outputs": [], + "source": [ + "resolution = (-5000, 5000)\n", + "output_crs = \"EPSG:6933\"\n", + "dask_chunks = dict(x=100,y=100)\n", + "time_range = (\"2014\",\"2025\")\n", + "output_dir = \"results\"\n", + "\n", + "# Corresponding to the six-months Standardized Precipitation Evapotranspiration Index\n", + "ip = 18\n", + "\n", + "# Create the outpur directory if it does not exist.\n", + "os.makedirs(output_dir, exist_ok=True)\n", + "\n", + "# Create the output folder for the selected country\n", + "output_path = os.path.join(output_dir, \"VDI_Amhara.parquet\")" + ] + }, + { + "cell_type": "markdown", + "id": "f962ad84-2bff-46b3-a058-e1eeb979f4f5", + "metadata": {}, + "source": [ + "Below, a vector dataset is called and read which contains the extents of level 1 administrative boundaries in Ethiopia. In the default case, the regional state of Amhara is northern Ethiopia is the area of interest. This can be replaced with any administrative boundary, such as those available on the [GADM database](https://gadm.org/data.html). Larger areas have a larger processing and memory burden and may require additional resources (larger instances) to run effectively." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "60ab10bc-8e2b-45ec-a512-08ee27eecf77", + "metadata": {}, + "outputs": [], + "source": [ + "# Read GADM Ethiopia level 1 file\n", + "eth = gpd.read_file('data/gadm41_ETH_1.json')\n", + "\n", + "# Select the country of interest by providing the name below\n", + "idx = eth[eth['NAME_1'] == 'Amhara'].index[0]\n", + "geopolygon = Geometry(geom=eth.iloc[idx].geometry, crs=eth.crs)" + ] + }, + { + "cell_type": "markdown", + "id": "316d2648-b4b8-4338-acb2-8bf368cb220b", + "metadata": {}, + "source": [ + "### Load Landsat surface reflectance data\n", + "Load the Landsat surface reflectance data from the datacube using the analysis parameters set in the previous section and the measurements used to calculate the **NDVI** spectral index." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "529949fc-f949-4159-8a95-30cf2c844646", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/venv/lib/python3.12/site-packages/deafrica_tools/datahandling.py:244: UserWarning: Setting 'min_gooddata' percentage to > 0.0 will cause dask arrays to compute when loading pixel-quality data to calculate 'good pixel' percentage. This can slow the return of your dataset.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using pixel quality parameters for USGS Collection 2\n", + "Finding datasets\n", + " ls8_sr\n", + " ls9_sr\n", + "Counting good quality pixels for each time step\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/venv/lib/python3.12/site-packages/distributed/client.py:3361: UserWarning: Sending large graph of size 15.97 MiB.\n", + "This may cause some slowdown.\n", + "Consider loading the data with Dask directly\n", + " or using futures or delayed objects to embed the data into the graph without repetition.\n", + "See also https://docs.dask.org/en/stable/best-practices.html#load-data-with-dask for more information.\n", + " warnings.warn(\n", + "/opt/venv/lib/python3.12/site-packages/rasterio/warp.py:387: NotGeoreferencedWarning: Dataset has no geotransform, gcps, or rpcs. The identity matrix will be returned.\n", + " dest = _reproject(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Filtering to 4449 out of 4538 time steps with at least 90.0% good quality pixels\n", + "Applying pixel quality/cloud mask\n", + "Re-scaling Landsat C2 data\n", + "Returning 4449 time steps as a dask array\n", + "CPU times: user 55.2 s, sys: 2.32 s, total: 57.6 s\n", + "Wall time: 6min 14s\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 437MB\n",
+       "Dimensions:      (time: 4449, y: 128, x: 96)\n",
+       "Coordinates:\n",
+       "  * time         (time) datetime64[ns] 36kB 2014-01-02T07:40:34.913504 ... 20...\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "Data variables:\n",
+       "    nir          (time, y, x) float32 219MB dask.array<chunksize=(349, 128, 96), meta=np.ndarray>\n",
+       "    red          (time, y, x) float32 219MB dask.array<chunksize=(349, 128, 96), meta=np.ndarray>\n",
+       "Attributes:\n",
+       "    crs:           EPSG:6933\n",
+       "    grid_mapping:  spatial_ref
" + ], + "text/plain": [ + " Size: 437MB\n", + "Dimensions: (time: 4449, y: 128, x: 96)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 36kB 2014-01-02T07:40:34.913504 ... 20...\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + "Data variables:\n", + " nir (time, y, x) float32 219MB dask.array\n", + " red (time, y, x) float32 219MB dask.array\n", + "Attributes:\n", + " crs: EPSG:6933\n", + " grid_mapping: spatial_ref" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "# Load the Landsat data\n", + "ds_ls_sr = load_ard(dc=dc,\n", + " products=[\"ls8_sr\", \"ls9_sr\"],\n", + " measurements=[\"nir\", \"red\"],\n", + " min_gooddata=0.9,\n", + " time=time_range,\n", + " dask_chunks=dict(time=366),\n", + " geopolygon=geopolygon,\n", + " resolution=resolution,\n", + " output_crs=output_crs,\n", + " )\n", + "\n", + "ds_ls_sr" + ] + }, + { + "cell_type": "markdown", + "id": "62356df7-3131-489c-a7a1-c020467cac62", + "metadata": {}, + "source": [ + "### Mask the Landsat data\n", + "\n", + "The cell below masks the Landsat reflectance data to our country of interest." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "c39b35e0-3366-4059-91ad-c069e70071d9", + "metadata": {}, + "outputs": [], + "source": [ + "# Rasterize the country geopolygon and mask the loaded Landsat data.\n", + "country_mask = rasterize(poly=geopolygon, how=ds_ls_sr.odc.geobox)\n", + "ds_ls_sr = ds_ls_sr.where(country_mask)" + ] + }, + { + "cell_type": "markdown", + "id": "b5a54033-d0f4-4fef-84dc-b668c603f104", + "metadata": {}, + "source": [ + "### Calculate NDVI index\n", + "\n", + "The `calculate_indices` function from Digital Earth Africa tools is used to calculate NDVI from the `nir` and `red` bands from the Landsat data." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5cde119c-4e3a-4330-89e7-54abd54723f1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Dropping bands ['nir', 'red']\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'NDVI' (time: 4449, y: 128, x: 96)> Size: 219MB\n",
+       "dask.array<truediv, shape=(4449, 128, 96), dtype=float32, chunksize=(349, 128, 96), chunktype=numpy.ndarray>\n",
+       "Coordinates:\n",
+       "  * time         (time) datetime64[ns] 36kB 2014-01-02T07:40:34.913504 ... 20...\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933
" + ], + "text/plain": [ + " Size: 219MB\n", + "dask.array\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 36kB 2014-01-02T07:40:34.913504 ... 20...\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Calculate the NDVI spectral index using the calculate indices.\n", + "ds_ndvi = calculate_indices(ds_ls_sr, index=['NDVI'], satellite_mission='ls', drop=True)\n", + "# Convert to DataArray\n", + "da_ndvi = ds_ndvi[\"NDVI\"]\n", + "\n", + "da_ndvi" + ] + }, + { + "cell_type": "markdown", + "id": "1539c002-4c33-4a0b-a342-d35cbcb8ad78", + "metadata": {}, + "source": [ + "## Resample data\n", + "\n", + "Resample the NDVI `da_ndvi` timeseries into **dekadal** (10-day) timesteps." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "f44b1c9d-6213-4620-8b5f-7028dbb09968", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/venv/lib/python3.12/site-packages/distributed/client.py:3361: UserWarning: Sending large graph of size 17.15 MiB.\n", + "This may cause some slowdown.\n", + "Consider loading the data with Dask directly\n", + " or using futures or delayed objects to embed the data into the graph without repetition.\n", + "See also https://docs.dask.org/en/stable/best-practices.html#load-data-with-dask for more information.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1min 7s, sys: 4.74 s, total: 1min 12s\n", + "Wall time: 20min 11s\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'NDVI' (dekad: 409, y: 128, x: 96)> Size: 20MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11
" + ], + "text/plain": [ + " Size: 20MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "# Resample the NDVI data from daily to dekadal (10-day) intervals\n", + "da_ndvi_dekadal = group_by_dekad(da_ndvi).mean(dim=\"time\").compute()\n", + "da_ndvi_dekadal" + ] + }, + { + "cell_type": "markdown", + "id": "f60e8830-341a-4be7-947e-15d28a29c71f", + "metadata": {}, + "source": [ + "### Modify the timeseries\n", + "\n", + "The raw time series of NDVI are modified to adjust the range of all variables and avoid division by zero." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "0f113cc3-0dde-4386-a59a-490f1aabdea5", + "metadata": {}, + "outputs": [], + "source": [ + "da_ndvi_dekadal_modified = da_ndvi_dekadal - (da_ndvi_dekadal.min() - 0.01)" + ] + }, + { + "cell_type": "markdown", + "id": "6e62ed20-cca0-4899-98f8-abea3e929eb8", + "metadata": {}, + "source": [ + "### Group the modified timeseries using the `ip` parameter\n", + "\n", + "The `ip` parameter determines to what extent past observations are considered. Longer IPs detect more severe drought events. The default `ip` used of **18 dekads** corresponds to the 6-month Standardized Precipitation Evapotranspiration Index.\n", + "For example, calculating the Vegetation Drought Index for the dekad `2011-01-11` using an interest period of `ip=3` requires vegetation data from the dekad `2010-12-21`, `2011-01-01` and `2011-01-11`.\n", + "\n", + "\n", + "**Each interest period is labelled using its end dekad.**" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "56198598-4354-4c87-9a39-2c5dd8b4aa9e", + "metadata": {}, + "outputs": [], + "source": [ + "# Group the modified NDVI dekadal timeseries by the interest period.\n", + "# The dictionary keys are the end dekad for each interest period.\n", + "# The values of the dictionary are the NDVI data that belongs to the interest period\n", + "da_ndvi_binned_by_interest_period = bin_by_interest_period(ds=da_ndvi_dekadal_modified, ip=ip)\n", + "\n", + "# Get the interest periods\n", + "interest_periods = list(da_ndvi_binned_by_interest_period.keys())" + ] + }, + { + "cell_type": "markdown", + "id": "9fa84e91-8887-42a1-81b1-abe8d90e1da7", + "metadata": {}, + "source": [ + "### Get the average values for each interest period" + ] + }, + { + "cell_type": "markdown", + "id": "36279522-e616-4bce-9694-104cf8ca4183", + "metadata": {}, + "source": [ + "Get the actual average NDVI for each interest period." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "4544dbff-68e7-4065-9467-22892d3c5820", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'NDVI' (dekad: 410, y: 128, x: 96)> Size: 40MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11
" + ], + "text/plain": [ + " Size: 40MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "da_ndvi_actual_avg_for_ip = xr.concat([da_ndvi_binned_by_interest_period[i].mean(dim=\"dekad\").assign_coords(dekad=i).expand_dims({\"dekad\": 1}) for i in interest_periods], dim=\"dekad\")\n", + "display(da_ndvi_actual_avg_for_ip)" + ] + }, + { + "cell_type": "markdown", + "id": "67f5404e-6626-4f70-a79e-b2f57d162908", + "metadata": {}, + "source": [ + "### Get the long term average for each interest period over the years of available data\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "1b7d1833-cdbd-403b-8563-072eb0adbfec", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'NDVI' (dekad: 410, y: 128, x: 96)> Size: 40MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11
" + ], + "text/plain": [ + " Size: 40MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Group the interest periods by year by getting the dekad number in the year for the end dekad of the interest period. \n", + "grouped_by_year = toolz.groupby(lambda dekad: get_dekad_no_in_year(date=dekad), interest_periods)\n", + "\n", + "#Get the long term average NDVI for each interest period.\n", + "long_term_avg_ndvi = {}\n", + "for dekad_no_in_year, interest_periods_list in grouped_by_year.items():\n", + " long_term_avg_for_period = xr.concat([da_ndvi_binned_by_interest_period[i] for i in interest_periods_list], dim=\"dekad\").mean(dim=\"dekad\")\n", + " long_term_avg_ndvi[dekad_no_in_year] = long_term_avg_for_period\n", + " \n", + "da_ndvi_long_term_avg_for_ip = xr.concat([long_term_avg_ndvi[get_dekad_no_in_year(i)].assign_coords(dekad=i).expand_dims({\"dekad\": 1}) for i in interest_periods], dim=\"dekad\")\n", + "\n", + "assert all(da_ndvi_actual_avg_for_ip.dekad.values == da_ndvi_long_term_avg_for_ip.dekad.values)\n", + "\n", + "da_ndvi_long_term_avg_for_ip" + ] + }, + { + "cell_type": "markdown", + "id": "bcadc8fc-327a-410f-8b4a-fff945618c47", + "metadata": {}, + "source": [ + "## Get the actual length of continous deficit in each interest period\n", + "\n", + "For NDVI, the run length is the number of successive dekads during an interest period that are below the long-term average for the same period. We can expect this cell to take around 6 minutes to run for the default area." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "0b321647-3ca9-4015-85d1-9f4125957136", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1min 2s, sys: 347 ms, total: 1min 2s\n", + "Wall time: 1min 2s\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'NDVI' (dekad: 410, y: 128, x: 96)> Size: 40MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11
" + ], + "text/plain": [ + " Size: 40MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " spatial_ref int32 4B 6933\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "# For each interest period, determine the maximum number of successive dekads with NDVI below the long-term average for that period.\n", + "ndvi_run_length = []\n", + "for interest_period in interest_periods:\n", + " # Get the dekads in the interest period\n", + " ds = da_ndvi_binned_by_interest_period[interest_period]\n", + " \n", + " # Identify pixels which are empty for all dekads\n", + " no_data_mask = xr.apply_ufunc(\n", + " get_no_data_mask,\n", + " ds,\n", + " input_core_dims=[[\"dekad\"]],\n", + " vectorize=True,\n", + " dask=\"allowed\",\n", + " )\n", + " \n", + " # Get the long term average for the interest period.\n", + " long_term_avg = da_ndvi_long_term_avg_for_ip.sel(dekad=interest_period)\n", + " \n", + " # Get the pixels where the NDVI is below the long term average NDVI\n", + " mask = xr.where(ds < long_term_avg, 1, 0)\n", + " \n", + " # Get the maximum number of successive dekads below long term average NDVI.\n", + " actual_run_length = xr.apply_ufunc(\n", + " max_consecutive_ones,\n", + " mask,\n", + " input_core_dims=[[\"dekad\"]],\n", + " vectorize=True,\n", + " dask=\"allowed\",\n", + " )\n", + " \n", + " # Modify the run length\n", + " modified_run_length = (actual_run_length.max() + 1) - actual_run_length\n", + " modified_run_length = modified_run_length.where(~no_data_mask)\n", + " ndvi_run_length.append(modified_run_length.assign_coords(dekad=interest_period).expand_dims({\"dekad\": 1}))\n", + "\n", + "da_ndvi_actual_run_length = xr.concat(ndvi_run_length, dim=\"dekad\")\n", + "da_ndvi_actual_run_length" + ] + }, + { + "cell_type": "markdown", + "id": "4d76d733-2c91-46f7-9cfb-a4c73b86eb31", + "metadata": {}, + "source": [ + "### Get the long term average of continuous deficit in each interest period" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "b8ae1de4-9dd2-4a48-8b75-73be3ca12064", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'NDVI' (dekad: 410, y: 128, x: 96)> Size: 40MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11
" + ], + "text/plain": [ + " Size: 40MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " spatial_ref int32 4B 6933\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get the long term average NDVI run length for each interest period \n", + "long_term_avg_run_lenth_ndvi = {}\n", + "for dekad_no_in_year, interest_periods_list in grouped_by_year.items():\n", + " long_term_avg_for_period = da_ndvi_actual_run_length.sel(dekad=interest_periods_list).mean(dim=\"dekad\")\n", + " long_term_avg_run_lenth_ndvi[dekad_no_in_year] = long_term_avg_for_period\n", + " \n", + "da_ndvi_long_term_avg_run_length_for_ip = xr.concat([long_term_avg_run_lenth_ndvi[get_dekad_no_in_year(i)].assign_coords(dekad=i).expand_dims({\"dekad\": 1}) for i in interest_periods], dim=\"dekad\")\n", + "da_ndvi_long_term_avg_run_length_for_ip" + ] + }, + { + "cell_type": "markdown", + "id": "44145483-0499-4869-af45-50f6e3dd2252", + "metadata": {}, + "source": [ + "### Calculate the Vegetation Drought Index (VDI)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "9aa98e76-b31c-4ee7-902f-2b675a6ddf6a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'NDVI' (dekad: 410, y: 128, x: 96)> Size: 40MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11
" + ], + "text/plain": [ + " Size: 40MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Using the VDI formulae below\n", + "VDI = (da_ndvi_actual_avg_for_ip / da_ndvi_long_term_avg_for_ip) * np.sqrt((da_ndvi_actual_run_length / da_ndvi_long_term_avg_run_length_for_ip))\n", + "VDI" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "46da40ce-e163-4f74-9857-5b84aac53a1b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'NDVI' (dekad: 410, y: 128, x: 96)> Size: 40MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11
" + ], + "text/plain": [ + " Size: 40MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Scale the results of the VDI\n", + "VDI_scaled = (VDI - VDI.min()) / (VDI.max() - VDI.min())\n", + "VDI_scaled" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "4caa6f2b-9d5f-4870-b595-ea96b9db1500", + "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", + "
NDVI
dekadyx
2014-01-011742500.03402500.0NaN
3407500.0NaN
3412500.0NaN
3417500.0NaN
3422500.0NaN
............
2025-05-111107500.03857500.0NaN
3862500.0NaN
3867500.0NaN
3872500.0NaN
3877500.0NaN
\n", + "

5038080 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " NDVI\n", + "dekad y x \n", + "2014-01-01 1742500.0 3402500.0 NaN\n", + " 3407500.0 NaN\n", + " 3412500.0 NaN\n", + " 3417500.0 NaN\n", + " 3422500.0 NaN\n", + "... ...\n", + "2025-05-11 1107500.0 3857500.0 NaN\n", + " 3862500.0 NaN\n", + " 3867500.0 NaN\n", + " 3872500.0 NaN\n", + " 3877500.0 NaN\n", + "\n", + "[5038080 rows x 1 columns]" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Convert to DataFrame.\n", + "df = VDI_scaled.to_dataframe().drop(columns=\"spatial_ref\")\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "8cbea8bb-da57-4815-85d3-ecf04e7f2fa8", + "metadata": {}, + "outputs": [], + "source": [ + "# Convert the DataFrame to an Arrow table\n", + "table = Table.from_pandas(df)\n", + "\n", + "# Get the tables existing metadata\n", + "existing_meta = table.schema.metadata\n", + "\n", + "# Dump the crs of the DataArray as new metadata to JSON.\n", + "meta_json = json.dumps(dict(crs=str(VDI_scaled.rio.crs)))\n", + "\n", + "# Combine the metadata\n", + "combined_meta = {b\"xarray.metadata\": meta_json.encode(),**existing_meta}\n", + "\n", + "# Replace the metadata.\n", + "table = table.replace_schema_metadata(combined_meta)" + ] + }, + { + "cell_type": "markdown", + "id": "09cc5de7-e60c-4c2f-9dd6-30c69700a22f", + "metadata": {}, + "source": [ + "### Export the results in a Zip file" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "4089e0d3-ef95-49fb-b7b1-4c83058215dc", + "metadata": {}, + "outputs": [], + "source": [ + "# Write the table\n", + "write_table(table, output_path, compression=\"GZIP\")" + ] + }, + { + "cell_type": "markdown", + "id": "c60c91c1-21d1-4e5b-8e52-501d2de3c61d", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## Additional information\n", + "\n", + " License The code in this notebook is licensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0).\n", + "\n", + "Digital Earth Africa data is licensed under the [Creative Commons by Attribution 4.0](https://creativecommons.org/licenses/by/4.0/) license.\n", + "\n", + " Contact If you need assistance, please post a question on the [DE Africa Slack channel](https://digitalearthafrica.slack.com/) or on the [GIS Stack Exchange](https://gis.stackexchange.com/questions/ask?tags=open-data-cube) using the `open-data-cube` tag (you can view previously asked questions [here](https://gis.stackexchange.com/questions/tagged/open-data-cube)).\n", + "\n", + "If you would like to report an issue with this notebook, you can file one on [Github](https://github.com/digitalearthafrica/deafrica-sandbox-notebooks).\n", + "\n", + " Compatible datacube version :" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "17fb2ac4-635a-44df-87da-baa06d51d46f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.8.20\n" + ] + } + ], + "source": [ + "print(datacube.__version__)" + ] + }, + { + "cell_type": "markdown", + "id": "c68985c8-0798-4840-9062-810d739400d4", + "metadata": {}, + "source": [ + "**Last Tested:**" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "f51a8dc7-94d3-44f1-b947-8c2d9b72fb97", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'2025-05-19'" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from datetime import datetime\n", + "datetime.today().strftime('%Y-%m-%d')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Use_cases/Enhanced_Combined_Drought_Index/02_PrecipitationDroughtIndex.ipynb b/Use_cases/Enhanced_Combined_Drought_Index/02_PrecipitationDroughtIndex.ipynb new file mode 100644 index 00000000..3d5a8f42 --- /dev/null +++ b/Use_cases/Enhanced_Combined_Drought_Index/02_PrecipitationDroughtIndex.ipynb @@ -0,0 +1,4945 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a1ee47cf-3544-4245-9884-92989e9f8877", + "metadata": {}, + "source": [ + "\n", + "\n", + "# Enhanced Combined Drought Index - Precipitation Drought Index\n", + "\n", + "* **Products used:** \n", + "[rainfall_chirps_daily](https://explorer.digitalearth.africa/products/rainfall_chirps_daily)" + ] + }, + { + "cell_type": "raw", + "id": "5f36c0bc-9aba-4e41-9698-96cc57458962", + "metadata": {}, + "source": [ + "**Keywords**: :index:`data used; CHIRPS`, :index:`climate`, :index:`rainfall`;" + ] + }, + { + "cell_type": "markdown", + "id": "4d6ce758-4950-4cea-96e6-ee58a302108a", + "metadata": {}, + "source": [ + "## Background " + ] + }, + { + "cell_type": "markdown", + "id": "1d1c29f8-816c-414b-8d63-efd95a7a647c", + "metadata": {}, + "source": [ + "Drought is an extended period, during which, fresh water availability and accessibility for the ecosystem at a given time and place is below normal, due to unfavourable spatial and temporal distribution of rainfall, temperature, soil moisture and wind characteristics [(Balint et al., 2013)](https://doi.org/10.1016/B978-0-444-59559-1.00023-2). Severe droughts can affect large populations, leading to a long-term threat to people’s livelihoods and result in tremendous economic loss [(Enenkel et al., 2016)](https://doi.org/10.3390/rs8040340)." + ] + }, + { + "cell_type": "markdown", + "id": "48d311ac-d044-47a6-b4db-420c76c297fb", + "metadata": {}, + "source": [ + "The **Enhanced Drought Index** is a combination of the following components: Vegetation, Precipitation, Temperature and Soil moisture.\n", + "\n", + "This notebook will focus on the **Precipitation component**, component, which considers rainfall deficits and dryness persistence. The index calculated using the precipitation component is referred as the Precipitation Drought Index (PDI).\" The Precipitation Drought Index (PDI) is a commonly used indicator for assessing drought conditions based on precipitation deficits. It measures the difference between observed precipitation and expected or normal precipitation over a specific time period, typically in relation to the long-term average." + ] + }, + { + "cell_type": "markdown", + "id": "4630c991-7329-4ef8-8d34-e4dd5a2ef280", + "metadata": {}, + "source": [ + "The notebook outlines:\n", + "\n", + "***\n", + "1. Loading Python and DE Africa Packages\n", + "2. Setting dask cluster\n", + "3. Loading area on interest\n", + "5. Load CHIRPS data\n", + "6. Resampling of data to dekadal (10-day) intervals\n", + "7. Calculate the Vegetation Drought Index\n", + "8. Export the result as zip" + ] + }, + { + "cell_type": "markdown", + "id": "ec6d4e07-18c3-4830-b669-77e01b021a53", + "metadata": {}, + "source": [ + "## Getting started\n", + "\n", + "To run this analysis, run all the cells in the notebook, starting with the \"Load packages\" cell. " + ] + }, + { + "cell_type": "markdown", + "id": "3251008f-3b84-41eb-876d-d68059b0c6de", + "metadata": {}, + "source": [ + "### Load packages" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "73f5d02f-aee0-452f-81b3-ff22d921457f", + "metadata": {}, + "outputs": [], + "source": [ + "# import calendar\n", + "import json\n", + "import os\n", + "# from datetime import datetime, timedelta\n", + "\n", + "import dask\n", + "import geopandas as gpd\n", + "import numpy as np\n", + "import pandas as pd\n", + "import rioxarray\n", + "import toolz\n", + "import xarray as xr\n", + "import datacube\n", + "from deafrica_tools.bandindices import calculate_indices\n", + "from deafrica_tools.dask import create_local_dask_cluster\n", + "from deafrica_tools.datahandling import load_ard\n", + "from dekad import group_by_dekad, bin_by_interest_period, get_dekad_no_in_year, get_no_data_mask, max_consecutive_ones\n", + "from odc.geo.geobox import GeoBox\n", + "from odc.geo.geom import Geometry\n", + "from odc.geo.xr import rasterize\n", + "from pyarrow import Table\n", + "from pyarrow.parquet import write_table" + ] + }, + { + "cell_type": "markdown", + "id": "f685410a-57bd-4139-bde3-d0617617ef1b", + "metadata": {}, + "source": [ + "### Connect to the datacube\n", + "\n", + "Connect to the datacube so we can access DE Africa data.\n", + "The `app` parameter is a unique name for the analysis which is based on the notebook file name." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "12ea4b92-d8c6-48e4-b418-57aa395b2945", + "metadata": {}, + "outputs": [], + "source": [ + "# Connect to the datacube\n", + "dc = datacube.Datacube(app=\"PrecipitationDroughtIndex\")" + ] + }, + { + "cell_type": "markdown", + "id": "8143eda0-f831-4f4c-bb2b-675587cfb09c", + "metadata": {}, + "source": [ + "### Set up a Dask cluster\n", + "\n", + "Dask can be used to better manage memory use and conduct the analysis in parallel. \n", + "For an introduction to using Dask with Digital Earth Africa, see the [Dask notebook](../../Beginners_guide/08_Parallel_processing_with_dask.ipynb).\n", + "\n", + ">**Note**: We recommend opening the Dask processing window to view the different computations that are being executed; to do this, see the *Dask dashboard in DE Africa* section of the [Dask notebook](../../Beginners_guide/08_Parallel_processing_with_dask.ipynb).\n", + "\n", + "To use Dask, set up the local computing cluster using the cell below." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e7bf7690-e8b4-468a-a9e6-9632953dd918", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "
\n", + "
\n", + "

Client

\n", + "

Client-74b43e30-3469-11f0-90a0-62a7079d079f

\n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
Connection method: Cluster objectCluster type: distributed.LocalCluster
\n", + " Dashboard: /user/mickwelli@bigpond.com/proxy/8787/status\n", + "
\n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + "
\n", + "

Cluster Info

\n", + "
\n", + "
\n", + "
\n", + "
\n", + "

LocalCluster

\n", + "

6d1ee7d9

\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + "
\n", + " Dashboard: /user/mickwelli@bigpond.com/proxy/8787/status\n", + " \n", + " Workers: 1\n", + "
\n", + " Total threads: 2\n", + " \n", + " Total memory: 11.21 GiB\n", + "
Status: runningUsing processes: True
\n", + "\n", + "
\n", + " \n", + "

Scheduler Info

\n", + "
\n", + "\n", + "
\n", + "
\n", + "
\n", + "
\n", + "

Scheduler

\n", + "

Scheduler-21036876-dca4-4192-84fd-fe1208498d9c

\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " Comm: tcp://127.0.0.1:38811\n", + " \n", + " Workers: 1\n", + "
\n", + " Dashboard: /user/mickwelli@bigpond.com/proxy/8787/status\n", + " \n", + " Total threads: 2\n", + "
\n", + " Started: Just now\n", + " \n", + " Total memory: 11.21 GiB\n", + "
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "

Workers

\n", + "
\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 0

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:40085\n", + " \n", + " Total threads: 2\n", + "
\n", + " Dashboard: /user/mickwelli@bigpond.com/proxy/33913/status\n", + " \n", + " Memory: 11.21 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:43063\n", + "
\n", + " Local directory: /tmp/dask-scratch-space/worker-gh5fho9b\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "\n", + "
\n", + "
\n", + "\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "\n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "create_local_dask_cluster()" + ] + }, + { + "cell_type": "markdown", + "id": "50542e91-46c5-4de9-823a-88c505db1a40", + "metadata": { + "tags": [] + }, + "source": [ + "### Analysis parameters\n", + "\n", + "The following cell sets important parameters for the analysis:\n", + "\n", + "* `resolution`: The x and y cell resolution of the satellite data in metres (spatial resolution). We'll use 5,000 m, which is approximately equal to the default CHIRPS resolution.\n", + "* `output_crs` : The coordinate reference system that the loaded data is to be reprojected to.\n", + "* `dask_chunks`: the size of the dask chunks, dask breaks data into manageable chunks that can be easily stored in memory, e.g. `dict(x=1000,y=1000)`\n", + "* `time_range` : Time range to load data for.\n", + "* `ip` : The interest period to use to calculate the drought indices e.g. (3, 4, 5 dekads). It defines to what extent past observations are considered. Longer IPs detect more severe drought events. For example, if the IP=3 dekads, then the drought index (say PDI) of 0.35 for dekad 2 of 2006 implies actual drought for dekad 36 of 2005, dekad 1 of 2006 and dekad 2 of 2006.\n", + "* `output_dir` : The directory in which to store results from the analysis.\n", + "\n", + "**If running the notebook for the first time**, keep the default settings below.\n", + "This will demonstrate how the analysis works and provide meaningful results." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "cc3c12d5-0a20-48db-8044-070ee03b3ddb", + "metadata": {}, + "outputs": [], + "source": [ + "resolution = (-5000, 5000)\n", + "output_crs = \"EPSG:6933\"\n", + "dask_chunks = dict(time=366)\n", + "time_range = (\"2014\",\"2025\")\n", + "output_dir = \"results\"\n", + "# Corresponding to the six-months Standardized Precipitation Evapotranspiration Index\n", + "ip = 18\n", + "\n", + "# Create the outpur directory if it does not exist.\n", + "os.makedirs(output_dir, exist_ok=True)" + ] + }, + { + "cell_type": "markdown", + "id": "78afba48-334b-4dc8-a121-92b764b54dd1", + "metadata": {}, + "source": [ + "Below, a vector dataset is called and read which contains the extents of level 1 administrative boundaries in Ethiopia. In the default case, the regional state of Amhara is northern Ethiopia is the area of interest. This can be replaced with any administrative boundary, such as those available on the [GADM database](https://gadm.org/data.html). Larger areas have a larger processing and memory burden and may require additional resources (larger instances) to run effectively." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "9abcafc5-e427-4097-8301-3482d76ad303", + "metadata": {}, + "outputs": [], + "source": [ + "# Read GADM Ethiopia level 1 file\n", + "eth = gpd.read_file('data/gadm41_ETH_1.json')\n", + "\n", + "# Select the country of interest by providing the name below\n", + "idx = eth[eth['NAME_1'] == 'Amhara'].index[0]\n", + "geopolygon = Geometry(geom=eth.iloc[idx].geometry, crs=eth.crs)\n", + "\n", + "# Create the output path\n", + "output_path = os.path.join(output_dir, f\"PDI_Amhara.parquet\")" + ] + }, + { + "cell_type": "markdown", + "id": "316d2648-b4b8-4338-acb2-8bf368cb220b", + "metadata": {}, + "source": [ + "## Load CHIRPS data\n", + "Load the CHIRPS daily data from the datacube using the analysis parameters set in the previous section." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d1e0b41f-bf8f-4af5-bdff-e60b75d9b0c5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 44.7 s, sys: 3.7 s, total: 48.4 s\n", + "Wall time: 44.5 s\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 197MB\n",
+       "Dimensions:      (time: 4016, y: 128, x: 96)\n",
+       "Coordinates:\n",
+       "  * time         (time) datetime64[ns] 32kB 2014-01-01T11:59:59.500000 ... 20...\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "Data variables:\n",
+       "    rainfall     (time, y, x) float32 197MB dask.array<chunksize=(366, 128, 96), meta=np.ndarray>\n",
+       "Attributes:\n",
+       "    crs:           EPSG:6933\n",
+       "    grid_mapping:  spatial_ref
" + ], + "text/plain": [ + " Size: 197MB\n", + "Dimensions: (time: 4016, y: 128, x: 96)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 32kB 2014-01-01T11:59:59.500000 ... 20...\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + "Data variables:\n", + " rainfall (time, y, x) float32 197MB dask.array\n", + "Attributes:\n", + " crs: EPSG:6933\n", + " grid_mapping: spatial_ref" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "ds_rf = dc.load(product='rainfall_chirps_daily',\n", + " measurements=[\"rainfall\"],\n", + " time=time_range,\n", + " dask_chunks=dask_chunks,\n", + " geopolygon=geopolygon,\n", + " output_crs=output_crs,\n", + " resolution=resolution,\n", + " )\n", + " \n", + "ds_rf" + ] + }, + { + "cell_type": "markdown", + "id": "08683829-5450-4b8c-838d-9e18ebadfcba", + "metadata": {}, + "source": [ + "### Masked the data" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "ef2f388e-344e-4373-ab32-f9f5b403dd3b", + "metadata": {}, + "outputs": [], + "source": [ + "# Rasterize the country geopolygon and mask the loaded rainfall data.\n", + "country_mask = rasterize(poly=geopolygon, how=ds_rf.odc.geobox)\n", + "ds_rf = ds_rf.where(country_mask)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5cde119c-4e3a-4330-89e7-54abd54723f1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'rainfall' (time: 4016, y: 128, x: 96)> Size: 197MB\n",
+       "dask.array<where, shape=(4016, 128, 96), dtype=float32, chunksize=(366, 128, 96), chunktype=numpy.ndarray>\n",
+       "Coordinates:\n",
+       "  * time         (time) datetime64[ns] 32kB 2014-01-01T11:59:59.500000 ... 20...\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "Attributes:\n",
+       "    units:         mm\n",
+       "    nodata:        -9999\n",
+       "    crs:           EPSG:6933\n",
+       "    grid_mapping:  spatial_ref
" + ], + "text/plain": [ + " Size: 197MB\n", + "dask.array\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 32kB 2014-01-01T11:59:59.500000 ... 20...\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + "Attributes:\n", + " units: mm\n", + " nodata: -9999\n", + " crs: EPSG:6933\n", + " grid_mapping: spatial_ref" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Convert to DataArray\n", + "da_rf = ds_rf[\"rainfall\"]\n", + "\n", + "# Set -9999 no-data values to NaN\n", + "da_rf = da_rf.where(da_rf !=-9999.)\n", + "\n", + "da_rf" + ] + }, + { + "cell_type": "markdown", + "id": "1539c002-4c33-4a0b-a342-d35cbcb8ad78", + "metadata": {}, + "source": [ + "### Resample data\n", + "\n", + "Resample the rainfall `da_rf` timeseries into **dekadal** (10-day) timesteps." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "f44b1c9d-6213-4620-8b5f-7028dbb09968", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/venv/lib/python3.12/site-packages/rasterio/warp.py:387: NotGeoreferencedWarning: Dataset has no geotransform, gcps, or rpcs. The identity matrix will be returned.\n", + " dest = _reproject(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 28.1 s, sys: 1.85 s, total: 29.9 s\n", + "Wall time: 3min 42s\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'rainfall' (dekad: 396, y: 128, x: 96)> Size: 19MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-04-21\n",
+       "Attributes:\n",
+       "    units:         mm\n",
+       "    nodata:        -9999\n",
+       "    crs:           EPSG:6933\n",
+       "    grid_mapping:  spatial_ref
" + ], + "text/plain": [ + " Size: 19MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-04-21\n", + "Attributes:\n", + " units: mm\n", + " nodata: -9999\n", + " crs: EPSG:6933\n", + " grid_mapping: spatial_ref" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "# Resample the rainfall data from daily to decadal (10-day) intervals\n", + "da_rf_dekadal = group_by_dekad(da_rf).mean(dim=\"time\").compute()\n", + "da_rf_dekadal" + ] + }, + { + "cell_type": "markdown", + "id": "f60e8830-341a-4be7-947e-15d28a29c71f", + "metadata": {}, + "source": [ + "### Modify the timeseries\n", + "\n", + "The raw timeseries of precipitation is modified to adjust the range of all variables to avoid a division by zero." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "0f113cc3-0dde-4386-a59a-490f1aabdea5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'rainfall' (dekad: 396, y: 128, x: 96)> Size: 19MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-04-21
" + ], + "text/plain": [ + " Size: 19MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-04-21" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "da_rf_dekadal_modified = da_rf_dekadal + 1\n", + "da_rf_dekadal_modified" + ] + }, + { + "cell_type": "markdown", + "id": "6e62ed20-cca0-4899-98f8-abea3e929eb8", + "metadata": {}, + "source": [ + "### Group the modified timeseries using the `ip` parameter\n", + "\n", + "The `ip` parameter determines to what extent past observations are considered. Longer IPs detect more severe drought events. The default `ip` used of **18 dekads** corresponds to the 6-month Standardized Precipitation Evapotranspiration Index.\n", + "\n", + "For example, calculating the Precipitation Drought Index for the dekad `2011-01-11` using an interest period of `ip=3` requires rainfall data from the dekad `2010-12-21`, `2011-01-01` and `2011-01-11`.\n", + "\n", + "\n", + "**Each interest period is labelled using its end dekad.**" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "56198598-4354-4c87-9a39-2c5dd8b4aa9e", + "metadata": {}, + "outputs": [], + "source": [ + "# Group the modified rainfall dekadal timeseries by the interest period.\n", + "# The dictionary keys are the end dekad for each interest period.\n", + "# The values of the dictionary are the rainfall data that belongs to the interest period\n", + "da_rf_binned_by_interest_period = bin_by_interest_period(ds=da_rf_dekadal_modified, ip=ip)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "547f3a26-59b1-426c-a84d-3c4fc971a99e", + "metadata": {}, + "outputs": [], + "source": [ + "# Get the interest periods\n", + "interest_periods = list(da_rf_binned_by_interest_period.keys())" + ] + }, + { + "cell_type": "markdown", + "id": "9fa84e91-8887-42a1-81b1-abe8d90e1da7", + "metadata": {}, + "source": [ + "### Get the average values for each interest period" + ] + }, + { + "cell_type": "markdown", + "id": "36279522-e616-4bce-9694-104cf8ca4183", + "metadata": {}, + "source": [ + "Get the actual average rainfall for each interest period." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "4544dbff-68e7-4065-9467-22892d3c5820", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'rainfall' (dekad: 408, y: 128, x: 96)> Size: 20MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-04-21
" + ], + "text/plain": [ + " Size: 20MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-04-21" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "da_rf_actual_avg_for_ip = xr.concat([da_rf_binned_by_interest_period[i].mean(dim=\"dekad\").assign_coords(dekad=i).expand_dims({\"dekad\": 1}) for i in interest_periods], dim=\"dekad\")\n", + "da_rf_actual_avg_for_ip" + ] + }, + { + "cell_type": "markdown", + "id": "67f5404e-6626-4f70-a79e-b2f57d162908", + "metadata": {}, + "source": [ + "### Get the long term average for each interest period over the years of available data\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "05e2bec2-4c47-4739-aa87-abeb4e67d2f6", + "metadata": {}, + "outputs": [], + "source": [ + "# Group the interest periods by year by getting the dekad number in the year for the end dekad of\n", + "# the interest period. \n", + "grouped_by_year = toolz.groupby(lambda dekad: get_dekad_no_in_year(date=dekad), interest_periods)" + ] + }, + { + "cell_type": "markdown", + "id": "9c954092-e6ad-490f-a60f-a3e0061d1056", + "metadata": {}, + "source": [ + "Get the long term average rainfall for each interest period." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "1b7d1833-cdbd-403b-8563-072eb0adbfec", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'rainfall' (dekad: 408, y: 128, x: 96)> Size: 20MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-04-21
" + ], + "text/plain": [ + " Size: 20MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-04-21" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "long_term_avg_rf = {}\n", + "for dekad_no_in_year, interest_periods_list in grouped_by_year.items():\n", + " long_term_avg_for_period = xr.concat([da_rf_binned_by_interest_period[i] for i in interest_periods_list], dim=\"dekad\").mean(dim=\"dekad\")\n", + " long_term_avg_rf[dekad_no_in_year] = long_term_avg_for_period\n", + " \n", + "da_rf_long_term_avg_for_ip = xr.concat([long_term_avg_rf[get_dekad_no_in_year(i)].assign_coords(dekad=i).expand_dims({\"dekad\": 1}) for i in interest_periods], dim=\"dekad\")\n", + "\n", + "assert all(da_rf_actual_avg_for_ip.dekad.values == da_rf_long_term_avg_for_ip.dekad.values)\n", + "\n", + "da_rf_long_term_avg_for_ip" + ] + }, + { + "cell_type": "markdown", + "id": "bcadc8fc-327a-410f-8b4a-fff945618c47", + "metadata": {}, + "source": [ + "### Get the actual length of continous deficit in each interest period\n", + "\n", + "For rainfall the run length is the number of successive dekads in an interest period below the long term average for the same interest period." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "31aa4268-62c2-4a7b-86ec-bdd826d51de5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1min 4s, sys: 748 ms, total: 1min 5s\n", + "Wall time: 1min 5s\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'rainfall' (dekad: 408, y: 128, x: 96)> Size: 40MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-04-21
" + ], + "text/plain": [ + " Size: 40MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " spatial_ref int32 4B 6933\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-04-21" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "# For each interest period get the maximum number of successive dekads below long term average rainfall in the interest period.\n", + "rf_run_length = []\n", + "for interest_period in interest_periods:\n", + " # Get the dekads in the interest period\n", + " ds = da_rf_binned_by_interest_period[interest_period]\n", + " \n", + " # Identify pixels which are empty for all dekads\n", + " no_data_mask = xr.apply_ufunc(\n", + " get_no_data_mask,\n", + " ds,\n", + " input_core_dims=[[\"dekad\"]],\n", + " vectorize=True,\n", + " dask=\"allowed\",\n", + " )\n", + " \n", + " # Get the long term average for the interest period\n", + " long_term_avg = da_rf_long_term_avg_for_ip.sel(dekad=interest_period)\n", + " \n", + " # Get the pixels where the rainfall is below the long term average rainfall\n", + " mask = xr.where(ds < long_term_avg, 1, 0)\n", + " \n", + " # Get the maximum number of successive dekads below long term average rainfall.\n", + " actual_run_length = xr.apply_ufunc(\n", + " max_consecutive_ones,\n", + " mask,\n", + " input_core_dims=[[\"dekad\"]],\n", + " vectorize=True,\n", + " dask=\"allowed\",\n", + " )\n", + " \n", + " # Modify the run length\n", + " modified_run_length = (actual_run_length.max() + 1) - actual_run_length\n", + " modified_run_length = modified_run_length.where(~no_data_mask)\n", + " rf_run_length.append(modified_run_length.assign_coords(dekad=interest_period).expand_dims({\"dekad\": 1}))\n", + "\n", + "da_rf_actual_run_length = xr.concat(rf_run_length, dim=\"dekad\")\n", + "da_rf_actual_run_length" + ] + }, + { + "cell_type": "markdown", + "id": "4d76d733-2c91-46f7-9cfb-a4c73b86eb31", + "metadata": {}, + "source": [ + "### Get the long term average of continous deficit in each interest period" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b8ae1de4-9dd2-4a48-8b75-73be3ca12064", + "metadata": {}, + "outputs": [], + "source": [ + "# Get the long term average rainfall run length for each interest period \n", + "long_term_avg_run_lenth_rf = {}\n", + "for dekad_no_in_year, interest_periods_list in grouped_by_year.items():\n", + " long_term_avg_for_period = da_rf_actual_run_length.sel(dekad=interest_periods_list).mean(dim=\"dekad\")\n", + " long_term_avg_run_lenth_rf[dekad_no_in_year] = long_term_avg_for_period\n", + " \n", + "da_rf_long_term_avg_run_length_for_ip = xr.concat([long_term_avg_run_lenth_rf[get_dekad_no_in_year(i)].assign_coords(dekad=i).expand_dims({\"dekad\": 1}) for i in interest_periods], dim=\"dekad\")\n", + "da_rf_long_term_avg_run_length_for_ip" + ] + }, + { + "cell_type": "markdown", + "id": "44145483-0499-4869-af45-50f6e3dd2252", + "metadata": {}, + "source": [ + "### Calculate the scaled Precipitation Drought Index" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9aa98e76-b31c-4ee7-902f-2b675a6ddf6a", + "metadata": {}, + "outputs": [], + "source": [ + "PDI = (da_rf_actual_avg_for_ip / da_rf_long_term_avg_for_ip) * np.sqrt((da_rf_actual_run_length / da_rf_long_term_avg_run_length_for_ip))\n", + "PDI" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "46da40ce-e163-4f74-9857-5b84aac53a1b", + "metadata": {}, + "outputs": [], + "source": [ + "PDI_scaled = (PDI - PDI.min()) / (PDI.max() - PDI.min())\n", + "PDI_scaled" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4caa6f2b-9d5f-4870-b595-ea96b9db1500", + "metadata": {}, + "outputs": [], + "source": [ + "# Convert to DataFrame.\n", + "df = PDI_scaled.to_dataframe().drop(columns=\"spatial_ref\")\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8cbea8bb-da57-4815-85d3-ecf04e7f2fa8", + "metadata": {}, + "outputs": [], + "source": [ + "# Convert the DataFrame to an Arrow table\n", + "table = Table.from_pandas(df)\n", + "\n", + "# Get the tables existing metadata\n", + "existing_meta = table.schema.metadata\n", + "\n", + "# Dump the crs of the DataArray as new metadata to JSON.\n", + "meta_json = json.dumps(dict(crs=str(PDI_scaled.rio.crs)))\n", + "\n", + "# Combine the metadata\n", + "combined_meta = {\n", + "b\"xarray.metadata\": meta_json.encode(),\n", + "**existing_meta,\n", + "}\n", + "\n", + "# Replace the metadata.\n", + "table = table.replace_schema_metadata(combined_meta)" + ] + }, + { + "cell_type": "markdown", + "id": "a822f6ac-e558-43f3-a022-1b472c2f5a2b", + "metadata": {}, + "source": [ + "### Export the results in a Zip file" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4089e0d3-ef95-49fb-b7b1-4c83058215dc", + "metadata": {}, + "outputs": [], + "source": [ + "# Write the table\n", + "write_table(table, output_path, compression=\"GZIP\")" + ] + }, + { + "cell_type": "markdown", + "id": "9ce478df-88b0-46dc-885c-7e121da898fe", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## Additional information\n", + "\n", + " License The code in this notebook is licensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0).\n", + "\n", + "Digital Earth Africa data is licensed under the [Creative Commons by Attribution 4.0](https://creativecommons.org/licenses/by/4.0/) license.\n", + "\n", + " Contact If you need assistance, please post a question on the [DE Africa Slack channel](https://digitalearthafrica.slack.com/) or on the [GIS Stack Exchange](https://gis.stackexchange.com/questions/ask?tags=open-data-cube) using the `open-data-cube` tag (you can view previously asked questions [here](https://gis.stackexchange.com/questions/tagged/open-data-cube)).\n", + "\n", + "If you would like to report an issue with this notebook, you can file one on [Github](https://github.com/digitalearthafrica/deafrica-sandbox-notebooks).\n", + "\n", + " Compatible datacube version " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cde1dedb-48d0-43bc-ac3e-1a0042d18a33", + "metadata": {}, + "outputs": [], + "source": [ + "print(datacube.__version__)" + ] + }, + { + "cell_type": "markdown", + "id": "7f902691-ac90-4283-9967-1f95e1626444", + "metadata": {}, + "source": [ + "**Last Tested:**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "463813d9-8d84-43cf-8f5f-d19048ade5c5", + "metadata": {}, + "outputs": [], + "source": [ + "from datetime import datetime\n", + "datetime.today().strftime('%Y-%m-%d')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Use_cases/Enhanced_Combined_Drought_Index/03_TemperatureDroughtIndex.ipynb b/Use_cases/Enhanced_Combined_Drought_Index/03_TemperatureDroughtIndex.ipynb new file mode 100644 index 00000000..bd514986 --- /dev/null +++ b/Use_cases/Enhanced_Combined_Drought_Index/03_TemperatureDroughtIndex.ipynb @@ -0,0 +1,6264 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a1ee47cf-3544-4245-9884-92989e9f8877", + "metadata": {}, + "source": [ + "\n", + "\n", + "# Enhanced Combined Drought Index - Temperature Drought Index\n", + "\n", + "* **Products used:** \n", + "[ls5_st](https://explorer.digitalearth.africa/products/ls5_st),\n", + "[ls7_st](https://explorer.digitalearth.africa/products/ls7_st),\n", + "[ls8_st](https://explorer.digitalearth.africa/products/ls8_st),\n", + "[ls9_st](https://explorer.digitalearth.africa/products/ls9_st)" + ] + }, + { + "cell_type": "raw", + "id": "5f36c0bc-9aba-4e41-9698-96cc57458962", + "metadata": {}, + "source": [ + "**Keywords**: :index:`data used; landsat 9`, :index:`data used; landsat 8`, :index:`data used; landsat 7`, :index:`data used; landsat 5`, :index:`surface temperature`" + ] + }, + { + "cell_type": "markdown", + "id": "4d6ce758-4950-4cea-96e6-ee58a302108a", + "metadata": {}, + "source": [ + "## Background " + ] + }, + { + "cell_type": "markdown", + "id": "1d1c29f8-816c-414b-8d63-efd95a7a647c", + "metadata": {}, + "source": [ + "Drought is an extended period, during which, fresh water availability and accessibility for the ecosystem at a given time and place is below normal, due to unfavourable spatial and temporal distribution of rainfall, temperature, soil moisture and wind characteristics [(Balint et al., 2013)](https://doi.org/10.1016/B978-0-444-59559-1.00023-2). Severe droughts can affect large populations, leading to a long-term threat to people’s livelihoods and result in tremendous economic loss [(Enenkel et al., 2016)](https://doi.org/10.3390/rs8040340)." + ] + }, + { + "cell_type": "markdown", + "id": "ae8fe6cb-a893-4ea7-b84f-fbf52df8433a", + "metadata": {}, + "source": [ + "The **Enhanced Drought Index** is a combination of the following components: Vegetation, Precipitation, Temperature and Soil moisture.\n", + "\n", + "This notebook will focus on the **Temperature** component, which considers temperature excesses and persistence of high temperatures. The index based on temperature is named as **Temperature Drought Index (TDI)** The Temperature Drought Index (TDI) is used to assess the combined impact of temperature and precipitation deficits on drought conditions. It is particularly useful for understanding the role of temperature in exacerbating drought effects, as high temperatures can increase evapotranspiration (the combined loss of water through evaporation and plant transpiration), which in turn can worsen drought conditions." + ] + }, + { + "cell_type": "markdown", + "id": "4630c991-7329-4ef8-8d34-e4dd5a2ef280", + "metadata": {}, + "source": [ + "The notebook outlines:\n", + "\n", + "***\n", + "1. Loading Python and DE Africa Packages\n", + "2. Setting dask cluster\n", + "3. Loading area on interest\n", + "5. Load Landsat Surface temperature\n", + "6. Resampling of data to dekadal (10-day) intervals\n", + "7. Calculate the Vegetation Drought Index\n", + "8. Export the result as zip" + ] + }, + { + "cell_type": "markdown", + "id": "ec6d4e07-18c3-4830-b669-77e01b021a53", + "metadata": {}, + "source": [ + "## Getting started\n", + "\n", + "To run this analysis, run all the cells in the notebook, starting with the \"Load packages\" cell. " + ] + }, + { + "cell_type": "markdown", + "id": "3251008f-3b84-41eb-876d-d68059b0c6de", + "metadata": {}, + "source": [ + "### Load packages" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "73f5d02f-aee0-452f-81b3-ff22d921457f", + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "import os\n", + "from datetime import datetime, timedelta\n", + "\n", + "import dask\n", + "import geopandas as gpd\n", + "import numpy as np\n", + "import pandas as pd\n", + "import rioxarray\n", + "import toolz\n", + "import xarray as xr\n", + "import datacube\n", + "from deafrica_tools.bandindices import calculate_indices\n", + "from deafrica_tools.dask import create_local_dask_cluster\n", + "from deafrica_tools.datahandling import load_ard\n", + "from dekad import group_by_dekad, bin_by_interest_period, get_dekad_no_in_year, get_no_data_mask, max_consecutive_ones\n", + "from odc.geo.geobox import GeoBox\n", + "from odc.geo.geom import Geometry\n", + "from odc.geo.xr import rasterize\n", + "from pyarrow import Table\n", + "from pyarrow.parquet import write_table" + ] + }, + { + "cell_type": "markdown", + "id": "c94e1c3a-8046-46e9-95a3-b1bac3dd5d5d", + "metadata": {}, + "source": [ + "### Connect to the datacube\n", + "\n", + "Connect to the datacube so we can access DE Africa data.\n", + "The `app` parameter is a unique name for the analysis which is based on the notebook file name." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b44604c6-daa7-4f93-857b-9da7f4fe2109", + "metadata": {}, + "outputs": [], + "source": [ + "# Connect to the datacube\n", + "dc = datacube.Datacube(app=\"TemperatureDroughtIndex\")" + ] + }, + { + "cell_type": "markdown", + "id": "8143eda0-f831-4f4c-bb2b-675587cfb09c", + "metadata": {}, + "source": [ + "### Set up a Dask cluster\n", + "\n", + "Dask can be used to better manage memory use and conduct the analysis in parallel. \n", + "For an introduction to using Dask with Digital Earth Africa, see the [Dask notebook](../../Beginners_guide/08_Parallel_processing_with_dask.ipynb).\n", + "\n", + ">**Note**: We recommend opening the Dask processing window to view the different computations that are being executed; to do this, see the *Dask dashboard in DE Africa* section of the [Dask notebook](../../Beginners_guide/08_Parallel_processing_with_dask.ipynb).\n", + "\n", + "To use Dask, set up the local computing cluster using the cell below." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e7bf7690-e8b4-468a-a9e6-9632953dd918", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/venv/lib/python3.12/site-packages/distributed/node.py:187: UserWarning: Port 8787 is already in use.\n", + "Perhaps you already have a cluster running?\n", + "Hosting the HTTP server on port 44891 instead\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "
\n", + "
\n", + "

Client

\n", + "

Client-41ffc2ef-346b-11f0-9117-62a7079d079f

\n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
Connection method: Cluster objectCluster type: distributed.LocalCluster
\n", + " Dashboard: /user/mickwelli@bigpond.com/proxy/44891/status\n", + "
\n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + "
\n", + "

Cluster Info

\n", + "
\n", + "
\n", + "
\n", + "
\n", + "

LocalCluster

\n", + "

40192922

\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + "
\n", + " Dashboard: /user/mickwelli@bigpond.com/proxy/44891/status\n", + " \n", + " Workers: 1\n", + "
\n", + " Total threads: 2\n", + " \n", + " Total memory: 11.21 GiB\n", + "
Status: runningUsing processes: True
\n", + "\n", + "
\n", + " \n", + "

Scheduler Info

\n", + "
\n", + "\n", + "
\n", + "
\n", + "
\n", + "
\n", + "

Scheduler

\n", + "

Scheduler-a99f874a-dcaa-48dc-984a-240a8e41a8c0

\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " Comm: tcp://127.0.0.1:37805\n", + " \n", + " Workers: 1\n", + "
\n", + " Dashboard: /user/mickwelli@bigpond.com/proxy/44891/status\n", + " \n", + " Total threads: 2\n", + "
\n", + " Started: Just now\n", + " \n", + " Total memory: 11.21 GiB\n", + "
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "

Workers

\n", + "
\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 0

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:44117\n", + " \n", + " Total threads: 2\n", + "
\n", + " Dashboard: /user/mickwelli@bigpond.com/proxy/36361/status\n", + " \n", + " Memory: 11.21 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:42599\n", + "
\n", + " Local directory: /tmp/dask-scratch-space/worker-aoashakk\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "\n", + "
\n", + "
\n", + "\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "\n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "create_local_dask_cluster()" + ] + }, + { + "cell_type": "markdown", + "id": "50542e91-46c5-4de9-823a-88c505db1a40", + "metadata": {}, + "source": [ + "### Analysis parameters\n", + "\n", + "The following cell sets important parameters for the analysis:\n", + "\n", + "* `resolution`: The x and y cell resolution of the satellite data in metres (spatial resolution). We'll use 5,000 m, which is approximately equal to the default CHIRPS resolution.\n", + "* `output_crs` : The coordinate reference system that the loaded data is to be reprojected to.\n", + "* `dask_chunks`: the size of the dask chunks, dask breaks data into manageable chunks that can be easily stored in memory, e.g. `dict(x=1000,y=1000)`\n", + "* `time_range` : Time range to load data for.\n", + "* `ip` : The interest period to use to calculate the drought indices e.g. (3, 4, 5 dekads). It defines to what extent past observations are considered. Longer IPs detect more severe drought events. For example, if the IP=3 dekads, then the drought index (say PDI) of 0.35 for dekad 2 of 2006 implies actual drought for dekad 36 of 2005, dekad 1 of 2006 and dekad 2 of 2006.\n", + "* `output_dir` : The directory in which to store results from the analysis.\n", + "\n", + "**If running the notebook for the first time**, keep the default settings below.\n", + "This will demonstrate how the analysis works and provide meaningful results." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "cc3c12d5-0a20-48db-8044-070ee03b3ddb", + "metadata": {}, + "outputs": [], + "source": [ + "resolution = (-5000, 5000)\n", + "output_crs = \"EPSG:6933\"\n", + "dask_chunks = dict(time=366)\n", + "time_range = (\"2014\",\"2025\")\n", + "output_dir = \"results\"\n", + "# Corresponding to the six-months Standardized Precipitation Evapotranspiration Index\n", + "ip = 18\n", + "\n", + "# Create the outpur directory if it does not exist.\n", + "os.makedirs(output_dir, exist_ok=True)" + ] + }, + { + "cell_type": "markdown", + "id": "6315035e-a255-4ec8-8923-6386b357401d", + "metadata": {}, + "source": [ + "Below, a vector dataset is called and read which contains the extents of level 1 administrative boundaries in Ethiopia. In the default case, the regional state of Amhara is northern Ethiopia is the area of interest. This can be replaced with any administrative boundary, such as those available on the [GADM database](https://gadm.org/data.html). Larger areas have a larger processing and memory burden and may require additional resources (larger instances) to run effectively." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "cf3acd61-bdb2-40cb-a793-4b930509a443", + "metadata": {}, + "outputs": [], + "source": [ + "# Read GADM Ethiopia level 1 file\n", + "eth = gpd.read_file('data/gadm41_ETH_1.json')\n", + "\n", + "# Select the country of interest by providing the name below\n", + "idx = eth[eth['NAME_1'] == 'Amhara'].index[0]\n", + "geopolygon = Geometry(geom=eth.iloc[idx].geometry, crs=eth.crs)\n", + "\n", + "# Create the output path\n", + "output_path = os.path.join(output_dir, f\"TDI_Amhara.parquet\")" + ] + }, + { + "cell_type": "markdown", + "id": "316d2648-b4b8-4338-acb2-8bf368cb220b", + "metadata": {}, + "source": [ + "## Load Landsat surface temperature data\n", + "Load the Landsat surface temperature data from the datacube using the analysis parameters set in the previous section." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d1e0b41f-bf8f-4af5-bdff-e60b75d9b0c5", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/venv/lib/python3.12/site-packages/deafrica_tools/datahandling.py:244: UserWarning: Setting 'min_gooddata' percentage to > 0.0 will cause dask arrays to compute when loading pixel-quality data to calculate 'good pixel' percentage. This can slow the return of your dataset.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using pixel quality parameters for USGS Collection 2\n", + "Finding datasets\n", + " ls8_st\n", + " ls9_st\n", + "Counting good quality pixels for each time step\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/venv/lib/python3.12/site-packages/distributed/client.py:3361: UserWarning: Sending large graph of size 16.34 MiB.\n", + "This may cause some slowdown.\n", + "Consider loading the data with Dask directly\n", + " or using futures or delayed objects to embed the data into the graph without repetition.\n", + "See also https://docs.dask.org/en/stable/best-practices.html#load-data-with-dask for more information.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Filtering to 4449 out of 4538 time steps with at least 90.0% good quality pixels\n", + "Applying pixel quality/cloud mask\n", + "Re-scaling Landsat C2 data\n", + "Returning 4449 time steps as a dask array\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 219MB\n",
+       "Dimensions:              (time: 4449, y: 128, x: 96)\n",
+       "Coordinates:\n",
+       "  * time                 (time) datetime64[ns] 36kB 2014-01-02T07:40:34.91350...\n",
+       "  * y                    (y) float64 1kB 1.742e+06 1.738e+06 ... 1.108e+06\n",
+       "  * x                    (x) float64 768B 3.402e+06 3.408e+06 ... 3.878e+06\n",
+       "    spatial_ref          int32 4B 6933\n",
+       "Data variables:\n",
+       "    surface_temperature  (time, y, x) float32 219MB dask.array<chunksize=(349, 128, 96), meta=np.ndarray>\n",
+       "Attributes:\n",
+       "    crs:           EPSG:6933\n",
+       "    grid_mapping:  spatial_ref
" + ], + "text/plain": [ + " Size: 219MB\n", + "Dimensions: (time: 4449, y: 128, x: 96)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 36kB 2014-01-02T07:40:34.91350...\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + "Data variables:\n", + " surface_temperature (time, y, x) float32 219MB dask.array\n", + "Attributes:\n", + " crs: EPSG:6933\n", + " grid_mapping: spatial_ref" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Load the Landsat data\n", + "ds_ls_st = load_ard(dc=dc,\n", + " products=[\"ls8_st\", \"ls9_st\"],\n", + " measurements=[\"surface_temperature\"],\n", + " min_gooddata=0.9,\n", + " time=time_range,\n", + " dask_chunks=dict(time=366),\n", + " geopolygon=geopolygon,\n", + " resolution=resolution,\n", + " output_crs=output_crs,\n", + " )\n", + " \n", + "ds_ls_st" + ] + }, + { + "cell_type": "markdown", + "id": "f3173f13-6e2b-462a-8cd0-fe92ba25a449", + "metadata": {}, + "source": [ + "### Masked the landsat data" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "c956459c-613f-4278-8b08-23ad0328f3e2", + "metadata": {}, + "outputs": [], + "source": [ + "# Rasterize the country geopolygon and mask the loaded Landsat data.\n", + "country_mask = rasterize(poly=geopolygon, how=ds_ls_st.odc.geobox)\n", + "ds_ls_st = ds_ls_st.where(country_mask)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5cde119c-4e3a-4330-89e7-54abd54723f1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'surface_temperature' (time: 4449, y: 128, x: 96)> Size: 219MB\n",
+       "dask.array<sub, shape=(4449, 128, 96), dtype=float32, chunksize=(349, 128, 96), chunktype=numpy.ndarray>\n",
+       "Coordinates:\n",
+       "  * time         (time) datetime64[ns] 36kB 2014-01-02T07:40:34.913504 ... 20...\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933
" + ], + "text/plain": [ + " Size: 219MB\n", + "dask.array\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 36kB 2014-01-02T07:40:34.913504 ... 20...\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Convert from Kelvins to Celsius\n", + "da_ls_st = ds_ls_st[\"surface_temperature\"] - 273.15\n", + "da_ls_st" + ] + }, + { + "cell_type": "markdown", + "id": "1539c002-4c33-4a0b-a342-d35cbcb8ad78", + "metadata": {}, + "source": [ + "### Resample data\n", + "\n", + "Resample the surface temperature `da_ls_st` timeseries into **dekadal** (10-day) timesteps." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "f44b1c9d-6213-4620-8b5f-7028dbb09968", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/venv/lib/python3.12/site-packages/distributed/client.py:3361: UserWarning: Sending large graph of size 17.07 MiB.\n", + "This may cause some slowdown.\n", + "Consider loading the data with Dask directly\n", + " or using futures or delayed objects to embed the data into the graph without repetition.\n", + "See also https://docs.dask.org/en/stable/best-practices.html#load-data-with-dask for more information.\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 52.5 s, sys: 3.1 s, total: 55.6 s\n", + "Wall time: 12min 56s\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'surface_temperature' (dekad: 409, y: 128, x: 96)> Size: 20MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11
" + ], + "text/plain": [ + " Size: 20MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "# Resample the surface temperature data from daily to decadal (10-day) intervals\n", + "da_ls_st_dekadal = group_by_dekad(da_ls_st).mean(dim=\"time\").compute()\n", + "da_ls_st_dekadal" + ] + }, + { + "cell_type": "markdown", + "id": "f60e8830-341a-4be7-947e-15d28a29c71f", + "metadata": {}, + "source": [ + "### Modify the timeseries\n", + "\n", + "The raw timeseries of surface temperature is modified to adjust the range of all variables to avoid a division by zero." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "0f113cc3-0dde-4386-a59a-490f1aabdea5", + "metadata": {}, + "outputs": [], + "source": [ + "da_ls_st_dekadal_modified = (da_ls_st_dekadal.max() + 1) - da_ls_st_dekadal" + ] + }, + { + "cell_type": "markdown", + "id": "6e62ed20-cca0-4899-98f8-abea3e929eb8", + "metadata": {}, + "source": [ + "### Group the modified timeseries using the `ip` parameter\n", + "\n", + "The `ip` parameter determines to what extent past observations are considered. Longer IPs detect more severe drought events. The default `ip` used of **18 dekads** corresponds to the 6-month Standardized Precipitation Evapotranspiration Index.\n", + "\n", + "For example, calculating the Vegetation Drought Index for the dekad `2011-01-11` using an interest period of `ip=3` requires rainfall data from the dekad `2010-12-21`, `2011-01-01` and `2011-01-11`.\n", + "\n", + "\n", + "**Each interest period is labelled using its end dekad.**" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "56198598-4354-4c87-9a39-2c5dd8b4aa9e", + "metadata": {}, + "outputs": [], + "source": [ + "# Group the modified surface temperature dekadal timeseries by the interest period.\n", + "# The dictionary keys are the end dekad for each interest period.\n", + "# The values of the dictionary are the surface temperature data that belongs to the interest period\n", + "da_ls_st_binned_by_interest_period = bin_by_interest_period(ds=da_ls_st_dekadal_modified, ip=ip)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "547f3a26-59b1-426c-a84d-3c4fc971a99e", + "metadata": {}, + "outputs": [], + "source": [ + "# Get the interest periods\n", + "interest_periods = list(da_ls_st_binned_by_interest_period.keys())" + ] + }, + { + "cell_type": "markdown", + "id": "9fa84e91-8887-42a1-81b1-abe8d90e1da7", + "metadata": {}, + "source": [ + "### Get the average values for each interest period" + ] + }, + { + "cell_type": "markdown", + "id": "36279522-e616-4bce-9694-104cf8ca4183", + "metadata": {}, + "source": [ + "Get the actual average surface temperature for each interest period." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "4544dbff-68e7-4065-9467-22892d3c5820", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'surface_temperature' (dekad: 410, y: 128, x: 96)> Size: 40MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11
" + ], + "text/plain": [ + " Size: 40MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "da_ls_st_actual_avg_for_ip = xr.concat([da_ls_st_binned_by_interest_period[i].mean(dim=\"dekad\").assign_coords(dekad=i).expand_dims({\"dekad\": 1}) for i in interest_periods], dim=\"dekad\")\n", + "da_ls_st_actual_avg_for_ip" + ] + }, + { + "cell_type": "markdown", + "id": "67f5404e-6626-4f70-a79e-b2f57d162908", + "metadata": {}, + "source": [ + "### Get the long term average for each interest period over the years of available data\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "05e2bec2-4c47-4739-aa87-abeb4e67d2f6", + "metadata": {}, + "outputs": [], + "source": [ + "# Group the interest periods by year by getting the dekad number in the year for the end dekad of\n", + "# the interest period. \n", + "grouped_by_year = toolz.groupby(lambda dekad: get_dekad_no_in_year(date=dekad), interest_periods)" + ] + }, + { + "cell_type": "markdown", + "id": "9c954092-e6ad-490f-a60f-a3e0061d1056", + "metadata": {}, + "source": [ + "Get the long term average surface temperature for each interest period." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "1b7d1833-cdbd-403b-8563-072eb0adbfec", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'surface_temperature' (dekad: 410, y: 128, x: 96)> Size: 40MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11
" + ], + "text/plain": [ + " Size: 40MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "long_term_avg_ls_st = {}\n", + "for dekad_no_in_year, interest_periods_list in grouped_by_year.items():\n", + " long_term_avg_for_period = xr.concat([da_ls_st_binned_by_interest_period[i] for i in interest_periods_list], dim=\"dekad\").mean(dim=\"dekad\")\n", + " long_term_avg_ls_st[dekad_no_in_year] = long_term_avg_for_period\n", + " \n", + "da_ls_st_long_term_avg_for_ip = xr.concat([long_term_avg_ls_st[get_dekad_no_in_year(i)].assign_coords(dekad=i).expand_dims({\"dekad\": 1}) for i in interest_periods], dim=\"dekad\")\n", + "\n", + "assert all(da_ls_st_actual_avg_for_ip.dekad.values == da_ls_st_long_term_avg_for_ip.dekad.values)\n", + "\n", + "da_ls_st_long_term_avg_for_ip" + ] + }, + { + "cell_type": "markdown", + "id": "bcadc8fc-327a-410f-8b4a-fff945618c47", + "metadata": {}, + "source": [ + "### Get the actual length of continous excess in each interest period\n", + "\n", + "For surface temperature the run length is the number of successive dekads in an interest period above the long term average for the same interest period." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "31aa4268-62c2-4a7b-86ec-bdd826d51de5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1min 2s, sys: 899 ms, total: 1min 3s\n", + "Wall time: 1min 4s\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'surface_temperature' (dekad: 410, y: 128, x: 96)> Size: 40MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11
" + ], + "text/plain": [ + " Size: 40MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " spatial_ref int32 4B 6933\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "# For each interest period get the maximum number of successive dekads above long term average surface temperature in the interest period.\n", + "ls_st_run_length = []\n", + "for interest_period in interest_periods:\n", + " # Get the dekads in the interest period\n", + " ds = da_ls_st_binned_by_interest_period[interest_period]\n", + " \n", + " # Identify pixels which are empty for all dekads\n", + " no_data_mask = xr.apply_ufunc(\n", + " get_no_data_mask,\n", + " ds,\n", + " input_core_dims=[[\"dekad\"]],\n", + " vectorize=True,\n", + " dask=\"allowed\",\n", + " )\n", + " \n", + " # Get the long term average for the interest period.\n", + " long_term_avg = da_ls_st_long_term_avg_for_ip.sel(dekad=interest_period)\n", + " \n", + " # Get the pixels where the surface temperature is above the long term average surface temperature\n", + " mask = xr.where(ds > long_term_avg, 1, 0)\n", + " \n", + " # Get the maximum number of successive dekads above long term average surface temperature.\n", + " actual_run_length = xr.apply_ufunc(\n", + " max_consecutive_ones,\n", + " mask,\n", + " input_core_dims=[[\"dekad\"]],\n", + " vectorize=True,\n", + " dask=\"allowed\",\n", + " )\n", + " \n", + " # Modify the run length\n", + " modified_run_length = (actual_run_length.max() + 1) - actual_run_length\n", + " modified_run_length = modified_run_length.where(~no_data_mask)\n", + " ls_st_run_length.append(modified_run_length.assign_coords(dekad=interest_period).expand_dims({\"dekad\": 1}))\n", + "\n", + "da_ls_st_actual_run_length = xr.concat(ls_st_run_length, dim=\"dekad\")\n", + "da_ls_st_actual_run_length" + ] + }, + { + "cell_type": "markdown", + "id": "4d76d733-2c91-46f7-9cfb-a4c73b86eb31", + "metadata": {}, + "source": [ + "### Get the long term average of continous excess in each interest period" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "b8ae1de4-9dd2-4a48-8b75-73be3ca12064", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'surface_temperature' (dekad: 410, y: 128, x: 96)> Size: 40MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11
" + ], + "text/plain": [ + " Size: 40MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " spatial_ref int32 4B 6933\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get the long term average surface temperature run length for each interest period \n", + "long_term_avg_run_lenth_ls_st = {}\n", + "for dekad_no_in_year, interest_periods_list in grouped_by_year.items():\n", + " long_term_avg_for_period = da_ls_st_actual_run_length.sel(dekad=interest_periods_list).mean(dim=\"dekad\")\n", + " long_term_avg_run_lenth_ls_st[dekad_no_in_year] = long_term_avg_for_period\n", + " \n", + "da_ls_st_long_term_avg_run_length_for_ip = xr.concat([long_term_avg_run_lenth_ls_st[get_dekad_no_in_year(i)].assign_coords(dekad=i).expand_dims({\"dekad\": 1}) for i in interest_periods], dim=\"dekad\")\n", + "da_ls_st_long_term_avg_run_length_for_ip" + ] + }, + { + "cell_type": "markdown", + "id": "44145483-0499-4869-af45-50f6e3dd2252", + "metadata": {}, + "source": [ + "### Calculate the Temperature Drought Index" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "9aa98e76-b31c-4ee7-902f-2b675a6ddf6a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'surface_temperature' (dekad: 410, y: 128, x: 96)> Size: 40MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11
" + ], + "text/plain": [ + " Size: 40MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "TDI = (da_ls_st_actual_avg_for_ip / da_ls_st_long_term_avg_for_ip) * np.sqrt((da_ls_st_actual_run_length / da_ls_st_long_term_avg_run_length_for_ip))\n", + "TDI" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "46da40ce-e163-4f74-9857-5b84aac53a1b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'surface_temperature' (dekad: 410, y: 128, x: 96)> Size: 40MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11
" + ], + "text/plain": [ + " Size: 40MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#scaled TDI\n", + "TDI_scaled = (TDI - TDI.min()) / (TDI.max() - TDI.min())\n", + "TDI_scaled" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "4caa6f2b-9d5f-4870-b595-ea96b9db1500", + "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", + "
surface_temperature
dekadyx
2014-01-011742500.03402500.0NaN
3407500.0NaN
3412500.0NaN
3417500.0NaN
3422500.0NaN
............
2025-05-111107500.03857500.0NaN
3862500.0NaN
3867500.0NaN
3872500.0NaN
3877500.0NaN
\n", + "

5038080 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " surface_temperature\n", + "dekad y x \n", + "2014-01-01 1742500.0 3402500.0 NaN\n", + " 3407500.0 NaN\n", + " 3412500.0 NaN\n", + " 3417500.0 NaN\n", + " 3422500.0 NaN\n", + "... ...\n", + "2025-05-11 1107500.0 3857500.0 NaN\n", + " 3862500.0 NaN\n", + " 3867500.0 NaN\n", + " 3872500.0 NaN\n", + " 3877500.0 NaN\n", + "\n", + "[5038080 rows x 1 columns]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Convert to DataFrame.\n", + "df = TDI_scaled.to_dataframe().drop(columns=\"spatial_ref\")\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "8cbea8bb-da57-4815-85d3-ecf04e7f2fa8", + "metadata": {}, + "outputs": [], + "source": [ + "# Convert the DataFrame to an Arrow table\n", + "table = Table.from_pandas(df)\n", + "\n", + "# Get the tables existing metadata\n", + "existing_meta = table.schema.metadata\n", + "\n", + "# Dump the crs of the DataArray as new metadata to JSON.\n", + "meta_json = json.dumps(dict(crs=str(TDI_scaled.rio.crs)))\n", + "\n", + "# Combine the metadata\n", + "combined_meta = {\n", + "b\"xarray.metadata\": meta_json.encode(),\n", + "**existing_meta,\n", + "}\n", + "\n", + "# Replace the metadata.\n", + "table = table.replace_schema_metadata(combined_meta)" + ] + }, + { + "cell_type": "markdown", + "id": "db8612a8-496e-4a12-bb11-4be9b10e3852", + "metadata": {}, + "source": [ + "### Export the results in a Zip file" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "4089e0d3-ef95-49fb-b7b1-4c83058215dc", + "metadata": {}, + "outputs": [], + "source": [ + "# Write the table\n", + "write_table(table, output_path, compression=\"GZIP\")" + ] + }, + { + "cell_type": "markdown", + "id": "daaa05d2-e814-474d-b834-641f3ae74467", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## Additional information\n", + "\n", + " License The code in this notebook is licensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0).\n", + "\n", + "Digital Earth Africa data is licensed under the [Creative Commons by Attribution 4.0](https://creativecommons.org/licenses/by/4.0/) license.\n", + "\n", + " Contact If you need assistance, please post a question on the [DE Africa Slack channel](https://digitalearthafrica.slack.com/) or on the [GIS Stack Exchange](https://gis.stackexchange.com/questions/ask?tags=open-data-cube) using the `open-data-cube` tag (you can view previously asked questions [here](https://gis.stackexchange.com/questions/tagged/open-data-cube)).\n", + "\n", + "If you would like to report an issue with this notebook, you can file one on [Github](https://github.com/digitalearthafrica/deafrica-sandbox-notebooks).\n", + "\n", + " Compatible datacube version " + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "f6dd02e3-e322-43d9-9ff0-148a2977dfb1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.8.20\n" + ] + } + ], + "source": [ + "print(datacube.__version__)" + ] + }, + { + "cell_type": "markdown", + "id": "f7d20e3e-806a-4247-be05-4089eacef7dd", + "metadata": {}, + "source": [ + "**Last Tested:**" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "40491836-fc4e-4422-9bd8-a8ef1a33e292", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'2025-05-19'" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from datetime import datetime\n", + "datetime.today().strftime('%Y-%m-%d')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Use_cases/Enhanced_Combined_Drought_Index/04_SoilMoistureDroughtIndex.ipynb b/Use_cases/Enhanced_Combined_Drought_Index/04_SoilMoistureDroughtIndex.ipynb new file mode 100644 index 00000000..524814af --- /dev/null +++ b/Use_cases/Enhanced_Combined_Drought_Index/04_SoilMoistureDroughtIndex.ipynb @@ -0,0 +1,6838 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a1ee47cf-3544-4245-9884-92989e9f8877", + "metadata": {}, + "source": [ + "\n", + "\n", + "# Enhanced Combined Drought Index - Soil Moisture Drought Index\n" + ] + }, + { + "cell_type": "raw", + "id": "5f36c0bc-9aba-4e41-9698-96cc57458962", + "metadata": {}, + "source": [ + "**Keywords**: :index:`data used; WAPOR`, :index:`climate`, :index:`soil moisture`;" + ] + }, + { + "cell_type": "markdown", + "id": "4d6ce758-4950-4cea-96e6-ee58a302108a", + "metadata": {}, + "source": [ + "## Background " + ] + }, + { + "cell_type": "markdown", + "id": "1d1c29f8-816c-414b-8d63-efd95a7a647c", + "metadata": {}, + "source": [ + "Drought is an extended period, during which, fresh water availability and accessibility for the ecosystem at a given time and place is below normal, due to unfavourable spatial and temporal distribution of rainfall, temperature, soil moisture and wind characteristics [(Balint et al., 2013)](https://doi.org/10.1016/B978-0-444-59559-1.00023-2). Severe droughts can affect large populations, leading to a long-term threat to people’s livelihoods and result in tremendous economic loss [(Enenkel et al., 2016)](https://doi.org/10.3390/rs8040340)." + ] + }, + { + "cell_type": "markdown", + "id": "b20be23e-140e-4755-9324-eb1926bb72a6", + "metadata": {}, + "source": [ + "The **Enhanced Drought Index** is a combination of the following components: Vegetation, Precipitation, Temperature and Soil moisture.\n", + "\n", + "This notebook will focus on the **Soil moisture** component, which considers soil moisture deficits and deficit persistence. The index based on soil moisture is named as the Soil Moisture Drought Index (SMDI). The Soil Moisture Drought Index (SMDI) is used to assess drought conditions based on soil moisture levels.SMDI is an essential for monitoring drought conditions, especially in areas where soil moisture directly affects agriculture and natural resources. Droughts can have serious impacts on agriculture, water resources, and ecosystems, and soil moisture is a key factor in understanding drought severity, as it influences crop growth and the availability of water in the soil." + ] + }, + { + "cell_type": "markdown", + "id": "4630c991-7329-4ef8-8d34-e4dd5a2ef280", + "metadata": {}, + "source": [ + "\n", + "The notebook outlines:\n", + "\n", + "***\n", + "1. Loading Python and DE Africa Packages\n", + "2. Setting dask cluster\n", + "3. Loading area on interest\n", + "5. Load the WAPOR soil moisture dataset\n", + "6. Resampling of data to dekadal (10-day) intervals\n", + "7. Calculate the Soil Moisture Drought Index\n", + "8. Export the result as zip" + ] + }, + { + "cell_type": "markdown", + "id": "ec6d4e07-18c3-4830-b669-77e01b021a53", + "metadata": {}, + "source": [ + "## Getting started\n", + "\n", + "To run this analysis, run all the cells in the notebook, starting with the \"Load packages\" cell. " + ] + }, + { + "cell_type": "markdown", + "id": "3251008f-3b84-41eb-876d-d68059b0c6de", + "metadata": {}, + "source": [ + "### Load packages" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "73f5d02f-aee0-452f-81b3-ff22d921457f", + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "import os\n", + "\n", + "import dask\n", + "import geopandas as gpd\n", + "import numpy as np\n", + "import pandas as pd\n", + "import rioxarray\n", + "import toolz\n", + "import xarray as xr\n", + "import datacube\n", + "from deafrica_tools.bandindices import calculate_indices\n", + "from deafrica_tools.dask import create_local_dask_cluster\n", + "from deafrica_tools.datahandling import load_ard\n", + "from dekad import group_by_dekad, bin_by_interest_period, get_dekad_no_in_year, get_no_data_mask, max_consecutive_ones\n", + "from odc.geo.geobox import GeoBox\n", + "from odc.geo.geom import Geometry\n", + "from odc.geo.xr import rasterize\n", + "from pyarrow import Table\n", + "from pyarrow.parquet import write_table" + ] + }, + { + "cell_type": "markdown", + "id": "78798cea-a53f-48f6-bb69-037f79208a40", + "metadata": {}, + "source": [ + "### Connect to the datacube\n", + "\n", + "Connect to the datacube so we can access DE Africa data.\n", + "The `app` parameter is a unique name for the analysis which is based on the notebook file name." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "667f2e3b-1f3e-4c59-a73f-f5e769fc4943", + "metadata": {}, + "outputs": [], + "source": [ + "# Connect to the datacube\n", + "dc = datacube.Datacube(app=\"VegetationDroughtIndex\")" + ] + }, + { + "cell_type": "markdown", + "id": "8143eda0-f831-4f4c-bb2b-675587cfb09c", + "metadata": {}, + "source": [ + "### Set up a Dask cluster\n", + "\n", + "Dask can be used to better manage memory use and conduct the analysis in parallel. \n", + "For an introduction to using Dask with Digital Earth Africa, see the [Dask notebook](../../Beginners_guide/08_Parallel_processing_with_dask.ipynb).\n", + "\n", + ">**Note**: We recommend opening the Dask processing window to view the different computations that are being executed; to do this, see the *Dask dashboard in DE Africa* section of the [Dask notebook](../../Beginners_guide/08_Parallel_processing_with_dask.ipynb).\n", + "\n", + "To use Dask, set up the local computing cluster using the cell below." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e7bf7690-e8b4-468a-a9e6-9632953dd918", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/venv/lib/python3.12/site-packages/distributed/node.py:187: UserWarning: Port 8787 is already in use.\n", + "Perhaps you already have a cluster running?\n", + "Hosting the HTTP server on port 42469 instead\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "
\n", + "
\n", + "

Client

\n", + "

Client-52311615-3472-11f0-9187-62a7079d079f

\n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "
Connection method: Cluster objectCluster type: distributed.LocalCluster
\n", + " Dashboard: /user/mickwelli@bigpond.com/proxy/42469/status\n", + "
\n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + "
\n", + "

Cluster Info

\n", + "
\n", + "
\n", + "
\n", + "
\n", + "

LocalCluster

\n", + "

54063fec

\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\n", + " \n", + "
\n", + " Dashboard: /user/mickwelli@bigpond.com/proxy/42469/status\n", + " \n", + " Workers: 1\n", + "
\n", + " Total threads: 2\n", + " \n", + " Total memory: 11.21 GiB\n", + "
Status: runningUsing processes: True
\n", + "\n", + "
\n", + " \n", + "

Scheduler Info

\n", + "
\n", + "\n", + "
\n", + "
\n", + "
\n", + "
\n", + "

Scheduler

\n", + "

Scheduler-4532efb8-e6f2-476f-b8ee-251a99ae6726

\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " Comm: tcp://127.0.0.1:33207\n", + " \n", + " Workers: 1\n", + "
\n", + " Dashboard: /user/mickwelli@bigpond.com/proxy/42469/status\n", + " \n", + " Total threads: 2\n", + "
\n", + " Started: Just now\n", + " \n", + " Total memory: 11.21 GiB\n", + "
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "

Workers

\n", + "
\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "

Worker: 0

\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "
\n", + " Comm: tcp://127.0.0.1:45233\n", + " \n", + " Total threads: 2\n", + "
\n", + " Dashboard: /user/mickwelli@bigpond.com/proxy/38615/status\n", + " \n", + " Memory: 11.21 GiB\n", + "
\n", + " Nanny: tcp://127.0.0.1:40219\n", + "
\n", + " Local directory: /tmp/dask-scratch-space/worker-tq4ptki9\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "\n", + "
\n", + "
\n", + "\n", + "
\n", + "
\n", + "
\n", + "
\n", + " \n", + "\n", + "
\n", + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "create_local_dask_cluster()" + ] + }, + { + "cell_type": "markdown", + "id": "50542e91-46c5-4de9-823a-88c505db1a40", + "metadata": {}, + "source": [ + "### Analysis parameters\n", + "\n", + "The following cell sets important parameters for the analysis:\n", + "\n", + "* `resolution`: The x and y cell resolution of the satellite data in metres (spatial resolution). We'll use 5,000 m, which is approximately equal to the default CHIRPS resolution.\n", + "* `output_crs` : The coordinate reference system that the loaded data is to be reprojected to.\n", + "* `dask_chunks`: the size of the dask chunks, dask breaks data into manageable chunks that can be easily stored in memory, e.g. `dict(x=1000,y=1000)`\n", + "* `time_range` : Time range to load data for.\n", + "* `ip` : The interest period to use to calculate the drought indices e.g. (3, 4, 5 dekads). It defines to what extent past observations are considered. Longer IPs detect more severe drought events. For example, if the IP=3 dekads, then the drought index (say PDI) of 0.35 for dekad 2 of 2006 implies actual drought for dekad 36 of 2005, dekad 1 of 2006 and dekad 2 of 2006.\n", + "* `output_dir` : The directory in which to store results from the analysis.\n", + "\n", + "**If running the notebook for the first time**, keep the default settings below.\n", + "This will demonstrate how the analysis works and provide meaningful results." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "cc3c12d5-0a20-48db-8044-070ee03b3ddb", + "metadata": {}, + "outputs": [], + "source": [ + "resolution = (-5000, 5000)\n", + "output_crs = \"EPSG:6933\"\n", + "dask_chunks = dict(x=100,y=100)\n", + "time_range = (\"2014\",\"2025\")\n", + "output_dir = \"results\"\n", + "\n", + "# Corresponding to the six-months Standardized Precipitation Evapotranspiration Index\n", + "ip = 18\n", + "\n", + "# Create the outpur directory if it does not exist.\n", + "os.makedirs(output_dir, exist_ok=True)" + ] + }, + { + "cell_type": "markdown", + "id": "2264008d-b8fe-447c-8f84-576a430d330e", + "metadata": {}, + "source": [ + "Below, a vector dataset is called and read which contains the extents of level 1 administrative boundaries in Ethiopia. In the default case, the regional state of Amhara is northern Ethiopia is the area of interest. This can be replaced with any administrative boundary, such as those available on the [GADM database](https://gadm.org/data.html). Larger areas have a larger processing and memory burden and may require additional resources (larger instances) to run effectively." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "2498fe63-719b-4d52-8283-7ebfd433f64b", + "metadata": {}, + "outputs": [], + "source": [ + "# Read GADM Ethiopia level 1 file\n", + "eth = gpd.read_file('data/gadm41_ETH_1.json')\n", + "\n", + "# Select the country of interest by providing the name below\n", + "idx = eth[eth['NAME_1'] == 'Amhara'].index[0]\n", + "geopolygon = Geometry(geom=eth.iloc[idx].geometry, crs=eth.crs)\n", + "\n", + "# Create the output path\n", + "output_path = os.path.join(output_dir, \"SMDI_Amhara.parquet\")" + ] + }, + { + "cell_type": "markdown", + "id": "316d2648-b4b8-4338-acb2-8bf368cb220b", + "metadata": {}, + "source": [ + "### Load WaPOR soil moisture data\n", + "Load the WaPOR soil moisture data using the analysis parameters set in the previous section." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "161b8c5f-5c49-46c1-b13a-f8df74b5b4be", + "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", + "
namedescriptionlicensedefault_crsdefault_resolution
name
wapor_soil_moisturewapor_soil_moistureWaPOR v3 Level 2 100m dekadal relative root zo...CC-BY-SA-4.0EPSG:4326(-0.0009765625, 0.0009765625)
\n", + "
" + ], + "text/plain": [ + " name \\\n", + "name \n", + "wapor_soil_moisture wapor_soil_moisture \n", + "\n", + " description \\\n", + "name \n", + "wapor_soil_moisture WaPOR v3 Level 2 100m dekadal relative root zo... \n", + "\n", + " license default_crs default_resolution \n", + "name \n", + "wapor_soil_moisture CC-BY-SA-4.0 EPSG:4326 (-0.0009765625, 0.0009765625) " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# List all available WAPOR products.\n", + "products_df =dc.list_products()\n", + "products_df[products_df.name.str.contains(\"wapor\")]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "64fcf007-1729-48c1-b977-18b492c62582", + "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", + "
namedtypeunitsnodataaliasesflags_definitionadd_offsetscale_factor
measurement
relative_soil_moisturerelative_soil_moistureint16%-9999NaNNaN0.00.001
\n", + "
" + ], + "text/plain": [ + " name dtype units nodata aliases \\\n", + "measurement \n", + "relative_soil_moisture relative_soil_moisture int16 % -9999 NaN \n", + "\n", + " flags_definition add_offset scale_factor \n", + "measurement \n", + "relative_soil_moisture NaN 0.0 0.001 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# List the measurements for the product\n", + "dc.list_measurements().loc[\"wapor_soil_moisture\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "da034c9e-097b-40b4-bc9d-3bf697047246", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 32.4 s, sys: 15.9 s, total: 48.3 s\n", + "Wall time: 12min 14s\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 13MB\n",
+       "Dimensions:                 (time: 260, y: 128, x: 96)\n",
+       "Coordinates:\n",
+       "  * time                    (time) datetime64[ns] 2kB 2018-01-05T23:59:59.500...\n",
+       "  * y                       (y) float64 1kB 1.742e+06 1.738e+06 ... 1.108e+06\n",
+       "  * x                       (x) float64 768B 3.402e+06 3.408e+06 ... 3.878e+06\n",
+       "    spatial_ref             int32 4B 6933\n",
+       "Data variables:\n",
+       "    relative_soil_moisture  (time, y, x) float32 13MB 320.0 300.0 ... 494.0\n",
+       "Attributes:\n",
+       "    crs:           EPSG:6933\n",
+       "    grid_mapping:  spatial_ref
" + ], + "text/plain": [ + " Size: 13MB\n", + "Dimensions: (time: 260, y: 128, x: 96)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 2kB 2018-01-05T23:59:59.500...\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + "Data variables:\n", + " relative_soil_moisture (time, y, x) float32 13MB 320.0 300.0 ... 494.0\n", + "Attributes:\n", + " crs: EPSG:6933\n", + " grid_mapping: spatial_ref" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "ds_sm = dc.load(\n", + " product=\"wapor_soil_moisture\",\n", + " measurements=[\"relative_soil_moisture\"],\n", + " time=time_range,\n", + " geopolygon=geopolygon,\n", + " resolution=resolution,\n", + " output_crs=output_crs,\n", + ")\n", + "\n", + "# Mask no data values\n", + "ds_sm = ds_sm.where(ds_sm != -9999.0)\n", + "\n", + "ds_sm" + ] + }, + { + "cell_type": "markdown", + "id": "cd2fe825-6416-4eb9-b4eb-f3a30c2bef1b", + "metadata": {}, + "source": [ + "### Mask the soil moisture data" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "b2d19516-9cce-4bbe-b308-014e2bfe1280", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 13MB\n",
+       "Dimensions:                 (time: 260, y: 128, x: 96)\n",
+       "Coordinates:\n",
+       "  * time                    (time) datetime64[ns] 2kB 2018-01-05T23:59:59.500...\n",
+       "  * y                       (y) float64 1kB 1.742e+06 1.738e+06 ... 1.108e+06\n",
+       "  * x                       (x) float64 768B 3.402e+06 3.408e+06 ... 3.878e+06\n",
+       "    spatial_ref             int32 4B 6933\n",
+       "Data variables:\n",
+       "    relative_soil_moisture  (time, y, x) float32 13MB nan nan nan ... nan nan\n",
+       "Attributes:\n",
+       "    crs:           EPSG:6933\n",
+       "    grid_mapping:  spatial_ref
" + ], + "text/plain": [ + " Size: 13MB\n", + "Dimensions: (time: 260, y: 128, x: 96)\n", + "Coordinates:\n", + " * time (time) datetime64[ns] 2kB 2018-01-05T23:59:59.500...\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + "Data variables:\n", + " relative_soil_moisture (time, y, x) float32 13MB nan nan nan ... nan nan\n", + "Attributes:\n", + " crs: EPSG:6933\n", + " grid_mapping: spatial_ref" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Rasterize the country geopolygon and mask the loaded Landsat data.\n", + "country_mask = rasterize(poly=geopolygon, how=ds_sm.odc.geobox)\n", + "ds_sm = ds_sm.where(country_mask)\n", + "ds_sm" + ] + }, + { + "cell_type": "markdown", + "id": "42c40979-e266-4626-9bc3-e0772aaec02f", + "metadata": {}, + "source": [ + "### Resample data\n", + "\n", + "Resample the soil moisture `ds_sm` timeseries into **dekadal** (10-day) timesteps." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "7296ef6f-7ceb-4c07-8b55-bebb03532a62", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'relative_soil_moisture' (dekad: 260, y: 128, x: 96)> Size: 13MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 2kB 2018-01-01 2018-01-11 ... 2025-03-11\n",
+       "Attributes:\n",
+       "    units:         %\n",
+       "    nodata:        -9999\n",
+       "    add_offset:    0.0\n",
+       "    scale_factor:  0.001\n",
+       "    crs:           EPSG:6933\n",
+       "    grid_mapping:  spatial_ref
" + ], + "text/plain": [ + " Size: 13MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 2kB 2018-01-01 2018-01-11 ... 2025-03-11\n", + "Attributes:\n", + " units: %\n", + " nodata: -9999\n", + " add_offset: 0.0\n", + " scale_factor: 0.001\n", + " crs: EPSG:6933\n", + " grid_mapping: spatial_ref" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# To DataArray\n", + "da_sm_dekadal = group_by_dekad(ds_sm[\"relative_soil_moisture\"]).mean(dim=\"time\")\n", + "da_sm_dekadal " + ] + }, + { + "cell_type": "markdown", + "id": "4894a8d6-acea-4323-af78-deea62bea979", + "metadata": {}, + "source": [ + "### Modify the timeseries\n", + "\n", + "The raw timeseries of soil moisture is modified to adjust the range of all variables to avoid a division by zero." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "932345ea-de12-4fe9-8a04-ee757db55d12", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'relative_soil_moisture' (dekad: 260, y: 128, x: 96)> Size: 13MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 2kB 2018-01-01 2018-01-11 ... 2025-03-11
" + ], + "text/plain": [ + " Size: 13MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 2kB 2018-01-01 2018-01-11 ... 2025-03-11" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "da_sm_dekadal_modified = da_sm_dekadal + 1\n", + "da_sm_dekadal_modified" + ] + }, + { + "cell_type": "markdown", + "id": "6e62ed20-cca0-4899-98f8-abea3e929eb8", + "metadata": {}, + "source": [ + "### Group the modified timeseries using the `ip` parameter\n", + "\n", + "The `ip` parameter determines to what extent past observations are considered. Longer IPs detect more severe drought events. The default `ip` used of **18 dekads** corresponds to the 6-month Standardized Precipitation Evapotranspiration Index.\n", + "\n", + "For example, calculating the Soil Moisture Drought Index for the dekad `2011-01-11` using an interest period of `ip=3` requires rainfall data from the dekad `2010-12-21`, `2011-01-01` and `2011-01-11`.\n", + "\n", + "\n", + "**Each interest period is labelled using its end dekad.**" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "56198598-4354-4c87-9a39-2c5dd8b4aa9e", + "metadata": {}, + "outputs": [], + "source": [ + "# Group the soil moisture dekadal timeseries by the interest period.\n", + "# The dictionary keys are the end dekad for each interest period.\n", + "# The values of the dictionary are the soil moisture data that belongs to the interest period\n", + "da_sm_binned_by_interest_period = bin_by_interest_period(ds=da_sm_dekadal_modified, ip=ip)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "547f3a26-59b1-426c-a84d-3c4fc971a99e", + "metadata": {}, + "outputs": [], + "source": [ + "# Get the interest periods\n", + "interest_periods = list(da_sm_binned_by_interest_period.keys())" + ] + }, + { + "cell_type": "markdown", + "id": "9fa84e91-8887-42a1-81b1-abe8d90e1da7", + "metadata": {}, + "source": [ + "### Get the average values for each interest period" + ] + }, + { + "cell_type": "markdown", + "id": "36279522-e616-4bce-9694-104cf8ca4183", + "metadata": {}, + "source": [ + "Get the actual average soil moisture for each interest period." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "4544dbff-68e7-4065-9467-22892d3c5820", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'relative_soil_moisture' (dekad: 260, y: 128, x: 96)> Size: 13MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 2kB 2018-01-01 2018-01-11 ... 2025-03-11
" + ], + "text/plain": [ + " Size: 13MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 2kB 2018-01-01 2018-01-11 ... 2025-03-11" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "da_sm_actual_avg_for_ip = xr.concat([da_sm_binned_by_interest_period[i].mean(dim=\"dekad\").assign_coords(dekad=i).expand_dims({\"dekad\": 1}) for i in interest_periods], dim=\"dekad\")\n", + "da_sm_actual_avg_for_ip" + ] + }, + { + "cell_type": "markdown", + "id": "67f5404e-6626-4f70-a79e-b2f57d162908", + "metadata": {}, + "source": [ + "### Get the long term average for each interest period over the years of available data\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "05e2bec2-4c47-4739-aa87-abeb4e67d2f6", + "metadata": {}, + "outputs": [], + "source": [ + "# Group the interest periods by year by getting the dekad number in the year for the end dekad of\n", + "# the interest period. \n", + "grouped_by_year = toolz.groupby(lambda dekad: get_dekad_no_in_year(date=dekad), interest_periods)" + ] + }, + { + "cell_type": "markdown", + "id": "9c954092-e6ad-490f-a60f-a3e0061d1056", + "metadata": {}, + "source": [ + "Get the long term average soil moisture for each interest period." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "1b7d1833-cdbd-403b-8563-072eb0adbfec", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'relative_soil_moisture' (dekad: 260, y: 128, x: 96)> Size: 13MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 2kB 2018-01-01 2018-01-11 ... 2025-03-11
" + ], + "text/plain": [ + " Size: 13MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]], dtype=float32)\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 2kB 2018-01-01 2018-01-11 ... 2025-03-11" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "long_term_avg_sm = {}\n", + "for dekad_no_in_year, interest_periods_list in grouped_by_year.items():\n", + " long_term_avg_for_period = xr.concat([da_sm_binned_by_interest_period[i] for i in interest_periods_list], dim=\"dekad\").mean(dim=\"dekad\")\n", + " long_term_avg_sm[dekad_no_in_year] = long_term_avg_for_period\n", + " \n", + "da_sm_long_term_avg_for_ip = xr.concat([long_term_avg_sm[get_dekad_no_in_year(i)].assign_coords(dekad=i).expand_dims({\"dekad\": 1}) for i in interest_periods], dim=\"dekad\")\n", + "\n", + "assert all(da_sm_actual_avg_for_ip.dekad.values == da_sm_long_term_avg_for_ip.dekad.values)\n", + "\n", + "da_sm_long_term_avg_for_ip" + ] + }, + { + "cell_type": "markdown", + "id": "bcadc8fc-327a-410f-8b4a-fff945618c47", + "metadata": {}, + "source": [ + "### Get the actual length of continous deficit in each interest period\n", + "\n", + "For soil moisture the run length is the number of successive dekads in an interest period below the long term average for the same interest period." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "31aa4268-62c2-4a7b-86ec-bdd826d51de5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 41.1 s, sys: 1.12 s, total: 42.2 s\n", + "Wall time: 42.9 s\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'relative_soil_moisture' (dekad: 260, y: 128, x: 96)> Size: 26MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "  * dekad        (dekad) datetime64[ns] 2kB 2018-01-01 2018-01-11 ... 2025-03-11
" + ], + "text/plain": [ + " Size: 26MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " spatial_ref int32 4B 6933\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " * dekad (dekad) datetime64[ns] 2kB 2018-01-01 2018-01-11 ... 2025-03-11" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%%time\n", + "# For each interest period get the maximum number of successive dekads below long term average soil moisture in the interest period.\n", + "sm_run_length = []\n", + "for interest_period in interest_periods:\n", + " # Get the dekads in the interest period\n", + " ds = da_sm_binned_by_interest_period[interest_period]\n", + " \n", + " # Identify pixels which are empty for all dekads\n", + " no_data_mask = xr.apply_ufunc(\n", + " get_no_data_mask,\n", + " ds,\n", + " input_core_dims=[[\"dekad\"]],\n", + " vectorize=True,\n", + " dask=\"allowed\",\n", + " )\n", + " \n", + " # Get the long term average for the interest period\n", + " long_term_avg = da_sm_long_term_avg_for_ip.sel(dekad=interest_period)\n", + " \n", + " # Get the pixels where the soil moisture is below the long term average soil moisture\n", + " mask = xr.where(ds < long_term_avg, 1, 0)\n", + " \n", + " # Get the maximum number of successive dekads below long term average soil moisture.\n", + " actual_run_length = xr.apply_ufunc(\n", + " max_consecutive_ones,\n", + " mask,\n", + " input_core_dims=[[\"dekad\"]],\n", + " vectorize=True,\n", + " dask=\"allowed\",\n", + " )\n", + " \n", + " # Modify the run length\n", + " modified_run_length = (actual_run_length.max() + 1) - actual_run_length\n", + " modified_run_length = modified_run_length.where(~no_data_mask)\n", + " sm_run_length.append(modified_run_length.assign_coords(dekad=interest_period).expand_dims({\"dekad\": 1}))\n", + "\n", + "da_sm_actual_run_length = xr.concat(sm_run_length, dim=\"dekad\")\n", + "da_sm_actual_run_length" + ] + }, + { + "cell_type": "markdown", + "id": "4d76d733-2c91-46f7-9cfb-a4c73b86eb31", + "metadata": {}, + "source": [ + "### Get the long term average of continous deficit in each interest period" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "b8ae1de4-9dd2-4a48-8b75-73be3ca12064", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'relative_soil_moisture' (dekad: 260, y: 128, x: 96)> Size: 26MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "  * dekad        (dekad) datetime64[ns] 2kB 2018-01-01 2018-01-11 ... 2025-03-11
" + ], + "text/plain": [ + " Size: 26MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " spatial_ref int32 4B 6933\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " * dekad (dekad) datetime64[ns] 2kB 2018-01-01 2018-01-11 ... 2025-03-11" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get the long term average soil moisture run length for each interest period \n", + "long_term_avg_run_lenth_sm = {}\n", + "for dekad_no_in_year, interest_periods_list in grouped_by_year.items():\n", + " long_term_avg_for_period = da_sm_actual_run_length.sel(dekad=interest_periods_list).mean(dim=\"dekad\")\n", + " long_term_avg_run_lenth_sm[dekad_no_in_year] = long_term_avg_for_period\n", + " \n", + "da_sm_long_term_avg_run_length_for_ip = xr.concat([long_term_avg_run_lenth_sm[get_dekad_no_in_year(i)].assign_coords(dekad=i).expand_dims({\"dekad\": 1}) for i in interest_periods], dim=\"dekad\")\n", + "da_sm_long_term_avg_run_length_for_ip" + ] + }, + { + "cell_type": "markdown", + "id": "44145483-0499-4869-af45-50f6e3dd2252", + "metadata": {}, + "source": [ + "### Calculate the Soil Moisture Drought Index" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "9aa98e76-b31c-4ee7-902f-2b675a6ddf6a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'relative_soil_moisture' (dekad: 260, y: 128, x: 96)> Size: 26MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 2kB 2018-01-01 2018-01-11 ... 2025-03-11
" + ], + "text/plain": [ + " Size: 26MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 2kB 2018-01-01 2018-01-11 ... 2025-03-11" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SMDI = (da_sm_actual_avg_for_ip / da_sm_long_term_avg_for_ip) * np.sqrt((da_sm_actual_run_length / da_sm_long_term_avg_run_length_for_ip))\n", + "SMDI" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "46da40ce-e163-4f74-9857-5b84aac53a1b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'relative_soil_moisture' (dekad: 260, y: 128, x: 96)> Size: 26MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "  * y            (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "  * dekad        (dekad) datetime64[ns] 2kB 2018-01-01 2018-01-11 ... 2025-03-11
" + ], + "text/plain": [ + " Size: 26MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " * y (y) float64 1kB 1.742e+06 1.738e+06 ... 1.112e+06 1.108e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + " * dekad (dekad) datetime64[ns] 2kB 2018-01-01 2018-01-11 ... 2025-03-11" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Scaled the Soil Moisture Drought Index\n", + "SMDI_scaled = (SMDI - SMDI.min()) / (SMDI.max() - SMDI.min())\n", + "SMDI_scaled" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "4caa6f2b-9d5f-4870-b595-ea96b9db1500", + "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", + "
relative_soil_moisture
dekadyx
2018-01-011742500.03402500.0NaN
3407500.0NaN
3412500.0NaN
3417500.0NaN
3422500.0NaN
............
2025-03-111107500.03857500.0NaN
3862500.0NaN
3867500.0NaN
3872500.0NaN
3877500.0NaN
\n", + "

3194880 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " relative_soil_moisture\n", + "dekad y x \n", + "2018-01-01 1742500.0 3402500.0 NaN\n", + " 3407500.0 NaN\n", + " 3412500.0 NaN\n", + " 3417500.0 NaN\n", + " 3422500.0 NaN\n", + "... ...\n", + "2025-03-11 1107500.0 3857500.0 NaN\n", + " 3862500.0 NaN\n", + " 3867500.0 NaN\n", + " 3872500.0 NaN\n", + " 3877500.0 NaN\n", + "\n", + "[3194880 rows x 1 columns]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Convert to DataFrame.\n", + "df = SMDI_scaled.to_dataframe().drop(columns=\"spatial_ref\")\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "8cbea8bb-da57-4815-85d3-ecf04e7f2fa8", + "metadata": {}, + "outputs": [], + "source": [ + "# Convert the DataFrame to an Arrow table\n", + "table = Table.from_pandas(df)\n", + "\n", + "# Get the tables existing metadata\n", + "existing_meta = table.schema.metadata\n", + "\n", + "# Dump the crs of the DataArray as new metadata to JSON.\n", + "meta_json = json.dumps(dict(crs=str(SMDI_scaled.rio.crs)))\n", + "\n", + "# Combine the metadata\n", + "combined_meta = {\n", + "b\"xarray.metadata\": meta_json.encode(),\n", + "**existing_meta,\n", + "}\n", + "\n", + "# Replace the metadata.\n", + "table = table.replace_schema_metadata(combined_meta)" + ] + }, + { + "cell_type": "markdown", + "id": "eed49c65-f85f-4a29-a0b7-42fd7470b1f6", + "metadata": {}, + "source": [ + "### Export the results in a Zip file" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "4089e0d3-ef95-49fb-b7b1-4c83058215dc", + "metadata": {}, + "outputs": [], + "source": [ + "# Write the table\n", + "write_table(table, output_path, compression=\"GZIP\")" + ] + }, + { + "cell_type": "markdown", + "id": "7e9e0e15-e198-4c73-98df-f64600837c6c", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## Additional information\n", + "\n", + " License The code in this notebook is licensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0).\n", + "\n", + "Digital Earth Africa data is licensed under the [Creative Commons by Attribution 4.0](https://creativecommons.org/licenses/by/4.0/) license.\n", + "\n", + " Contact If you need assistance, please post a question on the [DE Africa Slack channel](https://digitalearthafrica.slack.com/) or on the [GIS Stack Exchange](https://gis.stackexchange.com/questions/ask?tags=open-data-cube) using the `open-data-cube` tag (you can view previously asked questions [here](https://gis.stackexchange.com/questions/tagged/open-data-cube)).\n", + "\n", + "If you would like to report an issue with this notebook, you can file one on [Github](https://github.com/digitalearthafrica/deafrica-sandbox-notebooks).\n", + "\n", + " Compatible datacube version :" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "fc3485ff-1566-4bda-992e-b25c66304799", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.8.20\n" + ] + } + ], + "source": [ + "print(datacube.__version__)" + ] + }, + { + "cell_type": "markdown", + "id": "d5c2520f-9842-443d-ac8b-6b181d6f2545", + "metadata": {}, + "source": [ + "**Last Tested:**" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "114cacb9-9850-450e-b772-6dae78d01c96", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'2025-05-19'" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from datetime import datetime\n", + "datetime.today().strftime('%Y-%m-%d')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Use_cases/Enhanced_Combined_Drought_Index/05_EnhancedCombinedDroughtIndex.ipynb b/Use_cases/Enhanced_Combined_Drought_Index/05_EnhancedCombinedDroughtIndex.ipynb new file mode 100644 index 00000000..55c910e6 --- /dev/null +++ b/Use_cases/Enhanced_Combined_Drought_Index/05_EnhancedCombinedDroughtIndex.ipynb @@ -0,0 +1,3689 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "65609557-cb58-4c09-960a-5626912862f9", + "metadata": {}, + "source": [ + "\n", + "\n", + "# Calculate the Enhanced Combined Drought Index" + ] + }, + { + "cell_type": "markdown", + "id": "8f5574dd-2771-4ec4-8303-4b03f6502f17", + "metadata": {}, + "source": [ + "## Background \n", + "\n", + "Drought is an extended period, during which, fresh water availability and accessibility for the ecosystem at a given time and place is below normal, due to unfavourable spatial and temporal distribution of rainfall, temperature, soil moisture and wind characteristics [(Balint et al., 2013)](https://doi.org/10.1016/B978-0-444-59559-1.00023-2). Severe droughts can affect large populations, leading to a long-term threat to people’s livelihoods and result in tremendous economic loss [(Enenkel et al., 2016)](https://doi.org/10.3390/rs8040340)." + ] + }, + { + "cell_type": "markdown", + "id": "7e5ddc51-27a5-473c-966a-3321f9aef411", + "metadata": {}, + "source": [ + "The Enhanced Combined Drought(ECDI) Index aims at the timely and reliable detection of drought events with regard to their spatio-temporal extent and severity. The Enhanced Drought Index is a combination of the following:\n", + "\n", + "- **Vegetation** component which considers NDVI deficits and deficit persistence. The index based on the vegetation component is named as **Vegetation Drought Index (VDI)**.\n", + "- **Precipitation** component, which considers rainfall deficits and dryness persistence. The index calculated using the precipitation component is referred as the **Precipitation Drought Index (PDI)**.\n", + "- **Temperature** component, which considers temperature excesses and persistence of high temperatures. The index based on temperature is named as **Temperature Drought Index (TDI)**.\n", + "- **Soil moisture** component, which considers soil moisture deficits and deficit persistence. The index based on soil moisture is named as the **Soil Moisture Drought Index (SMDI)**.\n", + "\n", + "The index uses **satellite-derived** rainfall, soil moisture, land surface temperature, and vegetation status as input datasets [(Enenkel et al., 2016)](https://doi.org/10.3390/rs8040340)" + ] + }, + { + "cell_type": "markdown", + "id": "39869edb-9cb6-4da6-b155-da10a3ca5e82", + "metadata": {}, + "source": [ + "\n", + "The notebook outlines:\n", + "\n", + "***\n", + "1. Loading Python and DE Africa Packages\n", + "2. Load drought indices data\n", + "3. Calculate the weight for each drought index\n", + "4. Calculate the Enhanced Combined Drought Index\n", + "5. Drought Risk Warning Levels.\n", + "7. Calculate the Soil Moisture Drought Index\n", + "8. Export the result as zip" + ] + }, + { + "cell_type": "markdown", + "id": "a7cd34ba-6709-4e2e-8911-c7e2aeda90d1", + "metadata": {}, + "source": [ + "## Getting started\n", + "\n", + "To run this analysis, run all the cells in the notebook, starting with the \"Load packages\" cell. " + ] + }, + { + "cell_type": "markdown", + "id": "5812b146-5eb8-4f15-9f94-3d9f6116e63e", + "metadata": {}, + "source": [ + "### Load packages" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "674b8333-61f4-4c58-aa18-e682a3fe36b8", + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "import os\n", + "from datetime import datetime\n", + "\n", + "import geopandas as gpd\n", + "import matplotlib as mpl\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "import rioxarray\n", + "import xarray as xr\n", + "from deafrica_tools.spatial import add_geobox\n", + "from dekad import get_correlation, get_max_value\n", + "from odc.geo.geom import Geometry\n", + "from odc.geo.xr import rasterize\n", + "from pyarrow.parquet import read_table" + ] + }, + { + "cell_type": "markdown", + "id": "a95be322-012b-451d-8411-bdc55fedafbf", + "metadata": {}, + "source": [ + "### Define Area of Interest" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "2f41cd6f-db8c-40d4-ba35-96585418485b", + "metadata": {}, + "outputs": [], + "source": [ + "# Read GADM Ethiopia level 1 file\n", + "eth = gpd.read_file('data/gadm41_ETH_1.json')\n", + "\n", + "# Select the country of interest by providing the name below\n", + "idx = eth[eth['NAME_1'] == 'Amhara'].index[0]\n", + "geopolygon = Geometry(geom=eth.iloc[idx].geometry, crs=eth.crs)" + ] + }, + { + "cell_type": "markdown", + "id": "2933dbfd-bc85-41fe-8e98-1a09046d3c12", + "metadata": {}, + "source": [ + "### Load the drought indices data" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ddaa3ff9-b0ec-44df-b14e-3dc39ae7d69b", + "metadata": {}, + "outputs": [], + "source": [ + "PARQUET_META_KEY = b\"xarray.metadata\"\n", + "output_dir = \"results\"" + ] + }, + { + "cell_type": "markdown", + "id": "d8b3a165-7a74-4a70-b5ea-03b70104d2a3", + "metadata": {}, + "source": [ + "### Load the results of Vegetation Drought Index (VDI) " + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e301e7bf-92a3-49bf-b97b-93ab2881490c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 40MB\n",
+       "Dimensions:      (dekad: 410, y: 128, x: 96)\n",
+       "Coordinates:\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11\n",
+       "  * y            (y) float64 1kB 1.108e+06 1.112e+06 ... 1.738e+06 1.742e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "Data variables:\n",
+       "    NDVI         (dekad, y, x) float64 40MB nan nan nan nan ... nan nan nan nan
" + ], + "text/plain": [ + " Size: 40MB\n", + "Dimensions: (dekad: 410, y: 128, x: 96)\n", + "Coordinates:\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11\n", + " * y (y) float64 1kB 1.108e+06 1.112e+06 ... 1.738e+06 1.742e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + "Data variables:\n", + " NDVI (dekad, y, x) float64 40MB nan nan nan nan ... nan nan nan nan" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "VDI_path = os.path.join(output_dir, \"VDI_Amhara.parquet\")\n", + "\n", + "VDI_df = read_table(VDI_path)\n", + "attrs = json.loads(VDI_df.schema.metadata[PARQUET_META_KEY])\n", + "\n", + "VDI_df = VDI_df.to_pandas()\n", + "VDI_df.attrs = attrs\n", + "\n", + "VDI = VDI_df.to_xarray()\n", + "VDI = add_geobox(VDI, crs=VDI_df.attrs[\"crs\"])\n", + "VDI" + ] + }, + { + "cell_type": "markdown", + "id": "655a3efa-6562-492a-96a6-ce7dc2bddd91", + "metadata": {}, + "source": [ + "### Load the results of Soil Moisture Drought Index (SMDI)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "fcaa40a4-1f60-43c8-ad40-433fd7918045", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 40MB\n",
+       "Dimensions:                 (dekad: 410, y: 128, x: 96)\n",
+       "Coordinates:\n",
+       "  * dekad                   (dekad) datetime64[ns] 3kB 2014-01-01 ... 2025-05-11\n",
+       "  * y                       (y) float64 1kB 1.108e+06 1.112e+06 ... 1.742e+06\n",
+       "  * x                       (x) float64 768B 3.402e+06 3.408e+06 ... 3.878e+06\n",
+       "    spatial_ref             int32 4B 6933\n",
+       "Data variables:\n",
+       "    relative_soil_moisture  (dekad, y, x) float64 40MB nan nan nan ... nan nan
" + ], + "text/plain": [ + " Size: 40MB\n", + "Dimensions: (dekad: 410, y: 128, x: 96)\n", + "Coordinates:\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 ... 2025-05-11\n", + " * y (y) float64 1kB 1.108e+06 1.112e+06 ... 1.742e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + "Data variables:\n", + " relative_soil_moisture (dekad, y, x) float64 40MB nan nan nan ... nan nan" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "SMDI_path = os.path.join(output_dir, \"SMDI_Amhara.parquet\")\n", + "\n", + "SMDI_df = read_table(SMDI_path)\n", + "attrs = json.loads(SMDI_df.schema.metadata[PARQUET_META_KEY])\n", + "\n", + "SMDI_df = SMDI_df.to_pandas()\n", + "SMDI_df.attrs = attrs\n", + "\n", + "SMDI = SMDI_df.to_xarray()\n", + "SMDI = add_geobox(SMDI, crs=SMDI_df.attrs[\"crs\"])\n", + "\n", + "SMDI = SMDI.reindex_like(VDI)\n", + "\n", + "# Ensure the timeseries matches the vegetation timeseries.\n", + "SMDI" + ] + }, + { + "cell_type": "markdown", + "id": "60c089e0-fb92-408e-8ed5-e41cdb67fc11", + "metadata": {}, + "source": [ + "### Load the results of Temperature Drought Index (TDI)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "fbbf58df-fd63-4de1-8515-18d38ceaedf2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 40MB\n",
+       "Dimensions:              (dekad: 410, y: 128, x: 96)\n",
+       "Coordinates:\n",
+       "  * dekad                (dekad) datetime64[ns] 3kB 2014-01-01 ... 2025-05-11\n",
+       "  * y                    (y) float64 1kB 1.108e+06 1.112e+06 ... 1.742e+06\n",
+       "  * x                    (x) float64 768B 3.402e+06 3.408e+06 ... 3.878e+06\n",
+       "    spatial_ref          int32 4B 6933\n",
+       "Data variables:\n",
+       "    surface_temperature  (dekad, y, x) float64 40MB nan nan nan ... nan nan nan
" + ], + "text/plain": [ + " Size: 40MB\n", + "Dimensions: (dekad: 410, y: 128, x: 96)\n", + "Coordinates:\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 ... 2025-05-11\n", + " * y (y) float64 1kB 1.108e+06 1.112e+06 ... 1.742e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + "Data variables:\n", + " surface_temperature (dekad, y, x) float64 40MB nan nan nan ... nan nan nan" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "TDI_path = os.path.join(output_dir, \"TDI_Amhara.parquet\")\n", + "\n", + "TDI_df = read_table(TDI_path)\n", + "attrs = json.loads(TDI_df.schema.metadata[PARQUET_META_KEY])\n", + "\n", + "TDI_df = TDI_df.to_pandas()\n", + "TDI_df.attrs = attrs\n", + "\n", + "TDI = TDI_df.to_xarray()\n", + "TDI = add_geobox(TDI, crs=TDI_df.attrs[\"crs\"])\n", + "\n", + "# Ensure the timeseries matches the vegetation timeseries.\n", + "TDI = TDI.reindex_like(VDI)\n", + "\n", + "TDI" + ] + }, + { + "cell_type": "markdown", + "id": "b3de2f27-9abc-40a0-900e-ffbc97a7b443", + "metadata": {}, + "source": [ + "### Load the results of Precipitation Drought Index (PDI)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "b3454d61-ce85-4e64-9117-dd8e01017de7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 40MB\n",
+       "Dimensions:      (dekad: 410, y: 128, x: 96)\n",
+       "Coordinates:\n",
+       "  * dekad        (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11\n",
+       "  * y            (y) float64 1kB 1.108e+06 1.112e+06 ... 1.738e+06 1.742e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933\n",
+       "Data variables:\n",
+       "    rainfall     (dekad, y, x) float64 40MB nan nan nan nan ... nan nan nan nan
" + ], + "text/plain": [ + " Size: 40MB\n", + "Dimensions: (dekad: 410, y: 128, x: 96)\n", + "Coordinates:\n", + " * dekad (dekad) datetime64[ns] 3kB 2014-01-01 2014-01-11 ... 2025-05-11\n", + " * y (y) float64 1kB 1.108e+06 1.112e+06 ... 1.738e+06 1.742e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933\n", + "Data variables:\n", + " rainfall (dekad, y, x) float64 40MB nan nan nan nan ... nan nan nan nan" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "PDI_path = os.path.join(output_dir, \"PDI_Amhara.parquet\")\n", + "\n", + "PDI_df = read_table(PDI_path)\n", + "attrs = json.loads(PDI_df.schema.metadata[PARQUET_META_KEY])\n", + "\n", + "PDI_df = PDI_df.to_pandas()\n", + "PDI_df.attrs = attrs\n", + "\n", + "PDI = PDI_df.to_xarray()\n", + "PDI = add_geobox(PDI, crs=PDI_df.attrs[\"crs\"])\n", + "\n", + "# Ensure the timeseries matches the vegetation timeseries.\n", + "PDI = PDI.reindex_like(VDI)\n", + "\n", + "PDI" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "1302d145-0d7c-467e-acbb-a3f9f06b0be2", + "metadata": {}, + "outputs": [], + "source": [ + "# If any index is missing data, set to None e.g.\n", + "# drought_indices = dict(rainfall=PDI.rainfall, temperature=TDI.surface_temperature, soil_moisture=None, vegetation=VDI.NDVI)\n", + "drought_indices = dict(rainfall=PDI.rainfall, temperature=TDI.surface_temperature, soil_moisture=SMDI.relative_soil_moisture, vegetation=VDI.NDVI)" + ] + }, + { + "cell_type": "markdown", + "id": "506244e0-bff7-4896-9b14-3f3ebefb4016", + "metadata": {}, + "source": [ + "### Calculate the weight for each drought index" + ] + }, + { + "cell_type": "markdown", + "id": "d6478d52-2933-4e2e-a79a-e002595ab1f9", + "metadata": {}, + "source": [ + "The weight $w$ of each individual drought index is automatically calculated for every grid point (pixel) with respect to its capability to reflect the future vegetation status (NDVI). In the case of data gaps in one input dataset, the weights are automatically redistributed to other available variables.\n", + "\n", + "\\begin{equation}\n", + "w_{i} = \\frac{\\frac{lag^*_{i}}{\\sum_{j=1}^{n} lag^*_{j}} + \\frac{corr^*_{i}}{\\sum_{j=1}^{n} corr^*_{j}}}{2}\n", + "\\end{equation}\n", + "\n", + "- $w$ weight for the respective drought index \n", + "\n", + "- $lag^*$ modified time lag for the respective parameter \n", + "\n", + "- $corr^*$ modified correlation coefficient for the respective parameter \n", + "\n", + "- $i$ index for the respective parameter/drought index \n", + "\n", + "- $j$ running parameter covering all parameters used for the ECDI calculation\n", + "\n", + "- $n$ number of individual drought indices used for the ECDI calculation" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "edd82aee-58bd-43ee-9107-481889f9aa6e", + "metadata": {}, + "outputs": [], + "source": [ + "correlation = {}\n", + "lag = {}\n", + "for k in drought_indices.keys():\n", + " if drought_indices[k] is not None:\n", + " calc_corr = get_correlation(reference_drought_index=VDI.NDVI, comparison_drought_index=drought_indices[k])\n", + " correlation[k] = calc_corr[\"corr\"]\n", + " lag[k] = calc_corr[\"lag\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "44434968-e60d-4095-9f57-ad91ea6660f8", + "metadata": {}, + "outputs": [], + "source": [ + "weights = {}\n", + "for i in drought_indices.keys():\n", + " if drought_indices[i] is not None:\n", + " weights[i]=((lag[i]/np.nansum([i.values for i in lag.values()], axis=0) + (correlation[i]/np.nansum([i.values for i in correlation.values()], axis=0))))/2" + ] + }, + { + "cell_type": "markdown", + "id": "a9deed6d-0150-4eea-8772-cc62e6886af1", + "metadata": {}, + "source": [ + "### Calculate the Enhanced Combined Drought Index" + ] + }, + { + "cell_type": "markdown", + "id": "d0425176-f0cd-41f5-997a-bd7a327e365d", + "metadata": {}, + "source": [ + "The weight of every individual index is multiplied by the respective individual index to calculate the ECDI. The sum of all weights per decade is one.\n", + "\n", + "\\begin{equation}\n", + "ECDI = \\sum_{i-1}^{n}w_{i} * \\text{DI}_{i}\n", + "\\end{equation}\n", + "\n", + "- $ECDI$ Enhanced Combined Drought Index \n", + "\n", + "- $w$ Weight for each individual drought index (e.g., rainfall)\n", + "\n", + "- $\\text{DI}$ Individual drought index \n", + "\n", + "- $n$ number of drought indices used to calculate the ECDI \n", + "\n", + "- $i$ running parameter covering the number of drought indices" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "81cc9241-306b-4751-a476-6db03d353bd9", + "metadata": {}, + "outputs": [], + "source": [ + "ECDI_np = np.nansum([weights[i]*drought_indices[i] for i in weights.keys()], axis=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "684db4a3-bca5-4dc2-a6b9-1d5cb6af2e65", + "metadata": {}, + "outputs": [], + "source": [ + "# Convert NumPy array to xarray DataArray\n", + "ECDI = xr.DataArray(\n", + " ECDI_np,\n", + " dims=(\"y\", \"x\", \"dekad\"), # Use the same dimension names\n", + " coords={dim: VDI.coords[dim] for dim in VDI[\"NDVI\"].dims}, # Use the same coordinates\n", + ")\n", + "ECDI = add_geobox(ECDI, VDI.odc.geobox.crs)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "57f252e1-a680-43fd-9f0b-9d6604434098", + "metadata": {}, + "outputs": [], + "source": [ + "# Rasterize the country geopolygon and mask the data.\n", + "country_mask = rasterize(poly=geopolygon, how=ECDI.odc.geobox)\n", + "ECDI = ECDI.where(country_mask)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "0b915666-2d8e-4a1b-ad14-b9d6d44ed614", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot the most recent dekad\n", + "ECDI.sel(dekad=\"2020-12-21\").plot()" + ] + }, + { + "cell_type": "markdown", + "id": "398f36f2-4b8d-4225-8a9e-bf5bb3288bfa", + "metadata": {}, + "source": [ + "### Drought Risk Warning Levels." + ] + }, + { + "cell_type": "markdown", + "id": "84a67e96-54c7-4e53-aae4-25a7e7057ac8", + "metadata": {}, + "source": [ + "The ECDI-based drought risk warning levels (WL) are calculated as follows:" + ] + }, + { + "cell_type": "markdown", + "id": "dd9a7d65-690f-4bdb-a26c-dd6062596bd4", + "metadata": {}, + "source": [ + "\\begin{equation}\n", + "\\text{Warning Levels}= \\frac{\\text{Current decadal ECDI value} - \\text{Average ECDI value per decade}}{\\text{Standard deviation of the decadal ECDI value}}\n", + "\\end{equation}" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "beb789d5-0739-434a-a3d3-efc130f23ba3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray (y: 128, x: 96, dekad: 252)> Size: 25MB\n",
+       "array([[[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "...\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]],\n",
+       "\n",
+       "       [[nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        ...,\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan],\n",
+       "        [nan, nan, nan, ..., nan, nan, nan]]])\n",
+       "Coordinates:\n",
+       "  * dekad        (dekad) datetime64[ns] 2kB 2014-01-01 2014-01-11 ... 2020-12-21\n",
+       "  * y            (y) float64 1kB 1.108e+06 1.112e+06 ... 1.738e+06 1.742e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933
" + ], + "text/plain": [ + " Size: 25MB\n", + "array([[[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + "...\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]],\n", + "\n", + " [[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]]])\n", + "Coordinates:\n", + " * dekad (dekad) datetime64[ns] 2kB 2014-01-01 2014-01-11 ... 2020-12-21\n", + " * y (y) float64 1kB 1.108e+06 1.112e+06 ... 1.738e+06 1.742e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Select the dekad to calculate the warning levels for\n", + "selected_dekad = \"2020-12-21\"\n", + "\n", + "# Select the timeseries upto the specific dekad\n", + "selected_ECDI = ECDI.sel(dekad=slice(None, selected_dekad))\n", + "selected_ECDI" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "9c38844a-b999-4efc-94e9-cbe3d8e8a9bf", + "metadata": {}, + "outputs": [], + "source": [ + "selected_dekad_month = datetime.strptime(selected_dekad, \"%Y-%m-%d\").month\n", + "selected_dekad_day = datetime.strptime(selected_dekad, \"%Y-%m-%d\").day\n", + "\n", + "# Get the average ECDI value for the selected dekad \n", + "avg_ECDI = selected_ECDI.sel(dekad=(selected_ECDI.dekad.dt.month == selected_dekad_month) & (selected_ECDI.dekad.dt.day == selected_dekad_day)).mean(dim=\"dekad\")\n", + "# Get the standard deviation ECDI value for the selected dekad \n", + "std_ECDI = selected_ECDI.sel(dekad=(selected_ECDI.dekad.dt.month == selected_dekad_month) & (selected_ECDI.dekad.dt.day == selected_dekad_day)).std(dim=\"dekad\")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "4dab06ea-2a70-4392-86be-4500ac5f8ccf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray (y: 128, x: 96)> Size: 98kB\n",
+       "array([[nan, nan, nan, ..., nan, nan, nan],\n",
+       "       [nan, nan, nan, ..., nan, nan, nan],\n",
+       "       [nan, nan, nan, ..., nan, nan, nan],\n",
+       "       ...,\n",
+       "       [nan, nan, nan, ..., nan, nan, nan],\n",
+       "       [nan, nan, nan, ..., nan, nan, nan],\n",
+       "       [nan, nan, nan, ..., nan, nan, nan]])\n",
+       "Coordinates:\n",
+       "    dekad        datetime64[ns] 8B 2020-12-21\n",
+       "  * y            (y) float64 1kB 1.108e+06 1.112e+06 ... 1.738e+06 1.742e+06\n",
+       "  * x            (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n",
+       "    spatial_ref  int32 4B 6933
" + ], + "text/plain": [ + " Size: 98kB\n", + "array([[nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " ...,\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan],\n", + " [nan, nan, nan, ..., nan, nan, nan]])\n", + "Coordinates:\n", + " dekad datetime64[ns] 8B 2020-12-21\n", + " * y (y) float64 1kB 1.108e+06 1.112e+06 ... 1.738e+06 1.742e+06\n", + " * x (x) float64 768B 3.402e+06 3.408e+06 ... 3.872e+06 3.878e+06\n", + " spatial_ref int32 4B 6933" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "warning_levels = (selected_ECDI.sel(dekad=selected_dekad) - avg_ECDI)/ std_ECDI\n", + "warning_levels" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "f37e5ea4-77b8-4ae1-b06c-9abfdc3f4a73", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7cAAAK9CAYAAAD/iJvRAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAiS5JREFUeJzs3XmcjeX/x/H3scwMwwwju7HPWLKkkKUwIltEIkuhQsmSrUUqRtbspSgKFUW2ZMkWYSpSlLKHSOOrxIwlg5n794eH83OaOcec0+0+5555PR+PeXy/c5/7vu7rXs5pPq77eh+HYRiGAAAAAACwsSz+7gAAAAAAAP8VxS0AAAAAwPYobgEAAAAAtkdxCwAAAACwPYpbAAAAAIDtUdwCAAAAAGyP4hYAAAAAYHsUtwAAAAAA26O4BQAAAADYHsUtgAynQYMGatCggb+7EXCGDx8uh8NhSltXr17V888/r8jISGXJkkWtW7c2pV0AAABfUdwCfjBnzhw5HA63P99++63L+pcuXdLkyZN19913Kzw8XCEhIYqOjlafPn104MAB53rXi5frPzlz5lTx4sXVsmVLzZ49W0lJSan60q1bN+XKlctjf19//XU5HA7t3LnTZblhGMqbN68cDoeOHDmSqs/BwcHq1KmTt6fH1kqWLKkHHnjA39245d5//32NHz9eDz/8sObOnasBAwbcsn2lpKRozpw5atWqlSIjIxUaGqpKlSpp5MiRunTpUprbvPfee6pQoYJCQkIUFRWlN998M9U6S5Ys0SOPPKLSpUsrZ86cKleunAYNGqSzZ8+m2eby5ct15513KiQkRMWLF9ewYcN09erVdB3D/v37NWDAANWpU0chISFyOBw6evRoqvVOnz6t8ePHq169esqfP7/y5MmjWrVqacGCBenajyRt2LBBTzzxhKKjo5UzZ06VLl1a3bt3V3x8fKp1165dqyeffFKVKlVS1qxZVbJkyXTvBwCAQJPN3x0AMrMRI0aoVKlSqZaXLVvW+f//+usvNW3aVN9//70eeOABderUSbly5dL+/fv1ySef6N1339Xly5ddtp8+fbpy5cqlpKQknThxQmvWrNETTzyhKVOmaMWKFYqMjPSqn/fcc48kaevWrapWrZpz+S+//KKzZ88qW7ZsiouLczmW7777TpcvX3Zua6W1a9davs/M5ssvv1TRokU1efLkW76vixcv6vHHH1etWrX09NNPq0CBAvrmm280bNgwbdiwQV9++aXLiPQ777yjp59+Wm3bttXAgQO1ZcsW9evXTxcvXtQLL7zgXK9nz54qUqSIHn30URUvXly7d+/WtGnTtGrVKv3www/KkSOHc93Vq1erdevWatCggd58803t3r1bI0eO1KlTpzR9+vSbHsM333yjN954QxUrVlSFChW0a9cut+sNHTpUzZs318svv6xs2bJp8eLF6tChg/bs2aPY2Nib7uuFF17Q33//rXbt2ikqKkqHDx/WtGnTtGLFCu3atUuFChVyrjt//nwtWLBAd955p4oUKXLTtgEACGgGAMvNnj3bkGR89913N123RYsWRpYsWYxFixaleu3SpUvGoEGDnL8PGzbMkGT8+eefqdb96KOPjCxZshh33323y/KuXbsaoaGhHvuQlJRkhISEGO3bt3dZPmPGDCNfvnxGkyZNjKeeesrltdGjRxuSjB9//PGmx+hJcnKy8c8///ynNqxUokQJo0WLFv7uRpqu3x9miImJMW6//XZT2jIMz9c5KSnJiIuLS7U8NjbWkGSsW7fOuezixYtGvnz5Ul2Dzp07G6Ghocbff//tXLZx48ZUbc6dO9eQZMycOdNlecWKFY2qVasaV65ccS4bOnSo4XA4jL179970+E6fPm0kJiYahmEY48ePNyQZR44cSbXe4cOHjaNHj7osS0lJMRo2bGgEBwcb58+fv+m+vvrqKyM5OTnVMknG0KFDXZafOHHCuHz5smEY1z5rSpQocdP2AQAIVDyWDASwbdu2aeXKlXryySfVtm3bVK8HBwdrwoQJ6Wqrc+fO6t69u7Zt26Z169Z51Y+goCDVqFFDcXFxLsvj4uJUu3Zt1a1bN83X8uTJo0qVKkmSJkyYoDp16ihfvnzKkSOH7rrrLi1atCjVvhwOh/r06aN58+bp9ttvV3BwsL744gvno9xxcXEaOHCg8ufPr9DQULVp00Z//vmnSxv/nnO7adMmORwOLVy4UKNGjVKxYsUUEhKi++67T4cOHUrVh7feekulS5dWjhw5VLNmTW3ZssX0ebwfffSR7rrrLuXIkUMRERHq0KGDjh8/7ny9T58+ypUrly5evJhq244dO6pQoUJKTk52Llu9erXuvfdehYaGKnfu3GrRooV++eWXm/Zj3bp1uueee5QnTx7l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VJ/h17dJ66u0bmzzn3/+0cmTJ11+/qu+ffvqiy++0KxZs1S1alXn8suXL6fa141zsK/bt2+f2rRpo0qVKmnWrFn/uT8AAASyTP1VQBcuXFDVqlX1xBNP6KGHHvKpjWeffVZr167VhAkTVLlyZf3999/6+++/Te4pMqvy5ctLknbv3u0cZfwvfv75Z0mpi7f0uueeezRjxgydPXvWOd/2ujp16uj999/XlStXtHXrVt11110KCQmRdK1waNWqlerVq6e3335bhQsXVvbs2TV79mzNnz8/1X7cFSCSnPNM/834V2CR2duaJSUlRQ6HQ6tXr06zPzd+53CtWrVUsmRJLVy4UJ06ddLnn3+uf/75R4888ohLe9K1ebc3fsXLdTeOQP9bjhw5tHnzZm3cuFErV67UF198oQULFqhhw4Zau3at2/NlFk/X2Z1169apS5cuatGihWbMmJHq9cKFCys5OVmnTp1SgQIFnMsvX76s06dPp/l1Nz/++KNatWqlSpUqadGiRanOWeHChSVJ8fHxqb5GKz4+3vmPOAsWLNDjjz/u8vp/ubdiY2P19ttva+zYsanm3X/99dcu/xAmSUeOHHH5R5jjx4/r/vvvV3h4uFatWmXaEyAAAASqTF3cNmvWTM2aNXP7elJSkoYOHaqPP/5YZ8+eVaVKlTRu3DhnwubevXs1ffp0/fzzzypXrpwk30cigLS0bNlSY8aM0UcffWRKcfvhhx9Kkpo0aeLT9vfcc4+mT5+u9evXa+fOnXruueecr9WpU0f//POPVq5cqcOHD7ukOy9evFghISFas2aNy6Ods2fP9vFIbo3rKbWHDh1yKRyuXr2qo0ePqkqVKv95H2XKlJFhGCpVqpSio6Nvun779u01depUJSYmasGCBSpZsqRq1arl0p4kFShQQI0aNfK6P1myZNF9992n++67T5MmTdLo0aM1dOhQbdy40ev2SpQoofXr1+vcuXMuhdS+ffucr/8X27ZtU5s2bVS9enUtXLgwzcL9jjvukHTtEfPmzZs7l+/YsUMpKSnO16/79ddf1bRpUxUoUECrVq1y+ceFtNq88WmEP/74Q7///rt69uwp6dr7ytskcnfeeustDR8+XP3793f5bt7rqlatmmpfN/7jxunTp3X//fcrKSlJGzZscBboAABkZJn6seSb6dOnj7755ht98skn+umnn9SuXTs1bdrU+Rjg559/rtKlS2vFihUqVaqUSpYsqe7duzNyC9PUrl1bTZs21axZs9J8bP7y5csaPHhwutqaP3++Zs2apdq1a+u+++7zqT/X53lOmjRJV65ccRm5LVmypAoXLqzXX3/dZV3p2oipw+FweWzy6NGjPk0FuJWqV6+ufPnyaebMmbp69apz+bx589L12HN6PPTQQ8qaNatiY2NTjeoZhuGSli1de3Q4KSlJc+fO1RdffKH27du7vN6kSROFhYVp9OjRunLlSqr9/ftrkm6U1mfV9UIurUdwb6Z58+ZKTk7WtGnTXJZPnjxZDofD4z8m3szevXvVokULlSxZUitWrHA76tuwYUNFRERo+vTpLsunT5+unDlzqkWLFs5lJ0+e1P33368sWbJozZo1yp8/f5pt3n777Spfvrzeffddl3t4+vTpcjgcevjhhyVdG+H99zQDXyxYsED9+vVT586dNWnSpDTXyZs3b6p9XX9S4sKFC2revLlOnDihVatWucwfBgAgI8vUI7eeHDt2TLNnz9axY8ecj7ENHjxYX3zxhWbPnq3Ro0fr8OHD+u233/Tpp5/qgw8+UHJysgYMGKCHH35YX375pZ+PAHawevVq56jWjerUqaPSpUtLkj744APdf//9euihh9SyZUvdd999Cg0N1cGDB/XJJ58oPj4+1XfdLlq0SLly5dLly5d14sQJrVmzRnFxcapatao+/fRTn/tbvHhxRUZG6ptvvlHJkiVTPeJZp04dLV68WA6HQ3Xr1nUub9GihSZNmqSmTZuqU6dOOnXqlN566y2VLVtWP/30k8/9MVtQUJCGDx+uvn37qmHDhmrfvr2OHj2qOXPmqEyZMi5BVp4cOnRII0eOTLW8WrVqatGihUaOHKkhQ4bo6NGjat26tXLnzq0jR45o6dKl6tmzp8s/WNx5550qW7ashg4dqqSkJJdHkqVr87KnT5+uxx57THfeeac6dOig/Pnz69ixY1q5cqXq1q2bqti8bsSIEdq8ebNatGihEiVK6NSpU3r77bdVrFgxl3+cSK+WLVsqJiZGQ4cO1dGjR1W1alWtXbtWn332mfr37+8cZfbWuXPn1KRJE505c0bPPfdcqq9HKlOmjGrXri3p2qPOr732mnr37q127dqpSZMm2rJliz766CONGjVKERERzu2aNm2qw4cP6/nnn9fWrVud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bKklS5b4u2teS+81uPGYQ0JCFB0drTFjxsgw/v8fHuvUqaP4+HiFh4ffwh77D8UtAAAAkEE1bdpU8fHxLj8ff/yxqfswDENXr141tU0z9OjRQ/Hx8fr111+1ePFiVaxYUR06dFDPnj09bnflyhWLemi+68e8f/9+DRkyRK+++qpmzJjhfD0oKEiFChWSw+H9kzt2QHELAAAAZFDBwcEqVKiQy0/evHklXXvsNCgoSFu2bHGu//rrr6tAgQL63//+p27duumrr77S1KlTnSOCR48e1aZNm+RwOLR69WrdddddCg4O1tatW5WSkqIxY8aoVKlSypEjh6pWrapFixY5276+3Zo1a1StWjXlyJFDDRs21KlTp7R69WpVqFBBYWFh6tSpky5evOjc7mbtupMzZ04VKlRIxYoVU61atTRu3Di98847mjlzptavXy9JOnr0qBwOhxYsWKD69esrJCRE8+bNU0pKikaMGKFixYopODhYd9xxh7744otUx3L27Fnnsl27djnP0XUzZ85UZGSkcubMqTZt2mjSpElpPuL74YcfqmTJkgoPD1eHDh107tw5SXJ7DW52zCVKlNDjjz+uKlWqaN26dW77/dtvv6lly5bKmzevQkNDdfvtt2vVqlVptn3x4kU1a9ZMdevWdTnuQEJxCwAAANhIYmKiy09SUpJP7Vx/3PWxxx5TQkKCdu7cqVdeeUWzZs1SwYIFNXXqVNWuXds5GhgfH6/IyEjn9i+++KLGjh2rvXv3qkqVKhozZow++OADzZgxQ7/88osGDBigRx99VF999ZXLfocPH65p06bp66+/1vHjx9W+fXtNmTJF8+fP18qVK7V27Vq9+eabzvXT2256dO3aVXnz5k31ePKLL76oZ599Vnv37lWTJk00depUTZw4URMmTNBPP/2kJk2aqFWrVjp48GC69xUXF6enn35azz77rHbt2qXGjRtr1KhRqdb79ddftWzZMq1YsUIrVqzQV199pbFjx0rSTa+BO4ZhaMuWLdq3b5+CgoLcrte7d28lJSVp8+bN2r17t8aNG6dcuXKlWu/s2bNq3LixUlJStG7duoCdg0ugFJBOnoJffAmLsWobb9vylbd98OU4fWHXIDAr9u/vMCNfZbTjAQBv/bu4GTZsmIYPH57muitWrEhVrLz00kt66aWXJEkjR47UunXr1LNnT/3888/q2rWrWrVqJUkKDw9XUFCQczTw30aMGKHGjRtLkpKSkjR69GitX79etWvXliSVLl1aW7du1TvvvKP69es7txs5cqTq1q0rSXryySc1ZMgQ/frrrypdurQk6eGHH9bGjRv1wgsveNVuemTJkkXR0dGpRj/79++vhx56yPn7hAkT9MILL6hDhw6SpHHjxmnjxo2aMmWK3nrrrXTt680331SzZs00ePBgSVJ0dLS+/vprrVixwmW9lJQUzZkzR7lz55YkPfbYY9qwYYNGjRp102vwb2+//bZmzZqly5cv68qVKwoJCVG/fv3crn/s2DG1bdtWlStXliTnNbjRyZMn9cgjjygqKkrz58/3WCz7G8UtAAAAYCPHjx9XWFiY8/fg4GC368bExGj69OkuyyIiIpz/PygoSPPmzVOVKlVUokQJTZ48Od39qF69uvP/Hzp0SBcvXnQWu9ddvnxZ1apVc1lWpUoV5/8vWLCgcubM6VJUFSxYUNu3b/e63fQyDCPVnNMbjyUxMVF//PGHswC/rm7duvrxxx/TvZ/9+/erTZs2Lstq1qyZqrgtWbKks7CVpMKFC+vUqVPp3s+NOnfurKFDh+rMmTMaNmyY6tSpozp16rhdv1+/furVq5fWrl2rRo0aqW3bti7XR5IaN26smjVrasGCBcqaNatP/bIKxS0AAABgI2FhYS7FrSehoaEqW7asx3W+/vprSdLff/+tv//+W6Ghoelu+7rz589LklauXKmiRYu6rPfv4jt79uzO/+9wOFx+v74sJSXF63bTIzk5WQcPHlSNGjXcHkt6ZMlybXbnjUnEvgZReTp+b4WHhzuv98KFC1W2bFnVqlVLjRo1SnP97t27q0mTJs7HwceMGaOJEyeqb9++znVatGihxYsXa8+ePc4R3kDFnFsAAAAgk/r11181YMAAzZw5U3fffbe6du3qUlgFBQUpOTn5pu1UrFhRwcHBOnbsmMqWLevyk545ola1O3fuXJ05c0Zt27Z1u05YWJiKFCmiuLg4l+VxcXGqWLGiJCl//vySpPj4eOfr//6u2nLlyum7775zWfbv39Mjvdfg33LlyqVnn31WgwcPdinC/y0yMlJPP/20lixZokGDBmnmzJkur48dO1Zdu3bVfffdpz179njdDysxcgsAAABkUElJSTp58qTLsmzZsum2225TcnKyHn30UTVp0kSPP/64mjZtqsqVK2vixIl67rnnJF17ZHbbtm06evSocuXK5fJI841y586twYMHa8CAAUpJSdE999yjhIQExcXFKSwsTF27dvWp//+l3YsXL+rkyZO6evWqfv/9dy1dulSTJ09Wr169FBMT43G/zz33nIYNG6YyZcrojjvu0OzZs7Vr1y7NmzdPkpzF9fDhwzVq1CgdOHBAEydOdGmjb9++qlevniZNmqSWLVvqyy+/1OrVq73+Gp60rsH1keObeeqpp/Taa69p8eLFevjhh1O93r9/fzVr1kzR0dE6c+aMNm7cqAoVKqRab8KECUpOTlbDhg21adMmlS9f3qtjsArFLWACM4NsPIUPuduPL4FFVgU6mSlQ+2UlX+4BM+8bs2WWcCgzj8ff58YY5v5f/wEEni+++EKFCxd2WVauXDnt27dPo0aN0m+//eacA1q4cGG9++676tixo+6//35VrVpVgwcPVteuXVWxYkX9888/OnLkiNt9vfbaa8qfP7/GjBmjw4cPK0+ePLrzzjud4VW+8rXdmTNnaubMmQoKClK+fPl01113acGCBanmwaalX79+SkhI0KBBg3Tq1ClVrFhRy5cvV1RUlKRrjxJ//PHH6tWrl6pUqaIaNWpo5MiRateunbONunXrasaMGYqNjdXLL7+sJk2aaMCAAZo2bZpXx5/WNShZsmS6to2IiFCXLl00fPhwl8Cs65KTk9W7d2/9/vvvCgsLU9OmTd3Ou548ebJLgRsdHe3VcVjBYXgao86AEhMTFR4eroSEhHTPVYCduf+XMf//gej9NoFc3FpV4Gd2Ga24dceq1HB4j+IWVgjkv9ecfZNkdc8SJYVLAXlekD49evTQvn37XL5bGOZh5BYAAAAAboEJEyaocePGCg0N1erVqzV37ly9/fbb/u5WhkVxCwAAAAC3wPbt2/X666/r3LlzKl26tN544w11797d393KsChukUF4NzHfE6seyfXlUVF/P0bqy3Ha8RHSQJ6PbNX+rXqU2cz3jh35ewoAAODWWrhwob+7kKnwVUAAAAAAANujuAUAAAAA2B7FLQAAAADA9ihuAQAAAAC2R6AUMi0zg47MbMvM/QcCq76b1x1f9hPI59Mds78X1qogsMweqOTLNfDlO43N5Ih1H+DHd+ACAPyJkVsAAAAAgO1R3AIAAAAAbI/iFgAAAABgexS3AAAA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+vTpo/79++u2225TkyZN0rWdOwUKFFChQoUUHR2tDh06KC4uTvnz51evXr2c63Tr1k2tW7fWqFGjVKRIEZUrV06StHv3bjVs2FA5cuRQvnz51LNnT50/f96lr/3793fZX+vWrdWtWzfn7/Hx8WrRooVy5MihUqVKaf78+SpZsmSqx3z/+usvtWnTRjlz5lRUVJSWL18uSTp69KhiYmIkSXnz5pXD4XBp39Mx33nnnerfv7+OHz/ucl3+3e+3335bUVFRCgkJUcGCBfXwww+7bXvlypUKDw/XvHnzPPbBDihuAQAAABtJTEx0+UlKSkq1Tq5cuZQrVy4tW7Yszdeva9eunU6dOqXVq1fr+++/15133qn77rtPf//9t6Kjo1W9evVURc+8efPUqVMnSdeK44YNG6patWrasWOHvvjiC/3vf/9T+/btXbaZO3eugoKCFBcXpxkzZqR7u/TIkSOHnn76acXFxenUqVPO5Rs2bND+/fu1bt06rVixQhcuXFCTJk2UN29efffdd/r000+1fv169enTx6v9denSRX/88Yc2bdqkxYsX691333XZ73WxsbFq3769fvrpJzVv3lydO3fW33//rcjISC1evFjS/4/ITp06NV37TkhI0CeffCJJCgoKSnOdHTt2qF+/fhoxYoT279+vL774QvXq1Utz3fnz56tjx46aN2+eOnfunK4+BDICpUyQkYIYPB+L++Ao7/fjqa20w6Z8Oc92DCrJaKEfvgSumRmk44kdz6c7Zh+LVWFbVgTyWRVoFchhRma+P3z5jDL7c83f5xPwt8jISJffhw0bpuHDh7ssy5Ytm+bMmaMePXpoxowZuvPOO1W/fn116NBBVapUkSRt3bpV27dv16lTpxQcHCxJmjBhgpYtW6ZFixapZ8+e6ty5s6ZNm+acz3ngwAF9//33+uijjyRJ06ZNU7Vq1TR69Gjnvt9//31FRkbqwIEDio6OliRFRUXp9ddfd64zcuTIdG2XXuXLl5d0bVS0QIECkqTQ0FDNmjXLWQTOnDlTly5d0gcffKDQ0FBn/1u2bKlx48apYMGCN93Pvn37tH79en333XeqXr26JGnWrFmKiopKtW63bt3UsWNHSdLo0aP1xhtvaPv27WratKkiIiIkXRuRzZMnz033W6xYMUnShQsXJEmtWrVyHvO/HTt2TKGhoXrggQeUO3dulShRQtWqVUu13ltvvaWhQ4fq888/V/369W/aBzvw68jt5s2b1bJlSxUpUkQOh0PLli3zuP6/J1Rf/zl58qQ1HQYAAAD87Pjx40pISHD+DBkyJM312rZtqz/++EPLly9X06ZNtWnTJt15552aM2eOJOnHH3/U+fPnlS9fPudIb65cuXTkyBH9+uuvkqQOHTro6NGj+vbbbyVdG7W98847nYXVjz/+qI0bN7psf/21621I0l133eXSt/Rul16GcW3gxOH4/0GSypUru4xu7t27V1WrVnUWtpJUt25dpaSkaP/+/enaz/79+5UtWzbdeeedzmVly5ZV3rx5U617/R8RpGuFdlhYWJojvOmxZcsWff/995ozZ46io6M1Y8YMt+s2btxYJUqUUOnSpfXYY49p3rx5unjxoss6ixYt0oABA7Ru3boMU9hKfh65vXDhgqpWraonnnhCDz30ULq3279/v8LCwpy/X//XGQAAACCjCwsLc/lb2JOQkBA1btxYjRs31iuvvKLu3btr2LBh6tatm86fP6/ChQtr06ZNqba7PppYqFAhNWzYUPPnz1etWrU0f/58l7mt58+fd458/lvhwoWd///GgtKb7dJr7969kqSSJUu63Wd6ZMmSxVkoX3flyhWv25Gk7Nmzu/zucDiUkpLiU1ulSpVSnjx5VK5cOZ06dUqPPPKINm/enOa6uXPn1g8//KBNmzZp7dq1evXVVzV8+HB99913zutarVo1/fDDD3r//fdVvXp1l38UsDO/jtw2a9ZMI0eOVJs2bbza7vqE6us/WbIwdRgAAAC4mYoVKzofbb3zzjt18uRJZcuWTWXLlnX5ue2225zbdO7cWQsWLNA333yjw4cPq0OHDs7X7rzzTv3yyy8qWbJkqjY8FZe+bpeWf/75R++++67q1aun/Pnzu12vQoUK+vHHH53HL0lxcXHKkiWLM3Aqf/78Ll8rlJycrJ9//tn5e7ly5XT16lXt3LnTuezQoUM6c+aMV32+PqKcnJzs1XaS1Lt3b/38889aunSp23WyZcumRo0a6fXXX9dPP/2ko0eP6ssvv3S+XqZMGW3cuFGfffaZ+vbt63UfApUtq8I77rhDhQsXVuPGjW/6PV1JSUmpJt0DAAAAGdnp06fVsGFDffTRR/rpp5905MgRffrpp3r99df14IMPSpIaNWqk2rVrq3Xr1lq7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9M4772jmzJlav369pGuPODscDi1YsED169dXSEiI5s2bp5SUFI0YMULFihVTcHCw7rjjDn3xxRfOtjdt2iSHw6GzZ886l+3atUsOh0NHjx51Lps5c6YiIyOVM2dOtWnTRpMmTUrzEd8PP/xQJUuWVHh4uDp06KBz585JujZC/9VXX2nq1KnOUdkb23d3zCVKlNDjjz+uKlWqaN26dW77/dtvv6lly5bKmzevQkNDdfvtt2vVqlVptn3x4kU1a9ZMdevWdTluqzDnFgAAALCRxMREl9+Dg4MVHBycrm3nzp2rgQMHatu2bfrmm2/UrVs31a1bV40bN1ZKSoqaNWumc+fO6aOPPlKZMmW0Z88eZc2a1bn9xYsXNW7cOM2aNUv58uVTgQIF1KdPH+3Zs0effPKJihQpoqVLl6pp06bavXu3oqKidOnSJd1111164YUXFBYWppUrV+qxxx5TmTJlVLNmTcXHx6tjx456/fXX1aZNG507d05btmxxPio7b948vfrqq5o2bZqqVaumnTt3qkePHgoNDVXXrl11/vx5PfDAA2rcuLE++ugjHTlyRM8++6zP57dr164aNGiQlixZokaNGjmXv/jii5o4caKziJ46daomTpyod955R9WqVdP777+vVq1a6ZdfflFUVFS69hUXF6enn35a48aNU6tWrbR+/Xq98sorqdb79ddftWzZMq1YsUJnzpxR+/btNXbsWI0aNUpTp07VgQMHVKlSJY0YMUKSlD9//pvu2zAMbd26Vfv27fPY3969e+vy5cvavHmzQkNDtWfPHuXKlSvVemfPnlWLFi2UK1curVu3Tjlz5kzXOTATxS1wC/kSpGN2uEhGCkvx1Ja/Q2nsGAoTCPdaoDL73JjZnlXn2cz9+PLeDeT3lFV99mU/Gel9CPciIyNdfh82bFiqEVh3qlSpomHDrt1EUVFRmjZtmjZs2KDGjRtr/fr12r59u/bu3avo6GhJUunSpV22v3Llit5++21VrVpVknTs2DHNnj1bx44dU5EiRSRJgwcP1hdffKHZs2dr9OjRKlq0qAYPHuxso2/fvlqzZo0WLlzoLG6vXr2qhx56SCVKlJAkVa5c2eX4Jk6cqIceekiSVKpUKe3Zs0fvvPOOunbtqvnz5yslJUXvvfeeQkJCdPvtt+v3339Xr1690ntKXWTJkkXR0dGpRj/79+/v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lcPh0K5du3T06FHFxMRIkvLmzSuHw6Fu3bo599W/f3/ndmfOnFGXLl2UN29e5cyZU82aNdPBgwedr18/v2vWrFGFChWUK1cuNW3aVPHx8c51Nm3apJo1ayo0NFR58uRR3bp19dtvv6X7XGY0FLcAAACAjSQmJrr8JCUluV03a9asGj16tN588039/vvvaa7z/fffq3379urQoYN2796t4cOH65VXXtGcOXNc1pswYYKqVq2qnTt3OkdHL168qDfeeEOffPKJvvjiC23atElt2rTRqlWrtGrVKn344Yd65513tGjRImc7V65c0WuvvaYff/xRy5Yt09GjR50FYHqsWbNGf/31l55//vk0X78+T/fEiRNq3ry5atSooR9//FHTp0/Xe++9p5EjR7qsP3fuXIWGhmrbtm16/fXXNWLECGcBm5KSooceekhBQUHatm2bZsyYoRdeeMFt3yIjI7V48WJJ0v79+xUfH6+pU6emuW63bt20Y8cOLV++XN98840Mw1Dz5s115coV5zoXL17UhAkT9OGHH2rz5s06duyYBg8eLEm6evWqWrdurfr16+unn37SN998o549e2aIR859RaAUAADI8LwNh7rZa97ypS33ffblD1dCqDKSyMhIl9+HDRuWarTxRm3atNEdd9yhYcOG6b333kv1+qRJk3Tfffc5C9bo6Gjt2bNH48ePdyk6GzZsqEGDBjl/37Jli65cuaLp06erTJkykqSHH35YH374of73v/8pV65cqlixomJiYrRx40Y98sgjkqQnnnjC2Ubp0qX1xhtvqEaNGjp//rxy5cp10+O/PrpZvnx5j+u9/fbbioyM1LRp0+RwOFS+fHn98ccfeuGFF/Tqq68qS5Zr43xVqlTRsGHX3qRRUVGaNm2aNmzYoMaNG2v9+vXat2+f1qxZoyJFikiSRo8erWbNmqW5z6xZsyoiIkKSVKBAAbeBWAcPHtTy5csVFxenOnXqSJLmzZunyMhILVu2TO3atZN07R8CZsyY4Ty/ffr00YgRIyRd+0eOhIQEPfDAA87XK1SocNPzl5ExcgsAAADYyPHjx5WQkOD8GTJkyE23GTdunObOnau9e/emem3v3r2qW7euy7K6devq4MGDLo8TV69ePdW2OXPmdBZWklSwYEGVLFnSpUgtWLCgy2PH33//vVq2bKnixYsrd+7cql+/viTp2LFjNz0OSTKM9P1jzd69e1W7dm2Xkcy6devq/PnzLqPYVapUcdmucOHCzv7u3btXkZGRzsJWkmrXrp2u/d+sb9myZdPdd9/tXJYvXz6VK1fO5Rr9+/ze2LeIiAh169ZNTZo0UcuWLTV16lSXR5YzI4pbAAAAwEbCwsJcfoKDg2+6Tb169dSkSZN0FcLuhIaGplqWPXt2l98dDkeay1JSUiRJFy5cUJMmTRQWFqZ58+bpu+++09KlSyWlP6QqOjpakrRv3z6vjyEtnvrrb2n17cbifvbs2frmm29Up04dLViwQNHR0fr222+t7mbAoLgFAAAAMoGxY8fq888/1zfffOOyvEKFCoqLi3NZFhcXp+joaGXNmtXUPuzbt0+nT5/W2LFjde+996p8+fJehUlJ0v3336/bbrtNr7/+epqvX/8KngoVKjjnsl4XFxen3Llzq1ixYunaV4UKFXT8+HGXEdGbFY9BQUGS5DLqnVa7V69e1bZt25zLTp8+rf3796tixYrp6tt11apV05AhQ/T111+rUqVKmj9/vlfbZyQUtwAAAEAmULlyZXXu3FlvvPGGy/JBgwZpw4YNeu2113TgwAHNnTtX06ZNcwYXmal48eIKCgrSm2++qcOHD2v58uVef/draGioZs2apZUrV6pVq1Zav369jh49qh07duj555/X008/LUl65plndPz4cfXt21f79u3TZ599pmHDhmngwIHO+bY306hRI0VHR6tr16768ccftWXLFg0dOtTjNiVKlJDD4dCKFSv0559/6vz586nWiYqK0oMPPqgePXpo69at+vHHH/Xoo4+qaNGievDBB9PVtyNHjmjIkCH65ptv9Ntvv2nt2rU6ePBgpp53S3ELAAACkMPDj/eMYWn/+NSz2LR/ADsYMWJEqkdu77zzTi1cuFCffPKJKlWqpFdffVUjRozwKsE4vfLnz685c+bo008/VcWKFTV27FhNmDDB63YefPBBff3118qePbs6deqk8uXLq2PHjkpISHCmIRctWlSrVq3S9u3bVbVqVT399NN68skn9fLLL6d7P1myZNHSpUv1zz//qGbNmurevbtGjRrlcZuiRYsqNjZWL774ogoWLKg+ffqkud7s2bN111136YEHHlDt2rVlGIZWrVqV6lFkd3LmzKl9+/apbdu2io6OVs+ePdW7d2899dRT6T6+jMZh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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(10, 8))\n", + "\n", + "colors = ['green', 'yellow', 'orange', 'red']\n", + "cmap = mpl.colors.ListedColormap(colors)\n", + "\n", + "bounds = [-10, 0.5, 1.5, 2.5, 10]\n", + "norm = mpl.colors.BoundaryNorm(bounds, cmap.N)\n", + "\n", + "im = warning_levels.plot(cmap=cmap, norm=norm, add_colorbar=False)\n", + "\n", + "ticks = pd.Series(bounds).rolling(2).mean()[1:].to_list()\n", + "tick_labels = [\"Normal Conditions\", \"Increased Drought Risk\", \"Severe Drought Risk\", \"Extreme Drought Risk\"]\n", + "cbar = plt.colorbar(im, ax=ax, ticks=ticks)\n", + "cbar.set_ticklabels(tick_labels)\n", + "cbar.set_label(\"Warning Levels\")\n", + "\n", + "ax.set_title(f\"ECDI Warning Levels for {selected_dekad}\")\n", + "plt.savefig(f\"results/Amhara_ecdi_warning_levels_{selected_dekad}.png\")\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "cf7b7997-1432-4be7-ac84-18f50d5a7e16", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## Additional information\n", + "\n", + " License The code in this notebook is licensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0).\n", + "\n", + "Digital Earth Africa data is licensed under the [Creative Commons by Attribution 4.0](https://creativecommons.org/licenses/by/4.0/) license.\n", + "\n", + " Contact If you need assistance, please post a question on the [DE Africa Slack channel](https://digitalearthafrica.slack.com/) or on the [GIS Stack Exchange](https://gis.stackexchange.com/questions/ask?tags=open-data-cube) using the `open-data-cube` tag (you can view previously asked questions [here](https://gis.stackexchange.com/questions/tagged/open-data-cube)).\n", + "\n", + "If you would like to report an issue with this notebook, you can file one on [Github](https://github.com/digitalearthafrica/deafrica-sandbox-notebooks).\n", + "\n", + " Compatible datacube version :" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "86de93b6-9942-4a79-bd76-dd36cc8d8055", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.8.20\n" + ] + } + ], + "source": [ + "import datacube\n", + "print(datacube.__version__)" + ] + }, + { + "cell_type": "markdown", + "id": "3faed437-b537-4860-a9be-dd8a06553453", + "metadata": {}, + "source": [ + "**Last Tested:**" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "5a8581f5-9a59-4579-9c24-5b7408bb8d02", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'2025-05-19'" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from datetime import datetime\n", + "datetime.today().strftime('%Y-%m-%d')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Use_cases/Enhanced_Combined_Drought_Index/data/gadm41_ETH_1.json b/Use_cases/Enhanced_Combined_Drought_Index/data/gadm41_ETH_1.json new file mode 100644 index 00000000..86fe2275 --- /dev/null +++ b/Use_cases/Enhanced_Combined_Drought_Index/data/gadm41_ETH_1.json @@ -0,0 +1 @@ +{"type":"FeatureCollection","name":"gadm41_ETH_1","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}},"features":[{"type":"Feature","properties":{"GID_1":"ETH.1_1","GID_0":"ETH","COUNTRY":"Ethiopia","NAME_1":"AddisAbeba","VARNAME_1":"ĀddīsĀbaba|AddisAbaba|Adis-Abe","NL_NAME_1":"NA","TYPE_1":"Astedader","ENGTYPE_1":"City","CC_1":"14","HASC_1":"ET.AA","ISO_1":"NA"},"geometry":{"type":"MultiPolygon","coordinates":[[[[38.8794,8.9183],[38.8733,8.9051],[38.8775,8.8958],[38.8698,8.8808],[38.8687,8.873],[38.8638,8.8829],[38.8584,8.8836],[38.8471,8.88],[38.8407,8.8799],[38.833,8.8829],[38.826,8.8802],[38.8294,8.8688],[38.8239,8.8528],[38.8244,8.8413],[38.8175,8.8393],[38.8125,8.84],[38.7976,8.8335],[38.792,8.8358],[38.7806,8.8359],[38.7784,8.8418],[38.7775,8.8524],[38.773,8.8575],[38.7565,8.8532],[38.7541,8.8586],[38.7455,8.8634],[38.7452,8.8695],[38.7473,8.8772],[38.7432,8.8804],[38.7445,8.8921],[38.7436,8.9026],[38.7365,8.9013],[38.7311,8.9051],[38.7191,8.9197],[38.7084,8.9209],[38.702,8.9256],[38.6968,8.9327],[38.6938,8.9419],[38.6879,8.9397],[38.6806,8.9411],[38.681,8.9497],[38.6762,8.9576],[38.6428,8.9659],[38.6394,8.974],[38.6546,8.9769],[38.6594,8.9854],[38.6578,8.9948],[38.6511,9.0025],[38.6519,9.0103],[38.667,9.01],[38.6672,9.0262],[38.6721,9.0331],[38.6726,9.0387],[38.6835,9.05],[38.6837,9.0663],[38.6854,9.073],[38.7007,9.0805],[38.7067,9.0818],[38.7166,9.0878],[38.7271,9.0857],[38.738,9.0869],[38.7509,9.0905],[38.7652,9.0982],[38.7712,9.0982],[38.7782,9.0937],[38.7913,9.0777],[38.8,9.0786],[38.8051,9.0823],[38.8247,9.0759],[38.8426,9.0786],[38.8495,9.0782],[38.8568,9.0835],[38.8682,9.0849],[38.8763,9.0816],[38.882,9.0686],[38.8829,9.0521],[38.8967,9.0305],[38.905,9.0095],[38.9061,8.9975],[38.9043,8.9922],[38.9062,8.9774],[38.9028,8.9624],[38.8962,8.9548],[38.9011,8.9461],[38.8968,8.937],[38.8914,8.9343],[38.8614,8.9427],[38.8556,8.9383],[38.8608,8.9322],[38.8794,8.9183]]]]}},{"type":"Feature","properties":{"GID_1":"ETH.2_1","GID_0":"ETH","COUNTRY":"Ethiopia","NAME_1":"Afar","VARNAME_1":"NA","NL_NAME_1":"NA","TYPE_1":"Kilil","ENGTYPE_1":"State","CC_1":"02","HASC_1":"ET.AF","ISO_1":"ET-AF"},"geometry":{"type":"MultiPolygon","coordinates":[[[[40.1522,8.932],[40.1205,8.8958],[40.0945,8.8622],[40.081,8.8513],[40.067,8.844],[40.0512,8.8406],[40.0403,8.8411],[40.0242,8.845],[40.0104,8.8561],[40.0109,8.8708],[40.0193,8.8891],[40.0366,8.9065],[40.0439,8.9423],[40.0511,8.9614],[40.0475,8.9779],[40.0348,8.9944],[40.0219,9.0023],[39.9996,9.0072],[39.9682,9.0036],[39.9476,9.0036],[39.9519,9.03],[39.9425,9.0477],[39.9284,9.0541],[39.9187,9.0684],[39.9156,9.0973],[39.909,9.1318],[39.8984,9.1389],[39.8777,9.1447],[39.849,9.1381],[39.8174,9.1363],[39.8152,9.1542],[39.8162,9.1616],[39.813,9.1711],[39.8361,9.1883],[39.8478,9.2015],[39.8535,9.2108],[39.873,9.2273],[39.8732,9.2336],[39.863,9.2423],[39.857,9.2701],[39.886,9.2694],[39.86,9.3071],[39.8441,9.3142],[39.8339,9.3148],[39.8167,9.3077],[39.7891,9.3042],[39.7736,9.3243],[39.7702,9.3329],[39.754,9.3547],[39.7507,9.3609],[39.7498,9.3692],[39.7915,9.3698],[39.7852,9.3956],[39.7998,9.3997],[39.8072,9.4128],[39.8215,9.4174],[39.8729,9.3978],[39.8786,9.4004],[39.8744,9.4078],[39.8714,9.4416],[39.8731,9.4468],[39.8725,9.4593],[39.8478,9.4812],[39.8375,9.5019],[39.8471,9.5107],[39.8479,9.5252],[39.8573,9.5471],[39.8568,9.5565],[39.8476,9.5643],[39.8771,9.5766],[39.8815,9.593],[39.8838,9.6106],[39.8793,9.6242],[39.8616,9.6516],[39.8577,9.6552],[39.8499,9.6877],[39.8527,9.6987],[39.8485,9.7087],[39.8391,9.7236],[39.8498,9.7484],[39.8566,9.7526],[39.8621,9.754],[39.8758,9.7528],[39.9182,9.7418],[39.9547,9.7302],[39.9735,9.7292],[40.0094,9.7329],[40.0138,9.7376],[40.0059,9.741],[40.0018,9.7479],[39.9912,9.7567],[39.9934,9.7636],[40.0081,9.7818],[40.0076,9.7887],[40.0045,9.7952],[40.011,9.8186],[40.0175,9.82],[40.0278,9.8299],[40.0352,9.8428],[40.0527,9.8422],[40.0707,9.8574],[40.0584,9.8643],[40.0636,9.9024],[40.0694,9.9048],[40.0778,9.9055],[40.0888,9.9348],[40.0804,9.9484],[40.0673,9.9601],[40.0662,9.9663],[40.0589,9.9771],[40.0432,9.991],[40.032,9.9945],[40.0098,9.9912],[39.9924,9.9933],[39.9474,9.9934],[39.9227,10.0107],[39.9416,10.0431],[39.9434,10.0592],[39.9368,10.0622],[39.9273,10.09],[39.9482,10.0845],[39.9692,10.0849],[39.9802,10.0879],[39.989,10.0883],[39.9936,10.0769],[40.024,10.0744],[40.069,10.0791],[40.1072,10.0712],[40.1326,10.0711],[40.1581,10.0903],[40.1371,10.145],[40.129,10.1735],[40.1499,10.2333],[40.1556,10.2574],[40.1467,10.2772],[40.1575,10.2854],[40.1604,10.3008],[40.1591,10.3563],[40.1631,10.3748],[40.1636,10.4124],[40.1616,10.4353],[40.1529,10.4393],[40.1506,10.4704],[40.1285,10.6175],[40.1091,10.7239],[40.1025,10.7397],[40.1026,10.755],[40.1084,10.7638],[40.122,10.7682],[40.1667,10.805],[40.1641,10.8286],[40.1671,10.834],[40.1681,10.8421],[40.167,10.8475],[40.17,10.8735],[40.1759,10.8778],[40.1785,10.8843],[40.1805,10.8969],[40.1493,10.8958],[40.1329,10.9152],[40.1238,10.9376],[40.1441,10.9521],[40.169,11.0016],[40.1869,11.0253],[40.1932,11.0479],[40.1955,11.0682],[40.1938,11.0964],[40.2124,11.1089],[40.1729,11.24],[40.1456,11.2556],[40.1228,11.2961],[40.1026,11.3169],[40.0712,11.3256],[40.065,11.3378],[40.0672,11.3606],[40.0702,11.3737],[40.0663,11.4287],[40.0671,11.4429],[40.0609,11.4741],[40.0549,11.4877],[40.024,11.5309],[40.0065,11.5586],[39.9933,11.5838],[39.9925,11.5974],[39.9975,11.6122],[40.0153,11.6456],[39.9941,11.6812],[39.9697,11.6645],[39.95,11.6824],[39.9239,11.7008],[39.9115,11.718],[39.9022,11.7366],[39.8851,11.7618],[39.8792,11.7674],[39.8749,11.7788],[39.8735,11.7986],[39.878,11.8584],[39.8781,11.8827],[39.8871,11.9057],[39.8765,11.9744],[39.8667,11.9952],[39.8614,12.0126],[39.8541,12.0292],[39.8413,12.0535],[39.8435,12.0653],[39.8598,12.0833],[39.8617,12.0884],[39.8286,12.0998],[39.8192,12.1234],[39.8128,12.1566],[39.8071,12.1704],[39.7999,12.195],[39.8027,12.2109],[39.8036,12.2297],[39.8075,12.2389],[39.8276,12.2405],[39.8237,12.2916],[39.8247,12.3177],[39.8176,12.324],[39.8176,12.3418],[39.8309,12.3575],[39.8293,12.3657],[39.8253,12.3723],[39.823,12.3839],[39.8199,12.39],[39.821,12.3952],[39.8149,12.4071],[39.8216,12.4148],[39.8334,12.4335],[39.8475,12.4492],[39.8631,12.4633],[39.8826,12.4577],[39.882,12.467],[39.8713,12.4688],[39.8663,12.4726],[39.8811,12.4845],[39.8682,12.4943],[39.8635,12.5063],[39.8617,12.5175],[39.8636,12.5237],[39.8632,12.5314],[39.8524,12.5474],[39.8405,12.5467],[39.8328,12.5499],[39.8259,12.561],[39.8268,12.572],[39.8155,12.5814],[39.8067,12.5963],[39.8089,12.6034],[39.8187,12.6188],[39.8243,12.6225],[39.8326,12.6344],[39.8233,12.6457],[39.8201,12.6588],[39.8261,12.6937],[39.8394,12.7133],[39.8676,12.7237],[39.8698,12.7339],[39.8886,12.7558],[39.899,12.7623],[39.9196,12.7669],[39.9276,12.7671],[39.9427,12.7715],[39.9633,12.7822],[39.978,12.7922],[39.9726,12.7974],[39.9695,12.8141],[39.9655,12.8219],[39.9525,12.8369],[39.9412,12.8613],[39.9294,12.8744],[39.9293,12.8815],[39.9252,12.8938],[39.9064,12.9143],[39.9042,12.9218],[39.8982,12.9261],[39.8864,12.9309],[39.8728,12.9423],[39.8624,12.962],[39.86,12.9696],[39.8618,12.9938],[39.8604,13.0036],[39.8631,13.0197],[39.858,13.0362],[39.848,13.0528],[39.8351,13.083],[39.8332,13.0886],[39.8312,13.1125],[39.8243,13.132],[39.8119,13.1552],[39.8092,13.1767],[39.8038,13.1897],[39.8085,13.2172],[39.8006,13.2192],[39.7991,13.2275],[39.7872,13.2456],[39.7851,13.252],[39.7857,13.2627],[39.7774,13.2752],[39.7673,13.2853],[39.7624,13.2835],[39.7586,13.2789],[39.7418,13.2826],[39.7359,13.2865],[39.725,13.2883],[39.7197,13.2946],[39.7285,13.3088],[39.735,13.3143],[39.7377,13.3211],[39.7365,13.3273],[39.7388,13.3329],[39.7417,13.3513],[39.7422,13.3575],[39.74,13.3633],[39.7317,13.3733],[39.7295,13.3788],[39.7458,13.3741],[39.7413,13.3822],[39.7435,13.3889],[39.7383,13.3996],[39.7339,13.4031],[39.7277,13.4222],[39.7261,13.4412],[39.7195,13.4757],[39.7234,13.5092],[39.7282,13.5166],[39.7292,13.5241],[39.7339,13.5287],[39.7397,13.5473],[39.7395,13.5631],[39.7445,13.5708],[39.763,13.5713],[39.7836,13.5634],[39.7938,13.5557],[39.8038,13.5537],[39.8163,13.5578],[39.8358,13.5553],[39.8434,13.5565],[39.8533,13.5541],[39.8639,13.5482],[39.8634,13.5584],[39.8653,13.5637],[39.8676,13.5838],[39.8655,13.5903],[39.865,13.6027],[39.8696,13.6095],[39.8687,13.6205],[39.8665,13.6269],[39.8686,13.6435],[39.8674,13.6583],[39.8762,13.6803],[39.8777,13.6888],[39.8777,13.706],[39.8746,13.7105],[39.8741,13.7222],[39.876,13.7382],[39.8841,13.7482],[39.8742,13.7494],[39.8638,13.7551],[39.8532,13.7665],[39.8537,13.7862],[39.8523,13.7949],[39.8484,13.8],[39.8415,13.8035],[39.8363,13.8114],[39.8337,13.8214],[39.8422,13.8384],[39.8411,13.8471],[39.8363,13.8541],[39.8378,13.8642],[39.829,13.8685],[39.8282,13.888],[39.8294,13.8996],[39.8335,13.9078],[39.8333,13.9184],[39.8261,13.9214],[39.8256,13.9266],[39.8279,13.9316],[39.8176,13.9426],[39.8126,13.9449],[39.8017,13.9456],[39.8128,13.9602],[39.8157,13.9682],[39.8292,13.9743],[39.8356,13.9756],[39.8592,13.9658],[39.8586,13.9732],[39.8691,13.9829],[39.8685,13.9922],[39.8859,14.0122],[39.8823,14.0161],[39.8663,14.0216],[39.8607,14.0282],[39.8547,14.031],[39.844,14.0503],[39.8445,14.0601],[39.8483,14.078],[39.8432,14.0899],[39.8419,14.097],[39.8431,14.1094],[39.8382,14.1265],[39.8376,14.1542],[39.8268,14.155],[39.8095,14.1516],[39.7978,14.1425],[39.7907,14.1425],[39.7754,14.1391],[39.7671,14.14],[39.7495,14.1518],[39.7209,14.157],[39.715,14.1563],[39.682,14.1647],[39.6735,14.1777],[39.6578,14.1824],[39.65,14.1886],[39.6564,14.1928],[39.6584,14.1987],[39.6639,14.1969],[39.6723,14.2003],[39.6763,14.2071],[39.6857,14.2162],[39.6879,14.2313],[39.6941,14.2413],[39.7065,14.2421],[39.7422,14.2349],[39.753,14.237],[39.7573,14.2398],[39.7559,14.25],[39.7576,14.2772],[39.742,14.2813],[39.7338,14.2879],[39.7268,14.294],[39.7262,14.303],[39.7333,14.3066],[39.7453,14.3086],[39.7626,14.3187],[39.7713,14.3199],[39.7792,14.3305],[39.7797,14.3358],[39.7749,14.3514],[39.772,14.3739],[39.7877,14.3787],[39.796,14.386],[39.8009,14.3872],[39.82,14.3825],[39.8276,14.3827],[39.8381,14.3805],[39.8474,14.375],[39.8546,14.3732],[39.8531,14.3671],[39.8955,14.3706],[39.9015,14.3667],[39.9083,14.3654],[39.9163,14.3703],[39.9385,14.3614],[39.9503,14.3604],[39.9565,14.3624],[39.9722,14.3702],[39.9798,14.371],[39.9908,14.382],[39.9881,14.3881],[39.9817,14.3938],[39.9796,14.4099],[39.9838,14.4236],[39.9843,14.4323],[40.0102,14.4396],[40.0553,14.4869],[40.0753,14.494],[40.0891,14.4903],[40.1399,14.4981],[40.2226,14.4786],[40.2685,14.4533],[40.331,14.424],[40.3847,14.3897],[40.4445,14.3635],[40.5456,14.3014],[40.6505,14.2294],[40.8367,14.0841],[41.0773,13.8785],[41.1686,13.7894],[41.2159,13.7475],[41.2504,13.7127],[41.2908,13.6623],[41.3137,13.6303],[41.3785,13.5699],[41.4397,13.5195],[41.4816,13.4807],[41.5781,13.3857],[41.6117,13.3475],[41.7373,13.2312],[41.7864,13.1753],[41.8787,13.0896],[41.9305,13.0292],[41.9726,12.9832],[41.9978,12.9349],[42.0102,12.9207],[42.0427,12.8553],[42.0502,12.8431],[42.0954,12.7935],[42.0964,12.7834],[42.1135,12.764],[42.1357,12.7459],[42.196,12.6719],[42.219,12.6404],[42.2424,12.6156],[42.2803,12.5564],[42.3097,12.5212],[42.3353,12.4795],[42.341,12.4641],[42.3548,12.4449],[42.337,12.4028],[42.3193,12.3873],[42.3115,12.3695],[42.2949,12.3456],[42.2813,12.3165],[42.2662,12.2892],[42.2443,12.2607],[42.2293,12.235],[42.2112,12.2129],[42.1991,12.2071],[42.1804,12.1766],[42.1241,12.1071],[42.1116,12.0946],[42.0897,12.0644],[42.0781,12.0402],[42.0407,11.9794],[41.9969,11.8956],[41.9802,11.8701],[41.9643,11.8562],[41.9422,11.8243],[41.8801,11.7982],[41.8749,11.7688],[41.8664,11.7627],[41.8599,11.7523],[41.8158,11.7382],[41.7815,11.6374],[41.7815,11.6203],[41.7654,11.5624],[41.7654,11.5496],[41.7482,11.5067],[41.7482,11.4927],[41.7741,11.3677],[41.7726,11.3226],[41.7769,11.2856],[41.7676,11.1067],[41.7638,11.085],[41.7612,11.0039],[41.7548,10.9952],[41.7517,10.9865],[41.7534,10.9773],[41.7395,10.9683],[41.7176,10.9648],[41.6995,10.9693],[41.6808,10.9639],[41.6342,10.9653],[41.5822,10.9621],[41.4841,10.9669],[41.4101,10.9585],[41.3922,10.9663],[41.3486,10.9625],[41.3003,10.9641],[41.2682,10.9579],[41.2407,10.9214],[41.2336,10.8912],[41.232,10.8637],[41.2201,10.8345],[41.2075,10.8203],[41.1909,10.7964],[41.1664,10.7797],[41.1492,10.7597],[41.1331,10.7441],[41.1149,10.7203],[41.09,10.697],[41.0773,10.6812],[41.079,10.6588],[41.0779,10.6395],[41.0824,10.6325],[41.087,10.6006],[41.0713,10.541],[41.0614,10.5167],[41.057,10.5003],[41.0471,10.4776],[41.0318,10.422],[41.0304,10.4004],[41.015,10.3432],[41.0051,10.3188],[40.9899,10.2399],[40.9788,10.1947],[40.9747,10.1566],[40.9538,10.0957],[40.9487,10.0678],[40.9366,10.0352],[40.946,10.0013],[40.9535,9.9875],[40.9658,9.9717],[40.9989,9.9678],[41.0134,9.96],[41.0196,9.9488],[41.0139,9.9392],[40.9966,9.9287],[40.9467,9.8804],[40.8473,9.7903],[40.8256,9.7635],[40.7631,9.6675],[40.7487,9.6513],[40.7353,9.6217],[40.7305,9.6068],[40.7218,9.5903],[40.7145,9.566],[40.699,9.5328],[40.693,9.4989],[40.6936,9.4444],[40.6755,9.4175],[40.6596,9.4043],[40.636,9.3959],[40.606,9.391],[40.5284,9.3855],[40.4988,9.375],[40.471,9.3548],[40.4258,9.3043],[40.4081,9.2812],[40.3695,9.2183],[40.327,9.1547],[40.3006,9.1281],[40.2543,9.0861],[40.2455,9.0749],[40.2443,9.0556],[40.246,9.0354],[40.2423,9.0132],[40.2378,8.9973],[40.2223,8.9877],[40.1875,8.9743],[40.1699,8.9645],[40.1522,8.932]]]]}},{"type":"Feature","properties":{"GID_1":"ETH.3_1","GID_0":"ETH","COUNTRY":"Ethiopia","NAME_1":"Amhara","VARNAME_1":"Amara","NL_NAME_1":"NA","TYPE_1":"Kilil","ENGTYPE_1":"State","CC_1":"03","HASC_1":"ET.AM","ISO_1":"NA"},"geometry":{"type":"MultiPolygon","coordinates":[[[[39.7412,9.023],[39.7462,9.0153],[39.7465,9.0098],[39.748,8.9103],[39.7385,8.8721],[39.7369,8.8572],[39.7313,8.8442],[39.7333,8.8262],[39.7167,8.8161],[39.6792,8.8157],[39.6621,8.8132],[39.6501,8.8028],[39.6341,8.7988],[39.617,8.7869],[39.5915,8.7969],[39.562,8.8178],[39.5518,8.7688],[39.5338,8.758],[39.5008,8.7148],[39.4923,8.7253],[39.4702,8.7418],[39.4492,8.7522],[39.4397,8.7677],[39.4312,8.7901],[39.4178,8.8145],[39.4055,8.81],[39.3862,8.7986],[39.3782,8.7912],[39.3746,8.7797],[39.3736,8.7668],[39.3771,8.7309],[39.3611,8.721],[39.342,8.7269],[39.3315,8.7409],[39.3245,8.7469],[39.3053,8.7217],[39.299,8.7185],[39.2858,8.7178],[39.2704,8.7245],[39.262,8.7469],[39.273,8.7669],[39.272,8.783],[39.2545,8.8132],[39.2439,8.8277],[39.244,8.8366],[39.2655,8.8431],[39.2605,8.8506],[39.2375,8.862],[39.241,8.8889],[39.2591,8.91],[39.2654,8.9224],[39.2586,8.9626],[39.2696,8.9806],[39.2882,8.999],[39.2968,9.0533],[39.3153,9.0602],[39.347,9.0642],[39.357,9.0621],[39.3542,9.0707],[39.3485,9.0766],[39.3486,9.0881],[39.3288,9.1372],[39.3202,9.1402],[39.3232,9.1488],[39.2941,9.1493],[39.2495,9.1356],[39.2337,9.1579],[39.2146,9.1734],[39.1886,9.2093],[39.2137,9.2281],[39.1997,9.25],[39.1941,9.2524],[39.1777,9.2711],[39.2072,9.2919],[39.2337,9.2936],[39.2604,9.2503],[39.2662,9.2445],[39.2847,9.2775],[39.2662,9.2885],[39.2644,9.3242],[39.2783,9.3123],[39.2854,9.3158],[39.2915,9.3317],[39.293,9.3492],[39.303,9.3566],[39.3065,9.3661],[39.3196,9.3656],[39.3201,9.374],[39.3251,9.3805],[39.3372,9.3805],[39.3467,9.3785],[39.3567,9.369],[39.373,9.3757],[39.3763,9.384],[39.3949,9.3919],[39.4039,9.3804],[39.4119,9.3745],[39.4204,9.3715],[39.4259,9.3794],[39.4405,9.3814],[39.4456,9.3839],[39.4522,9.3939],[39.4539,9.4012],[39.4496,9.4047],[39.4431,9.4144],[39.4476,9.4188],[39.4493,9.4253],[39.4477,9.4325],[39.4303,9.4339],[39.4113,9.4475],[39.3939,9.455],[39.3879,9.4498],[39.3784,9.4461],[39.3727,9.4468],[39.3733,9.458],[39.3769,9.4633],[39.3751,9.4671],[39.3631,9.4739],[39.3556,9.4742],[39.3504,9.472],[39.3438,9.4723],[39.3386,9.4748],[39.3148,9.467],[39.3097,9.4677],[39.3055,9.4737],[39.3011,9.4878],[39.2941,9.4917],[39.2939,9.4963],[39.2965,9.5017],[39.3052,9.5052],[39.3025,9.512],[39.3021,9.5227],[39.3129,9.5356],[39.3229,9.5257],[39.3297,9.5266],[39.3414,9.5454],[39.3528,9.5492],[39.3606,9.5461],[39.3726,9.564],[39.3765,9.5673],[39.3785,9.5731],[39.3779,9.5802],[39.3733,9.5829],[39.3734,9.592],[39.3797,9.5963],[39.3842,9.6029],[39.3853,9.6107],[39.3888,9.6157],[39.3859,9.6308],[39.3755,9.6292],[39.3617,9.6189],[39.3544,9.6177],[39.352,9.6221],[39.3577,9.6569],[39.3621,9.6615],[39.3682,9.663],[39.3713,9.67],[39.361,9.6803],[39.3697,9.6896],[39.3701,9.6994],[39.3641,9.7015],[39.3445,9.699],[39.3393,9.7039],[39.338,9.7102],[39.3408,9.7171],[39.3467,9.7251],[39.3418,9.7275],[39.3288,9.7244],[39.3204,9.7241],[39.3134,9.7314],[39.3081,9.744],[39.2979,9.748],[39.2917,9.7451],[39.2876,9.734],[39.2804,9.7332],[39.2681,9.7397],[39.26,9.7293],[39.2499,9.7049],[39.2448,9.7018],[39.239,9.7024],[39.2328,9.6992],[39.2281,9.6937],[39.2235,9.7052],[39.2168,9.7084],[39.2114,9.7047],[39.2086,9.7109],[39.2049,9.7066],[39.2001,9.7087],[39.1974,9.7164],[39.1842,9.7201],[39.184,9.6858],[39.1786,9.6893],[39.1742,9.6948],[39.1663,9.6927],[39.1618,9.6888],[39.1557,9.6887],[39.1454,9.6933],[39.146,9.7084],[39.1477,9.7154],[39.1443,9.7207],[39.1449,9.7286],[39.143,9.7353],[39.1393,9.7407],[39.1335,9.7414],[39.1227,9.7349],[39.117,9.7333],[39.1096,9.7325],[39.0977,9.7354],[39.0974,9.7438],[39.1045,9.7486],[39.1018,9.7551],[39.0922,9.7631],[39.0871,9.7615],[39.0821,9.757],[39.0765,9.7546],[39.0689,9.753],[39.0505,9.7534],[39.036,9.747],[39.035,9.7528],[39.0306,9.7555],[39.0236,9.7579],[39.0166,9.7577],[39.0122,9.7522],[38.9901,9.746],[38.9808,9.752],[38.9744,9.7611],[38.9679,9.7562],[38.9641,9.7491],[38.9521,9.7387],[38.9527,9.7327],[38.9591,9.7185],[38.9603,9.7108],[38.9538,9.7138],[38.9403,9.7252],[38.9347,9.7279],[38.9282,9.7251],[38.9178,9.7115],[38.9093,9.7087],[38.8967,9.7143],[38.8665,9.7336],[38.8585,9.7449],[38.8403,9.757],[38.8289,9.7691],[38.8215,9.7845],[38.8182,9.8027],[38.8137,9.8062],[38.8078,9.8195],[38.8084,9.8353],[38.803,9.8621],[38.7909,9.8826],[38.796,9.8891],[38.8025,9.9095],[38.8013,9.9222],[38.7978,9.9278],[38.7964,9.9337],[38.7973,9.9408],[38.8014,9.9465],[38.8027,9.9536],[38.8006,9.9622],[38.7969,9.9677],[38.7896,9.9719],[38.7848,9.9783],[38.7793,9.9824],[38.7712,9.9781],[38.7649,9.9806],[38.7581,9.9807],[38.7521,9.9847],[38.7402,9.9875],[38.7336,9.9929],[38.7254,9.9913],[38.7186,9.996],[38.7099,9.9984],[38.6941,10.0078],[38.6865,10.008],[38.6811,10.0134],[38.6738,10.0151],[38.6695,10.0192],[38.6608,10.0338],[38.6605,10.0455],[38.6572,10.0515],[38.6627,10.0574],[38.6887,10.0502],[38.6957,10.0509],[38.7015,10.0494],[38.7057,10.053],[38.7214,10.0514],[38.7339,10.0563],[38.741,10.0611],[38.7512,10.0633],[38.7579,10.0683],[38.7649,10.0708],[38.7773,10.0828],[38.792,10.0894],[38.7995,10.0903],[38.8053,10.0935],[38.8109,10.0944],[38.8236,10.1097],[38.829,10.1097],[38.8391,10.1144],[38.8426,10.1099],[38.8526,10.1181],[38.8486,10.1239],[38.8472,10.1387],[38.8443,10.1443],[38.8392,10.149],[38.8337,10.1619],[38.8344,10.1792],[38.8381,10.1981],[38.8337,10.204],[38.8327,10.2121],[38.8353,10.2257],[38.8476,10.2443],[38.8444,10.2507],[38.8446,10.2561],[38.8608,10.278],[38.8595,10.286],[38.8557,10.2947],[38.8532,10.3338],[38.8451,10.3548],[38.8457,10.361],[38.8156,10.3643],[38.8065,10.3688],[38.7907,10.3665],[38.7721,10.3662],[38.7612,10.3756],[38.7461,10.3837],[38.7382,10.3856],[38.7126,10.3869],[38.6974,10.3794],[38.6823,10.379],[38.676,10.3774],[38.6713,10.3741],[38.6642,10.3728],[38.6565,10.3736],[38.6303,10.3822],[38.6238,10.3784],[38.6047,10.3746],[38.5921,10.3744],[38.578,10.3772],[38.566,10.3743],[38.5602,10.3759],[38.5412,10.3703],[38.5344,10.3665],[38.5238,10.3678],[38.5028,10.3633],[38.4835,10.3654],[38.4767,10.3633],[38.4761,10.3562],[38.4795,10.3511],[38.4812,10.3444],[38.4751,10.3307],[38.4737,10.3146],[38.4679,10.3111],[38.4661,10.3052],[38.4725,10.2918],[38.4601,10.29],[38.4579,10.282],[38.4627,10.2677],[38.4553,10.2611],[38.4542,10.2467],[38.4481,10.2403],[38.4307,10.2316],[38.4242,10.2227],[38.4194,10.2198],[38.4194,10.2132],[38.43,10.1931],[38.4211,10.1808],[38.4259,10.1778],[38.4257,10.1718],[38.4063,10.1604],[38.4021,10.1547],[38.4009,10.1486],[38.3975,10.1443],[38.3756,10.1404],[38.3663,10.1405],[38.3581,10.1443],[38.357,10.1508],[38.3541,10.1551],[38.3483,10.1588],[38.34,10.1562],[38.3333,10.1514],[38.326,10.1331],[38.3237,10.1234],[38.3265,10.1145],[38.3218,10.1072],[38.3086,10.108],[38.3023,10.1034],[38.3004,10.0954],[38.2953,10.0892],[38.2861,10.0885],[38.2808,10.0909],[38.2718,10.0918],[38.2581,10.0877],[38.2524,10.0884],[38.2515,10.0965],[38.2478,10.1019],[38.2404,10.1026],[38.222,10.0923],[38.2164,10.0864],[38.2037,10.0818],[38.1843,10.0668],[38.1766,10.0631],[38.1706,10.0578],[38.1699,10.0507],[38.1673,10.0461],[38.1604,10.0441],[38.1506,10.0351],[38.1451,10.0367],[38.1422,10.0433],[38.137,10.0474],[38.1309,10.0475],[38.1253,10.0432],[38.1183,10.029],[38.1171,10.0236],[38.1183,10.0178],[38.1131,10.016],[38.1007,10.0223],[38.0941,10.0202],[38.0876,10.0203],[38.0803,10.0152],[38.0827,10.0075],[38.0812,10.0022],[38.0698,10.0015],[38.0643,9.9979],[38.0599,9.9818],[38.0481,9.9815],[38.0436,9.9698],[38.0339,9.9675],[38.0256,9.9683],[38.016,9.9668],[38.0085,9.9641],[37.9934,9.9491],[37.9784,9.9491],[37.9571,9.9386],[37.9519,9.9384],[37.9387,9.9441],[37.9328,9.9413],[37.9308,9.9305],[37.9352,9.923],[37.9351,9.919],[37.9301,9.9146],[37.9234,9.9147],[37.9093,9.9304],[37.9014,9.9304],[37.893,9.9273],[37.8802,9.9215],[37.8759,9.9163],[37.8745,9.9112],[37.8699,9.9075],[37.8645,9.9129],[37.8604,9.9128],[37.8592,9.9002],[37.8559,9.8959],[37.8484,9.8976],[37.8427,9.8967],[37.8364,9.8879],[37.8308,9.8846],[37.8233,9.8739],[37.816,9.8672],[37.807,9.8653],[37.8006,9.8618],[37.7746,9.8565],[37.7691,9.8514],[37.761,9.8519],[37.754,9.8571],[37.7485,9.8559],[37.7482,9.8467],[37.7429,9.8407],[37.736,9.8408],[37.7307,9.8449],[37.7243,9.8445],[37.7107,9.8426],[37.7007,9.8367],[37.6946,9.8427],[37.6851,9.8575],[37.6804,9.8623],[37.6669,9.8595],[37.6619,9.8605],[37.6516,9.8691],[37.6414,9.8825],[37.6366,9.8855],[37.6236,9.889],[37.6182,9.8939],[37.6175,9.9017],[37.6128,9.9094],[37.5993,9.9178],[37.5924,9.9188],[37.5897,9.9268],[37.5906,9.933],[37.5869,9.9394],[37.5743,9.9419],[37.5572,9.9539],[37.5529,9.9586],[37.5514,9.9734],[37.5292,9.9962],[37.5197,9.9999],[37.5016,9.9979],[37.4885,10.003],[37.4831,10.0035],[37.4781,10.0092],[37.4757,10.0149],[37.4613,10.0121],[37.4445,10.0146],[37.4244,10.0338],[37.3983,10.0462],[37.3873,10.0465],[37.3804,10.0431],[37.3736,10.0422],[37.3622,10.0432],[37.357,10.0402],[37.3493,10.0119],[37.3447,10.0058],[37.3393,10.0045],[37.3295,10.0058],[37.3233,10.0081],[37.3178,10.0181],[37.3056,10.0267],[37.2997,10.0388],[37.2965,10.0528],[37.2877,10.0629],[37.2825,10.0649],[37.2716,10.0736],[37.2619,10.0767],[37.2407,10.0756],[37.2133,10.0879],[37.1955,10.1045],[37.1907,10.1116],[37.1798,10.1444],[37.1677,10.1633],[37.171,10.174],[37.1825,10.188],[37.1934,10.206],[37.1975,10.2139],[37.1999,10.2233],[37.196,10.2309],[37.1904,10.2363],[37.1818,10.2413],[37.1745,10.2433],[37.1348,10.246],[37.0871,10.2595],[37.0781,10.2634],[37.0697,10.2761],[37.0618,10.2817],[37.0508,10.2836],[37.0459,10.2884],[37.0401,10.2854],[37.0133,10.2849],[37.0072,10.2888],[36.9971,10.303],[36.9799,10.314],[36.9717,10.3151],[36.9647,10.3119],[36.9308,10.3109],[36.9246,10.3138],[36.9192,10.3142],[36.898,10.3128],[36.8887,10.3155],[36.8831,10.3207],[36.8758,10.3338],[36.8692,10.3407],[36.8396,10.3408],[36.8247,10.3425],[36.817,10.3417],[36.8118,10.3373],[36.8066,10.3354],[36.7987,10.3378],[36.792,10.3434],[36.7766,10.346],[36.7666,10.3623],[36.7618,10.3673],[36.7524,10.366],[36.7457,10.36],[36.7314,10.3614],[36.7235,10.3608],[36.718,10.3579],[36.6917,10.3573],[36.6881,10.345],[36.6809,10.3346],[36.6859,10.3231],[36.6854,10.3176],[36.6683,10.3138],[36.6618,10.3165],[36.6554,10.322],[36.637,10.3466],[36.6176,10.355],[36.6055,10.3647],[36.5895,10.3689],[36.5729,10.3629],[36.5568,10.3627],[36.5485,10.3609],[36.5392,10.365],[36.5325,10.376],[36.5312,10.3821],[36.5229,10.3942],[36.5205,10.3996],[36.5204,10.4059],[36.5237,10.41],[36.5326,10.4311],[36.5433,10.4487],[36.5462,10.4569],[36.5372,10.4731],[36.5268,10.4829],[36.5186,10.4789],[36.4854,10.4828],[36.4627,10.4792],[36.4557,10.4746],[36.4495,10.4595],[36.4457,10.4557],[36.4353,10.4525],[36.4219,10.4563],[36.4169,10.4538],[36.409,10.4553],[36.3909,10.468],[36.3822,10.4896],[36.3715,10.5048],[36.3647,10.5062],[36.3637,10.5181],[36.3591,10.5303],[36.3552,10.5266],[36.3436,10.5209],[36.3261,10.5233],[36.3182,10.528],[36.3109,10.5421],[36.3112,10.548],[36.3082,10.5524],[36.302,10.554],[36.302,10.5712],[36.3059,10.5779],[36.2935,10.5971],[36.2837,10.5987],[36.2816,10.6046],[36.2863,10.6151],[36.2916,10.62],[36.2973,10.6203],[36.3076,10.6242],[36.303,10.6379],[36.3062,10.6444],[36.3109,10.649],[36.3183,10.652],[36.3242,10.6617],[36.3205,10.6674],[36.3125,10.6738],[36.3113,10.6788],[36.318,10.6793],[36.3217,10.6853],[36.3166,10.6972],[36.3176,10.7036],[36.3266,10.7138],[36.3313,10.7262],[36.3526,10.74],[36.3593,10.7416],[36.3627,10.7482],[36.374,10.7584],[36.376,10.7653],[36.3728,10.7728],[36.3772,10.7858],[36.3576,10.7896],[36.3416,10.7888],[36.3313,10.7703],[36.3253,10.7687],[36.3247,10.7632],[36.3135,10.7529],[36.3108,10.7473],[36.2938,10.7434],[36.2852,10.7446],[36.2885,10.7724],[36.2828,10.796],[36.2823,10.8039],[36.2921,10.8057],[36.2995,10.81],[36.2949,10.815],[36.3047,10.8199],[36.3101,10.8272],[36.3097,10.8358],[36.3138,10.8508],[36.3093,10.8546],[36.3091,10.8625],[36.3226,10.8787],[36.3276,10.8818],[36.3321,10.8874],[36.33,10.8922],[36.3316,10.8977],[36.3455,10.9107],[36.3471,10.9172],[36.3531,10.9212],[36.3506,10.93],[36.354,10.937],[36.3658,10.9457],[36.4177,11.0007],[36.4226,11.0314],[36.4273,11.0355],[36.4362,11.039],[36.4442,11.0504],[36.4512,11.0535],[36.4699,11.0552],[36.4783,11.0671],[36.4849,11.0663],[36.4897,11.0687],[36.4913,11.0759],[36.5007,11.0853],[36.515,11.1048],[36.5251,11.1127],[36.5326,11.1132],[36.534,11.098],[36.5549,11.0932],[36.5594,11.0998],[36.5673,11.1017],[36.575,11.1007],[36.578,11.1105],[36.5733,11.1124],[36.5666,11.1114],[36.5602,11.1133],[36.5559,11.1197],[36.5528,11.1271],[36.5528,11.1322],[36.5493,11.1378],[36.5304,11.1416],[36.5114,11.1374],[36.5029,11.1375],[36.4892,11.1462],[36.4833,11.1528],[36.4756,11.157],[36.4676,11.1554],[36.4682,11.1783],[36.466,11.1864],[36.4685,11.1972],[36.4676,11.2153],[36.4602,11.2264],[36.4708,11.2333],[36.4758,11.2447],[36.4671,11.265],[36.4832,11.2718],[36.4903,11.2791],[36.495,11.289],[36.505,11.285],[36.5148,11.2896],[36.5296,11.3025],[36.5373,11.3047],[36.5454,11.3048],[36.5569,11.3021],[36.5621,11.3118],[36.5624,11.3183],[36.5564,11.3295],[36.5475,11.3373],[36.5345,11.3353],[36.5387,11.3456],[36.5588,11.3543],[36.5636,11.358],[36.5639,11.3713],[36.5514,11.3866],[36.5411,11.3941],[36.5331,11.3941],[36.5299,11.4345],[36.5211,11.4445],[36.5122,11.4583],[36.5035,11.4581],[36.4978,11.4437],[36.4889,11.4401],[36.4715,11.4363],[36.4672,11.4286],[36.4481,11.4269],[36.4099,11.4139],[36.4095,11.4583],[36.4197,11.4673],[36.4251,11.4767],[36.4356,11.4867],[36.4384,11.4918],[36.4443,11.4928],[36.434,11.5108],[36.4131,11.532],[36.4145,11.5451],[36.4034,11.546],[36.3903,11.5713],[36.3914,11.5833],[36.3794,11.5961],[36.3752,11.6077],[36.3653,11.6003],[36.3484,11.6054],[36.3383,11.6509],[36.3324,11.666],[36.3476,11.6966],[36.3321,11.7041],[36.3345,11.7172],[36.3338,11.7232],[36.3396,11.7375],[36.3388,11.7435],[36.3404,11.7486],[36.3387,11.761],[36.3412,11.7677],[36.3376,11.773],[36.3413,11.7808],[36.3291,11.7967],[36.3088,11.8032],[36.2829,11.7727],[36.261,11.7535],[36.2359,11.737],[36.2316,11.7221],[36.2071,11.7214],[36.2008,11.7058],[36.1857,11.69],[36.1762,11.6842],[36.165,11.6782],[36.1571,11.6859],[36.1448,11.6856],[36.1184,11.7058],[36.1255,11.7192],[36.1166,11.7235],[36.1232,11.7344],[36.1172,11.7742],[36.1052,11.8159],[36.0951,11.8129],[36.0815,11.8244],[36.0843,11.8351],[36.0663,11.8516],[36.0545,11.8493],[36.051,11.8569],[36.0491,11.866],[36.0564,11.8743],[36.0451,11.8764],[36.0506,11.883],[36.0381,11.8855],[36.0338,11.8918],[36.0426,11.8951],[36.0212,11.9138],[35.996,11.9269],[35.978,11.9605],[35.969,11.9584],[35.9723,11.9703],[35.9658,11.9846],[35.9394,11.9702],[35.9353,11.9661],[35.9332,11.96],[35.94,11.9544],[35.9429,11.9366],[35.9365,11.9208],[35.9248,11.9126],[35.9177,11.905],[35.9113,11.9055],[35.8877,11.8908],[35.8744,11.8859],[35.8683,11.8596],[35.8602,11.8499],[35.8483,11.8402],[35.823,11.8269],[35.8148,11.8284],[35.8037,11.838],[35.7739,11.8336],[35.7628,11.8373],[35.7561,11.8313],[35.7368,11.8328],[35.7197,11.8291],[35.7055,11.8224],[35.6944,11.8313],[35.6832,11.8254],[35.6666,11.8259],[35.6617,11.7934],[35.6449,11.7814],[35.6235,11.7758],[35.5899,11.773],[35.5766,11.7674],[35.5346,11.7297],[35.5169,11.718],[35.4733,11.7362],[35.4616,11.7351],[35.441,11.7299],[35.4218,11.7294],[35.3947,11.7462],[35.3638,11.753],[35.3374,11.773],[35.335,11.782],[35.3257,11.7945],[35.3137,11.7922],[35.3033,11.8028],[35.2959,11.7992],[35.2975,11.8072],[35.2967,11.8195],[35.2881,11.8299],[35.2847,11.8465],[35.2877,11.8559],[35.2873,11.8701],[35.2844,11.8845],[35.2753,11.9043],[35.2571,11.9342],[35.2753,11.94],[35.3024,12.0155],[35.3077,12.016],[35.3233,12.0131],[35.3357,12.0188],[35.3398,12.0234],[35.3436,12.0345],[35.3432,12.0472],[35.3402,12.0577],[35.3372,12.0628],[35.3319,12.0667],[35.4007,12.1858],[35.4095,12.1837],[35.4236,12.1853],[35.4334,12.1911],[35.4376,12.1973],[35.4415,12.205],[35.4425,12.2117],[35.4412,12.2205],[35.4383,12.2278],[35.4298,12.2364],[35.6475,12.6052],[35.6606,12.6003],[35.6663,12.6009],[35.6837,12.6097],[35.6908,12.6239],[35.6917,12.6312],[35.6903,12.6388],[35.6852,12.6487],[35.6988,12.6677],[35.721,12.6703],[35.729,12.6668],[35.7362,12.6591],[35.7477,12.6573],[35.7617,12.6689],[35.7704,12.6653],[35.7724,12.6605],[36.0016,12.7082],[36.0025,12.7138],[36.0082,12.7177],[36.015,12.7192],[36.0336,12.7176],[36.0511,12.722],[36.0591,12.7222],[36.0728,12.7189],[36.0965,12.7082],[36.1017,12.7035],[36.1056,12.6969],[36.108,12.6859],[36.1517,12.6825],[36.1573,12.6866],[36.1557,12.6986],[36.1563,12.7065],[36.1691,12.7405],[36.176,12.7776],[36.1757,12.8081],[36.181,12.8734],[36.179,12.8957],[36.1611,12.9157],[36.1572,12.9216],[36.153,12.9334],[36.1528,12.9404],[36.1574,12.9553],[36.1572,12.9629],[36.1678,12.9786],[36.1761,13.0035],[36.1794,13.008],[36.1988,13.0697],[36.2373,13.215],[36.257,13.2805],[36.2601,13.2979],[36.278,13.366],[36.288,13.3878],[36.3106,13.4263],[36.35,13.5],[36.3643,13.5246],[36.3777,13.5378],[36.3814,13.5452],[36.3838,13.5672],[36.4024,13.6434],[36.4391,13.7417],[36.4455,13.7641],[36.4512,13.7687],[36.4554,13.7544],[36.4676,13.7431],[36.4807,13.7347],[36.4838,13.7271],[36.4778,13.7208],[36.4786,13.7048],[36.4758,13.7004],[36.4777,13.6935],[36.4824,13.6886],[36.4942,13.6699],[36.4984,13.6657],[36.5044,13.6651],[36.5058,13.6525],[36.5102,13.6496],[36.5128,13.6313],[36.5261,13.6065],[36.5196,13.5855],[36.5316,13.5817],[36.5378,13.582],[36.5399,13.5755],[36.5547,13.5713],[36.5603,13.5633],[36.5617,13.5555],[36.5585,13.5515],[36.564,13.5474],[36.5665,13.5391],[36.5647,13.533],[36.5724,13.5223],[36.5797,13.5203],[36.5981,13.5047],[36.6011,13.4984],[36.5964,13.4891],[36.5788,13.4822],[36.5743,13.4779],[36.571,13.4669],[36.5729,13.4562],[36.5709,13.4497],[36.5664,13.4462],[36.5695,13.4253],[36.5763,13.4176],[36.5793,13.4116],[36.5887,13.4028],[36.5927,13.389],[36.602,13.3821],[36.6048,13.3776],[36.6095,13.3752],[36.6281,13.3819],[36.6358,13.3825],[36.6439,13.3781],[36.6491,13.3802],[36.6562,13.3691],[36.6646,13.3666],[36.6851,13.3748],[36.7054,13.3721],[36.7148,13.3671],[36.722,13.3666],[36.7314,13.3687],[36.7347,13.3631],[36.7448,13.367],[36.7494,13.3714],[36.7622,13.3741],[36.7669,13.3781],[36.7705,13.3819],[36.7724,13.3889],[36.7832,13.4029],[36.7884,13.4076],[36.8025,13.4134],[36.8086,13.4185],[36.8125,13.4352],[36.8171,13.4465],[36.8248,13.4482],[36.8379,13.4446],[36.8437,13.4409],[36.8447,13.4354],[36.8542,13.4314],[36.8712,13.419],[36.8738,13.4132],[36.8812,13.4075],[36.8955,13.4069],[36.9039,13.3946],[36.9051,13.3882],[36.909,13.3845],[36.9154,13.3828],[36.9192,13.3768],[36.9269,13.3776],[36.9297,13.3721],[36.9386,13.38],[36.9461,13.3698],[36.9516,13.3648],[36.9569,13.3624],[36.9598,13.3673],[36.9645,13.3696],[36.9704,13.3654],[36.9762,13.3647],[36.9821,13.3613],[36.9968,13.359],[37.0018,13.3567],[37.013,13.3605],[37.0253,13.3546],[37.035,13.3533],[37.0397,13.351],[37.0525,13.333],[37.0656,13.3299],[37.0693,13.3174],[37.0764,13.318],[37.0784,13.3118],[37.0839,13.3147],[37.0987,13.3164],[37.1157,13.3116],[37.1275,13.3051],[37.1503,13.3008],[37.1577,13.2978],[37.1635,13.2926],[37.1755,13.2885],[37.1857,13.2825],[37.2047,13.2557],[37.211,13.2594],[37.2141,13.2658],[37.2244,13.2747],[37.2398,13.2769],[37.2462,13.2922],[37.2505,13.295],[37.2559,13.295],[37.2638,13.29],[37.2759,13.2884],[37.2806,13.2849],[37.3127,13.2975],[37.3218,13.2972],[37.3355,13.3104],[37.339,13.3186],[37.3443,13.3244],[37.3504,13.3267],[37.3525,13.3344],[37.3519,13.3426],[37.3554,13.3513],[37.359,13.3575],[37.3652,13.3599],[37.3887,13.3563],[37.3958,13.3578],[37.403,13.3617],[37.4095,13.3701],[37.4158,13.374],[37.4249,13.3635],[37.4313,13.3595],[37.4376,13.3583],[37.4405,13.3541],[37.4501,13.3549],[37.462,13.3595],[37.4715,13.3669],[37.4765,13.3677],[37.4828,13.3643],[37.4901,13.3632],[37.4949,13.3678],[37.5178,13.3665],[37.5259,13.3713],[37.5318,13.3776],[37.552,13.3886],[37.5572,13.3903],[37.5615,13.3871],[37.5672,13.3882],[37.5823,13.397],[37.5902,13.3976],[37.6045,13.4089],[37.611,13.4111],[37.6176,13.4079],[37.6254,13.4082],[37.6371,13.4139],[37.6557,13.4348],[37.6566,13.4414],[37.6622,13.4421],[37.6657,13.4464],[37.6768,13.4507],[37.679,13.4565],[37.6833,13.4597],[37.6854,13.4653],[37.6941,13.4724],[37.6909,13.4847],[37.6949,13.4883],[37.6987,13.4954],[37.7079,13.5212],[37.7096,13.5302],[37.7155,13.5345],[37.7144,13.542],[37.7201,13.5462],[37.727,13.5634],[37.7357,13.5721],[37.7461,13.5709],[37.7458,13.5781],[37.7539,13.5912],[37.7599,13.591],[37.7607,13.5965],[37.7651,13.6022],[37.7644,13.6184],[37.7694,13.6279],[37.7761,13.6335],[37.7748,13.6117],[37.7846,13.5973],[37.7841,13.5877],[37.7739,13.5743],[37.769,13.5626],[37.7849,13.5392],[37.7927,13.5206],[37.809,13.5191],[37.8119,13.4797],[37.8169,13.4632],[37.8664,13.4751],[37.8751,13.4677],[37.8872,13.4534],[37.9041,13.447],[37.9465,13.4664],[37.9625,13.4896],[37.9684,13.4937],[38.0012,13.5011],[38.0081,13.5008],[38.0149,13.4865],[38.0207,13.4813],[38.0244,13.4856],[38.0299,13.4828],[38.0369,13.4828],[38.0456,13.4801],[38.052,13.4679],[38.0594,13.4672],[38.0707,13.4764],[38.0829,13.4837],[38.1153,13.4943],[38.121,13.5063],[38.1284,13.4923],[38.1299,13.4847],[38.1353,13.4787],[38.1452,13.4717],[38.1552,13.4765],[38.1585,13.4828],[38.1737,13.4934],[38.1885,13.4844],[38.2009,13.4801],[38.2113,13.4868],[38.2202,13.4893],[38.2273,13.4892],[38.2431,13.4967],[38.248,13.5017],[38.2498,13.4962],[38.2591,13.4862],[38.2677,13.4878],[38.2789,13.4855],[38.3199,13.5022],[38.323,13.5096],[38.32,13.5239],[38.326,13.5344],[38.3251,13.5433],[38.3279,13.5503],[38.3412,13.5376],[38.3494,13.5424],[38.36,13.553],[38.3655,13.5522],[38.3798,13.5445],[38.3856,13.5516],[38.3912,13.5534],[38.3993,13.5455],[38.3994,13.5397],[38.4065,13.5394],[38.4238,13.5613],[38.4264,13.5713],[38.4327,13.5797],[38.4408,13.5844],[38.451,13.5846],[38.4433,13.5689],[38.4428,13.5605],[38.4536,13.5569],[38.4585,13.5598],[38.4652,13.5676],[38.4729,13.5641],[38.4735,13.5573],[38.4776,13.5523],[38.4899,13.558],[38.5014,13.5579],[38.5324,13.5533],[38.5493,13.5526],[38.5539,13.5503],[38.5507,13.5379],[38.5425,13.5258],[38.5326,13.5187],[38.5222,13.5174],[38.5086,13.5112],[38.5029,13.5115],[38.4968,13.5068],[38.4907,13.4958],[38.4983,13.4845],[38.4674,13.4849],[38.4655,13.4797],[38.469,13.4754],[38.461,13.4596],[38.4842,13.4697],[38.5117,13.4729],[38.5342,13.4818],[38.5621,13.4833],[38.5675,13.4865],[38.573,13.4977],[38.5796,13.5035],[38.5901,13.5061],[38.6054,13.4907],[38.614,13.4907],[38.6225,13.4954],[38.636,13.5063],[38.6622,13.5312],[38.6682,13.5334],[38.6777,13.5113],[38.676,13.4976],[38.6733,13.4919],[38.6764,13.4834],[38.6613,13.4847],[38.6482,13.4814],[38.6333,13.4727],[38.6158,13.4514],[38.6179,13.4283],[38.6224,13.4112],[38.6323,13.4042],[38.6486,13.3965],[38.6691,13.3919],[38.7057,13.3893],[38.7187,13.4028],[38.7219,13.4081],[38.7331,13.3988],[38.7333,13.3841],[38.7372,13.3777],[38.7302,13.3654],[38.7337,13.3498],[38.7418,13.3398],[38.7417,13.3335],[38.7369,13.3303],[38.7382,13.3123],[38.741,13.3074],[38.7352,13.3024],[38.7393,13.2964],[38.7401,13.2868],[38.7355,13.2819],[38.7299,13.2692],[38.7316,13.2623],[38.7433,13.265],[38.7792,13.2494],[38.7897,13.2501],[38.8007,13.2473],[38.8191,13.2347],[38.8339,13.2319],[38.8383,13.2291],[38.8503,13.2145],[38.8631,13.2095],[38.8672,13.2153],[38.8762,13.2205],[38.8932,13.2234],[38.9133,13.2245],[38.9186,13.2299],[38.9296,13.2357],[38.9517,13.2375],[38.9534,13.2238],[38.9563,13.2192],[38.9558,13.212],[38.9648,13.2078],[38.9848,13.2028],[38.9974,13.2034],[39.0167,13.1787],[39.036,13.1699],[39.0416,13.1615],[39.0426,13.1556],[39.0369,13.1342],[39.0263,13.1279],[39.0202,13.1269],[39.0102,13.114],[38.9786,13.099],[38.9898,13.0813],[38.9905,13.0628],[38.994,13.0453],[39.0001,13.0389],[39.0043,13.0234],[38.9945,13.0117],[39.0002,13.0034],[39.0096,13.0039],[39.0144,13.0016],[39.0343,13.0005],[39.0446,12.9934],[39.0536,12.9907],[39.0741,12.9761],[39.0829,12.9593],[39.1005,12.9588],[39.1191,12.9609],[39.1419,12.9558],[39.1504,12.9532],[39.1548,12.9498],[39.1635,12.9484],[39.1748,12.9382],[39.1928,12.9281],[39.2033,12.9289],[39.2153,12.9221],[39.2326,12.9167],[39.2508,12.918],[39.2587,12.9147],[39.2631,12.8941],[39.279,12.8562],[39.2949,12.8709],[39.303,12.8701],[39.3068,12.8663],[39.3101,12.8522],[39.2904,12.8379],[39.2777,12.826],[39.3072,12.8117],[39.3036,12.7933],[39.2957,12.7855],[39.2758,12.7878],[39.2677,12.7713],[39.2789,12.7585],[39.2809,12.7433],[39.2739,12.7266],[39.2695,12.7232],[39.2855,12.7044],[39.2805,12.688],[39.2657,12.6771],[39.2389,12.6631],[39.2308,12.6665],[39.212,12.6616],[39.1989,12.6604],[39.1814,12.6527],[39.1744,12.6435],[39.1834,12.6303],[39.183,12.6123],[39.2043,12.576],[39.2092,12.5606],[39.2087,12.5496],[39.2143,12.5434],[39.2176,12.536],[39.2181,12.5301],[39.2227,12.5223],[39.2223,12.5167],[39.2298,12.5011],[39.2316,12.4931],[39.2309,12.4862],[39.2364,12.4731],[39.2362,12.449],[39.2414,12.4256],[39.2418,12.4036],[39.2399,12.3945],[39.2465,12.3599],[39.2455,12.3529],[39.2512,12.3441],[39.2629,12.3347],[39.2635,12.3304],[39.2848,12.2997],[39.2909,12.2961],[39.3052,12.2973],[39.3217,12.3049],[39.3338,12.3006],[39.3423,12.3007],[39.3502,12.2984],[39.3726,12.3013],[39.3886,12.3005],[39.4029,12.2953],[39.4195,12.2966],[39.4407,12.3155],[39.4556,12.325],[39.4705,12.3214],[39.5074,12.3329],[39.5227,12.3264],[39.5385,12.2919],[39.5433,12.265],[39.5552,12.2555],[39.5725,12.2559],[39.5919,12.271],[39.605,12.2706],[39.6142,12.2757],[39.6251,12.288],[39.6209,12.3002],[39.6323,12.3077],[39.6587,12.3064],[39.6793,12.3078],[39.7063,12.3062],[39.7215,12.3082],[39.7391,12.3128],[39.7586,12.32],[39.7615,12.3033],[39.7771,12.3109],[39.8003,12.3164],[39.8176,12.324],[39.8247,12.3177],[39.8237,12.2916],[39.8276,12.2405],[39.8075,12.2389],[39.8036,12.2297],[39.8027,12.2109],[39.7999,12.195],[39.8071,12.1704],[39.8128,12.1566],[39.8192,12.1234],[39.8286,12.0998],[39.8617,12.0884],[39.8598,12.0833],[39.8435,12.0653],[39.8413,12.0535],[39.8541,12.0292],[39.8614,12.0126],[39.8667,11.9952],[39.8765,11.9744],[39.8871,11.9057],[39.8781,11.8827],[39.878,11.8584],[39.8735,11.7986],[39.8749,11.7788],[39.8792,11.7674],[39.8851,11.7618],[39.9022,11.7366],[39.9115,11.718],[39.9239,11.7008],[39.95,11.6824],[39.9697,11.6645],[39.9941,11.6812],[40.0153,11.6456],[39.9975,11.6122],[39.9925,11.5974],[39.9933,11.5838],[40.0065,11.5586],[40.024,11.5309],[40.0549,11.4877],[40.0609,11.4741],[40.0671,11.4429],[40.0663,11.4287],[40.0702,11.3737],[40.0672,11.3606],[40.065,11.3378],[40.0712,11.3256],[40.1026,11.3169],[40.1228,11.2961],[40.1456,11.2556],[40.1729,11.24],[40.2124,11.1089],[40.1938,11.0964],[40.1955,11.0682],[40.1932,11.0479],[40.1869,11.0253],[40.169,11.0016],[40.1441,10.9521],[40.1238,10.9376],[40.1329,10.9152],[40.1493,10.8958],[40.1805,10.8969],[40.1785,10.8843],[40.1759,10.8778],[40.17,10.8735],[40.167,10.8475],[40.1681,10.8421],[40.1671,10.834],[40.1641,10.8286],[40.1667,10.805],[40.122,10.7682],[40.1084,10.7638],[40.1026,10.755],[40.1025,10.7397],[40.1091,10.7239],[40.1285,10.6175],[40.1506,10.4704],[40.1529,10.4393],[40.1616,10.4353],[40.1636,10.4124],[40.1631,10.3748],[40.1591,10.3563],[40.1604,10.3008],[40.1575,10.2854],[40.1467,10.2772],[40.1556,10.2574],[40.1499,10.2333],[40.129,10.1735],[40.1371,10.145],[40.1581,10.0903],[40.1326,10.0711],[40.1072,10.0712],[40.069,10.0791],[40.024,10.0744],[39.9936,10.0769],[39.989,10.0883],[39.9802,10.0879],[39.9692,10.0849],[39.9482,10.0845],[39.9273,10.09],[39.9368,10.0622],[39.9434,10.0592],[39.9416,10.0431],[39.9227,10.0107],[39.9474,9.9934],[39.9924,9.9933],[40.0098,9.9912],[40.032,9.9945],[40.0432,9.991],[40.0589,9.9771],[40.0662,9.9663],[40.0673,9.9601],[40.0804,9.9484],[40.0888,9.9348],[40.0778,9.9055],[40.0694,9.9048],[40.0636,9.9024],[40.0584,9.8643],[40.0707,9.8574],[40.0527,9.8422],[40.0352,9.8428],[40.0278,9.8299],[40.0175,9.82],[40.011,9.8186],[40.0045,9.7952],[40.0076,9.7887],[40.0081,9.7818],[39.9934,9.7636],[39.9912,9.7567],[40.0018,9.7479],[40.0059,9.741],[40.0138,9.7376],[40.0094,9.7329],[39.9735,9.7292],[39.9547,9.7302],[39.9182,9.7418],[39.8758,9.7528],[39.8621,9.754],[39.8566,9.7526],[39.8498,9.7484],[39.8391,9.7236],[39.8485,9.7087],[39.8527,9.6987],[39.8499,9.6877],[39.8577,9.6552],[39.8616,9.6516],[39.8793,9.6242],[39.8838,9.6106],[39.8815,9.593],[39.8771,9.5766],[39.8476,9.5643],[39.8568,9.5565],[39.8573,9.5471],[39.8479,9.5252],[39.8471,9.5107],[39.8375,9.5019],[39.8478,9.4812],[39.8725,9.4593],[39.8731,9.4468],[39.8714,9.4416],[39.8744,9.4078],[39.8786,9.4004],[39.8729,9.3978],[39.8215,9.4174],[39.8072,9.4128],[39.7998,9.3997],[39.7852,9.3956],[39.7915,9.3698],[39.7498,9.3692],[39.7507,9.3609],[39.754,9.3547],[39.7702,9.3329],[39.7736,9.3243],[39.7891,9.3042],[39.8167,9.3077],[39.8339,9.3148],[39.8441,9.3142],[39.86,9.3071],[39.886,9.2694],[39.857,9.2701],[39.863,9.2423],[39.8732,9.2336],[39.873,9.2273],[39.8535,9.2108],[39.8478,9.2015],[39.8361,9.1883],[39.813,9.1711],[39.8162,9.1616],[39.8152,9.1542],[39.8174,9.1363],[39.8077,9.1354],[39.802,9.1261],[39.7971,9.1215],[39.7938,9.1127],[39.7802,9.1044],[39.7639,9.0951],[39.7425,9.0913],[39.7475,9.0631],[39.7462,9.0552],[39.7402,9.0395],[39.7412,9.023]]]]}},{"type":"Feature","properties":{"GID_1":"ETH.4_1","GID_0":"ETH","COUNTRY":"Ethiopia","NAME_1":"Benshangul-Gumaz","VARNAME_1":"BeneshangulGumu","NL_NAME_1":"NA","TYPE_1":"Kilil","ENGTYPE_1":"State","CC_1":"06","HASC_1":"ET.BE","ISO_1":"NA"},"geometry":{"type":"MultiPolygon","coordinates":[[[[34.8668,9.9023],[34.8977,9.8818],[34.8922,9.8646],[34.8771,9.8454],[34.8697,9.8207],[34.8545,9.8167],[34.8317,9.8031],[34.8073,9.7611],[34.7961,9.7362],[34.81,9.7022],[34.8109,9.6301],[34.7921,9.6033],[34.783,9.5533],[34.7351,9.5453],[34.6859,9.5637],[34.632,9.588],[34.5854,9.6304],[34.5485,9.6297],[34.5321,9.5906],[34.5232,9.5411],[34.4987,9.5142],[34.513,9.448],[34.4518,9.4491],[34.4663,9.3658],[34.4517,9.3087],[34.4524,9.2575],[34.4396,9.2156],[34.4017,9.1866],[34.3409,9.1688],[34.3933,9.1163],[34.4268,9.0718],[34.4583,9.0732],[34.4837,9.0471],[34.5037,9.0041],[34.4307,8.9674],[34.1447,8.9622],[34.1347,9.1718],[34.1221,9.2569],[34.117,9.3441],[34.1085,9.4085],[34.1007,9.5506],[34.1171,9.6058],[34.1319,9.6402],[34.1444,9.701],[34.1461,9.7181],[34.169,9.7814],[34.2034,9.8636],[34.2169,9.9025],[34.2183,9.9608],[34.226,10.0133],[34.2331,10.0475],[34.2596,10.0706],[34.2976,10.0864],[34.3336,10.1134],[34.3332,10.1419],[34.3462,10.1686],[34.3424,10.2015],[34.3514,10.2209],[34.3233,10.2935],[34.3049,10.3729],[34.2931,10.4063],[34.3115,10.447],[34.3264,10.4757],[34.3067,10.5076],[34.2798,10.5148],[34.2795,10.5319],[34.2931,10.5603],[34.2976,10.5857],[34.3451,10.6296],[34.3828,10.6776],[34.4067,10.7127],[34.4306,10.7621],[34.4516,10.792],[34.465,10.8211],[34.505,10.8445],[34.5317,10.8524],[34.5449,10.8678],[34.5543,10.8831],[34.583,10.8873],[34.5982,10.9008],[34.6098,10.8972],[34.6876,10.8243],[34.7284,10.7945],[34.7498,10.7701],[34.7654,10.7551],[34.7904,10.7555],[34.7906,10.7403],[34.7775,10.7098],[34.7852,10.7099],[34.8004,10.7215],[34.8575,10.7564],[34.8669,10.7755],[34.8672,10.8084],[34.8896,10.8219],[34.9272,10.856],[34.9577,10.8773],[34.9823,10.8985],[34.9566,10.957],[34.96,10.9913],[34.9707,11.0484],[34.9838,11.0984],[35.0003,11.1806],[34.9965,11.1986],[34.9846,11.2135],[34.9614,11.2359],[34.9297,11.2358],[34.9257,11.2433],[34.9371,11.251],[34.9483,11.2759],[34.9629,11.2853],[34.9898,11.3372],[35.0047,11.3615],[35.0242,11.3854],[35.0387,11.4157],[35.0664,11.4996],[35.078,11.5215],[35.0795,11.5932],[35.0765,11.6455],[35.0556,11.6919],[35.0466,11.7352],[35.0974,11.8145],[35.1572,11.8608],[35.2021,11.8907],[35.2571,11.9342],[35.2753,11.9043],[35.2844,11.8845],[35.2873,11.8701],[35.2877,11.8559],[35.2847,11.8465],[35.2881,11.8299],[35.2967,11.8195],[35.2975,11.8072],[35.2959,11.7992],[35.3033,11.8028],[35.3137,11.7922],[35.3257,11.7945],[35.335,11.782],[35.3374,11.773],[35.3638,11.753],[35.3947,11.7462],[35.4218,11.7294],[35.441,11.7299],[35.4616,11.7351],[35.4733,11.7362],[35.5169,11.718],[35.5346,11.7297],[35.5766,11.7674],[35.5899,11.773],[35.6235,11.7758],[35.6449,11.7814],[35.6617,11.7934],[35.6666,11.8259],[35.6832,11.8254],[35.6944,11.8313],[35.7055,11.8224],[35.7197,11.8291],[35.7368,11.8328],[35.7561,11.8313],[35.7628,11.8373],[35.7739,11.8336],[35.8037,11.838],[35.8148,11.8284],[35.823,11.8269],[35.8483,11.8402],[35.8602,11.8499],[35.8683,11.8596],[35.8744,11.8859],[35.8877,11.8908],[35.9113,11.9055],[35.9177,11.905],[35.9248,11.9126],[35.9365,11.9208],[35.9429,11.9366],[35.94,11.9544],[35.9332,11.96],[35.9353,11.9661],[35.9394,11.9702],[35.9658,11.9846],[35.9723,11.9703],[35.969,11.9584],[35.978,11.9605],[35.996,11.9269],[36.0212,11.9138],[36.0426,11.8951],[36.0338,11.8918],[36.0381,11.8855],[36.0506,11.883],[36.0451,11.8764],[36.0564,11.8743],[36.0491,11.866],[36.051,11.8569],[36.0545,11.8493],[36.0663,11.8516],[36.0843,11.8351],[36.0815,11.8244],[36.0951,11.8129],[36.1052,11.8159],[36.1172,11.7742],[36.1232,11.7344],[36.1166,11.7235],[36.1255,11.7192],[36.1184,11.7058],[36.1448,11.6856],[36.1571,11.6859],[36.165,11.6782],[36.1762,11.6842],[36.1857,11.69],[36.2008,11.7058],[36.2071,11.7214],[36.2316,11.7221],[36.2359,11.737],[36.261,11.7535],[36.2829,11.7727],[36.3088,11.8032],[36.3291,11.7967],[36.3413,11.7808],[36.3376,11.773],[36.3412,11.7677],[36.3387,11.761],[36.3404,11.7486],[36.3388,11.7435],[36.3396,11.7375],[36.3338,11.7232],[36.3345,11.7172],[36.3321,11.7041],[36.3476,11.6966],[36.3324,11.666],[36.3383,11.6509],[36.3484,11.6054],[36.3653,11.6003],[36.3752,11.6077],[36.3794,11.5961],[36.3914,11.5833],[36.3903,11.5713],[36.4034,11.546],[36.4145,11.5451],[36.4131,11.532],[36.434,11.5108],[36.4443,11.4928],[36.4384,11.4918],[36.4356,11.4867],[36.4251,11.4767],[36.4197,11.4673],[36.4095,11.4583],[36.4099,11.4139],[36.4481,11.4269],[36.4672,11.4286],[36.4715,11.4363],[36.4889,11.4401],[36.4978,11.4437],[36.5035,11.4581],[36.5122,11.4583],[36.5211,11.4445],[36.5299,11.4345],[36.5331,11.3941],[36.5411,11.3941],[36.5514,11.3866],[36.5639,11.3713],[36.5636,11.358],[36.5588,11.3543],[36.5387,11.3456],[36.5345,11.3353],[36.5475,11.3373],[36.5564,11.3295],[36.5624,11.3183],[36.5621,11.3118],[36.5569,11.3021],[36.5454,11.3048],[36.5373,11.3047],[36.5296,11.3025],[36.5148,11.2896],[36.505,11.285],[36.495,11.289],[36.4903,11.2791],[36.4832,11.2718],[36.4671,11.265],[36.4758,11.2447],[36.4708,11.2333],[36.4602,11.2264],[36.4676,11.2153],[36.4685,11.1972],[36.466,11.1864],[36.4682,11.1783],[36.4676,11.1554],[36.4756,11.157],[36.4833,11.1528],[36.4892,11.1462],[36.5029,11.1375],[36.5114,11.1374],[36.5304,11.1416],[36.5493,11.1378],[36.5528,11.1322],[36.5528,11.1271],[36.5559,11.1197],[36.5602,11.1133],[36.5666,11.1114],[36.5733,11.1124],[36.578,11.1105],[36.575,11.1007],[36.5673,11.1017],[36.5594,11.0998],[36.5549,11.0932],[36.534,11.098],[36.5326,11.1132],[36.5251,11.1127],[36.515,11.1048],[36.5007,11.0853],[36.4913,11.0759],[36.4897,11.0687],[36.4849,11.0663],[36.4783,11.0671],[36.4699,11.0552],[36.4512,11.0535],[36.4442,11.0504],[36.4362,11.039],[36.4273,11.0355],[36.4226,11.0314],[36.4177,11.0007],[36.3658,10.9457],[36.354,10.937],[36.3506,10.93],[36.3531,10.9212],[36.3471,10.9172],[36.3455,10.9107],[36.3316,10.8977],[36.33,10.8922],[36.3321,10.8874],[36.3276,10.8818],[36.3226,10.8787],[36.3091,10.8625],[36.3093,10.8546],[36.3138,10.8508],[36.3097,10.8358],[36.3101,10.8272],[36.3047,10.8199],[36.2949,10.815],[36.2995,10.81],[36.2921,10.8057],[36.2823,10.8039],[36.2828,10.796],[36.2885,10.7724],[36.2852,10.7446],[36.2938,10.7434],[36.3108,10.7473],[36.3135,10.7529],[36.3247,10.7632],[36.3253,10.7687],[36.3313,10.7703],[36.3416,10.7888],[36.3576,10.7896],[36.3772,10.7858],[36.3728,10.7728],[36.376,10.7653],[36.374,10.7584],[36.3627,10.7482],[36.3593,10.7416],[36.3526,10.74],[36.3313,10.7262],[36.3266,10.7138],[36.3176,10.7036],[36.3166,10.6972],[36.3217,10.6853],[36.318,10.6793],[36.3113,10.6788],[36.3125,10.6738],[36.3205,10.6674],[36.3242,10.6617],[36.3183,10.652],[36.3109,10.649],[36.3062,10.6444],[36.303,10.6379],[36.3076,10.6242],[36.2973,10.6203],[36.2916,10.62],[36.2863,10.6151],[36.2816,10.6046],[36.2837,10.5987],[36.2935,10.5971],[36.3059,10.5779],[36.302,10.5712],[36.302,10.554],[36.3082,10.5524],[36.3112,10.548],[36.3109,10.5421],[36.3182,10.528],[36.3261,10.5233],[36.3436,10.5209],[36.3552,10.5266],[36.3591,10.5303],[36.3637,10.5181],[36.3647,10.5062],[36.3715,10.5048],[36.3822,10.4896],[36.3909,10.468],[36.409,10.4553],[36.4169,10.4538],[36.4219,10.4563],[36.4353,10.4525],[36.4457,10.4557],[36.4495,10.4595],[36.4557,10.4746],[36.4627,10.4792],[36.4854,10.4828],[36.5186,10.4789],[36.5268,10.4829],[36.5372,10.4731],[36.5462,10.4569],[36.5433,10.4487],[36.5326,10.4311],[36.5237,10.41],[36.5204,10.4059],[36.5205,10.3996],[36.5229,10.3942],[36.5312,10.3821],[36.5325,10.376],[36.5392,10.365],[36.5485,10.3609],[36.5568,10.3627],[36.5729,10.3629],[36.5895,10.3689],[36.6055,10.3647],[36.6176,10.355],[36.637,10.3466],[36.6554,10.322],[36.6618,10.3165],[36.6683,10.3138],[36.6854,10.3176],[36.6887,10.3114],[36.6922,10.2963],[36.6597,10.277],[36.6106,10.2592],[36.5747,10.2642],[36.5758,10.2792],[36.5545,10.2851],[36.5493,10.2788],[36.5451,10.2693],[36.5224,10.2504],[36.5155,10.2399],[36.4909,10.2343],[36.4454,10.2458],[36.4162,10.2168],[36.3953,10.1871],[36.3694,10.1617],[36.3323,10.1384],[36.2719,10.1131],[36.2679,10.0885],[36.2589,10.0785],[36.2189,10.0532],[36.1846,10.0497],[36.1399,10.0097],[36.1206,9.9716],[36.1198,9.9613],[36.134,9.9159],[36.1522,9.8664],[36.1523,9.8489],[36.1282,9.8522],[36.1365,9.8074],[36.1053,9.7733],[36.1434,9.7578],[36.1591,9.7469],[36.1619,9.7305],[36.1775,9.7013],[36.1919,9.6879],[36.1926,9.6585],[36.2008,9.6149],[36.2291,9.5798],[36.2318,9.5703],[36.2663,9.5687],[36.301,9.5555],[36.336,9.512],[36.3551,9.4947],[36.3803,9.4805],[36.4006,9.511],[36.4612,9.5281],[36.4944,9.5094],[36.4987,9.4729],[36.5149,9.4441],[36.5073,9.4193],[36.4836,9.4052],[36.4752,9.3946],[36.4841,9.3679],[36.4614,9.3572],[36.3747,9.358],[36.3493,9.3449],[36.3338,9.3398],[36.3262,9.3308],[36.319,9.3059],[36.2955,9.3017],[36.2896,9.3215],[36.2751,9.3438],[36.2702,9.3284],[36.2532,9.3018],[36.2184,9.2971],[36.2148,9.3149],[36.2146,9.3324],[36.2343,9.347],[36.2059,9.3547],[36.1946,9.3263],[36.1949,9.289],[36.2263,9.2717],[36.2289,9.229],[36.2039,9.1573],[36.1719,9.1083],[36.1615,9.1054],[36.1846,9.072],[36.2076,9.0672],[36.2358,9.0509],[36.2465,9.041],[36.2259,9.031],[36.1768,9.0445],[36.1671,9.028],[36.1596,9.0207],[36.1314,9.0208],[36.1287,9.0511],[36.1086,9.08],[36.0946,9.065],[36.0842,9.0584],[36.0755,9.0626],[36.097,9.0324],[36.0865,9.0126],[36.0639,9.0199],[36.0422,9.015],[36.0424,9.0322],[36.0281,9.056],[36.034,9.1074],[36.0536,9.1194],[36.044,9.1951],[36.0316,9.2334],[35.9754,9.2429],[35.9493,9.2492],[35.9307,9.2672],[35.9179,9.2856],[35.9111,9.316],[35.8599,9.325],[35.8085,9.3089],[35.7972,9.3086],[35.774,9.3243],[35.7567,9.3236],[35.7506,9.3311],[35.7492,9.3486],[35.7552,9.3648],[35.7501,9.4031],[35.754,9.4165],[35.7659,9.4276],[35.7784,9.4307],[35.7773,9.4401],[35.765,9.4734],[35.7529,9.4817],[35.7319,9.4815],[35.7108,9.4868],[35.6865,9.5104],[35.6714,9.5172],[35.6475,9.5533],[35.6436,9.5946],[35.6505,9.613],[35.6534,9.6349],[35.6347,9.6515],[35.6248,9.6512],[35.5944,9.656],[35.5785,9.6655],[35.5611,9.692],[35.5537,9.6961],[35.5394,9.6976],[35.534,9.6964],[35.5333,9.6904],[35.5051,9.6887],[35.4684,9.6704],[35.4554,9.6722],[35.4108,9.7137],[35.3894,9.72],[35.3684,9.7193],[35.3651,9.7275],[35.3754,9.75],[35.383,9.759],[35.3788,9.7654],[35.4196,9.7851],[35.408,9.7945],[35.3869,9.8019],[35.3638,9.813],[35.3498,9.8661],[35.3247,9.8848],[35.311,9.9112],[35.2975,9.9225],[35.2785,9.9071],[35.2307,9.8933],[35.2229,9.9103],[35.2208,9.9254],[35.1596,9.9484],[35.0883,9.9505],[35.0808,9.939],[35.081,9.9219],[35.0485,9.9177],[35.0197,9.9288],[35.015,9.9952],[34.9882,9.9968],[34.943,9.9336],[34.9277,9.9353],[34.9044,9.9559],[34.8878,9.9082],[34.8668,9.9023]]]]}},{"type":"Feature","properties":{"GID_1":"ETH.5_1","GID_0":"ETH","COUNTRY":"Ethiopia","NAME_1":"DireDawa","VARNAME_1":"NA","NL_NAME_1":"NA","TYPE_1":"Astedader","ENGTYPE_1":"City","CC_1":"15","HASC_1":"ET.DD","ISO_1":"ET-DD"},"geometry":{"type":"MultiPolygon","coordinates":[[[[41.9358,9.6635],[41.9964,9.6312],[42.0084,9.6222],[42.0189,9.6179],[42.0308,9.6185],[42.1858,9.7736],[42.2134,9.7837],[42.251,9.7835],[42.2935,9.7575],[42.3398,9.7196],[42.3181,9.7057],[42.2859,9.6761],[42.2719,9.667],[42.2586,9.6516],[42.2408,9.6566],[42.2205,9.6562],[42.2005,9.6531],[42.1804,9.6443],[42.1423,9.6203],[42.1249,9.6145],[42.1278,9.5984],[42.1334,9.5825],[42.1461,9.5706],[42.1526,9.5564],[42.1389,9.5347],[42.1097,9.508],[42.0963,9.5013],[42.0811,9.4882],[42.0748,9.4737],[42.0676,9.4748],[42.0521,9.492],[42.0439,9.4983],[42.0317,9.5044],[42.0191,9.5082],[41.9954,9.5065],[41.9825,9.5085],[41.9387,9.4795],[41.9134,9.4725],[41.8597,9.488],[41.8387,9.4779],[41.8152,9.4767],[41.7925,9.4895],[41.773,9.4911],[41.7545,9.4846],[41.7346,9.4715],[41.728,9.489],[41.7491,9.6006],[41.7486,9.6364],[41.7738,9.6537],[41.791,9.649],[41.801,9.6424],[41.8087,9.6406],[41.8533,9.6737],[41.8732,9.6839],[41.9061,9.6793],[41.9358,9.6635]]]]}},{"type":"Feature","properties":{"GID_1":"ETH.6_1","GID_0":"ETH","COUNTRY":"Ethiopia","NAME_1":"GambelaPeoples","VARNAME_1":"Gambela","NL_NAME_1":"NA","TYPE_1":"Kilil","ENGTYPE_1":"State","CC_1":"12","HASC_1":"ET.GA","ISO_1":"NA"},"geometry":{"type":"MultiPolygon","coordinates":[[[[35.1785,6.3793],[35.1648,6.3828],[35.1434,6.3977],[35.1315,6.3955],[35.1189,6.3465],[35.1061,6.3189],[35.0834,6.3181],[35.0735,6.3074],[35.0383,6.3046],[35.0113,6.2803],[34.985,6.2988],[34.9879,6.3457],[34.9865,6.3864],[34.9983,6.3951],[35.0029,6.4024],[35.0036,6.4146],[35.0138,6.445],[35.0066,6.4643],[34.9842,6.4892],[34.9561,6.5038],[34.9545,6.5185],[34.9395,6.5465],[34.9202,6.5567],[34.9053,6.5713],[34.8846,6.577],[34.8888,6.5963],[34.8562,6.6078],[34.8445,6.5989],[34.8061,6.6],[34.7885,6.5836],[34.7721,6.5968],[34.7468,6.6246],[34.7303,6.6481],[34.7154,6.6642],[34.7078,6.6966],[34.6811,6.7023],[34.6498,6.7331],[34.629,6.7491],[34.6129,6.7327],[34.5611,6.7396],[34.5359,6.7527],[34.5339,6.8117],[34.5307,6.8427],[34.5201,6.8633],[34.4843,6.9043],[34.41,6.9523],[34.3833,6.9638],[34.3596,6.9636],[34.3226,6.9736],[34.2869,6.9968],[34.2556,7.0216],[34.2321,7.0155],[34.2155,7.0463],[34.1932,7.0549],[34.1924,7.1376],[34.1656,7.1565],[34.1449,7.1562],[34.1285,7.1752],[34.0991,7.1794],[34.0991,7.1857],[34.092,7.1965],[34.0765,7.2101],[34.0543,7.2205],[34.0439,7.2212],[34.034,7.2353],[34.0191,7.2494],[34.0118,7.2597],[34.0103,7.2697],[34.0269,7.266],[34.0328,7.2753],[34.0351,7.2938],[34.0314,7.3156],[34.0306,7.3365],[34.0332,7.354],[34.0288,7.3696],[34.0125,7.3925],[33.9981,7.4184],[33.9922,7.424],[33.9847,7.4362],[33.9577,7.4473],[33.9566,7.4632],[33.9452,7.468],[33.943,7.4812],[33.9435,7.4924],[33.9476,7.5023],[33.9265,7.512],[33.9036,7.5179],[33.8874,7.512],[33.8713,7.5179],[33.856,7.5417],[33.8404,7.5585],[33.8339,7.5681],[33.7931,7.6046],[33.7778,7.6038],[33.7693,7.6114],[33.7525,7.6165],[33.7369,7.6276],[33.733,7.6398],[33.7199,7.6514],[33.7123,7.6565],[33.6943,7.66],[33.6902,7.6692],[33.6817,7.6735],[33.6837,7.682],[33.6723,7.6922],[33.6644,7.6906],[33.6363,7.6917],[33.6302,7.7005],[33.6227,7.7078],[33.6125,7.7018],[33.5992,7.7056],[33.5859,7.697],[33.5802,7.6866],[33.5623,7.6937],[33.55,7.7017],[33.5404,7.7037],[33.5149,7.7317],[33.5028,7.7273],[33.5002,7.7349],[33.4906,7.7305],[33.4734,7.7439],[33.4643,7.7469],[33.4612,7.7411],[33.4478,7.7398],[33.4316,7.7514],[33.4242,7.748],[33.4166,7.7404],[33.4073,7.7346],[33.3905,7.7277],[33.3743,7.73],[33.3597,7.7196],[33.3514,7.7234],[33.3425,7.7113],[33.3202,7.7062],[33.3193,7.7121],[33.3153,7.7213],[33.3034,7.7253],[33.3037,7.7336],[33.2995,7.7398],[33.2923,7.7347],[33.295,7.7456],[33.2813,7.7415],[33.2476,7.7636],[33.2383,7.7734],[33.2244,7.7694],[33.2169,7.7711],[33.1995,7.7792],[33.1839,7.7838],[33.1654,7.7954],[33.1572,7.7971],[33.1561,7.7918],[33.1452,7.7899],[33.1376,7.7841],[33.1335,7.7879],[33.1231,7.7833],[33.115,7.7844],[33.1088,7.779],[33.1018,7.7803],[33.105,7.7873],[33.0953,7.796],[33.0884,7.8],[33.0846,7.7924],[33.0731,7.7911],[33.0622,7.786],[33.0565,7.7911],[33.0501,7.7873],[33.0452,7.8018],[33.0443,7.8117],[33.0368,7.8197],[33.0102,7.8579],[33.0015,7.8793],[33.0039,7.8851],[33.0137,7.8886],[33.0044,7.906],[33.0021,7.9158],[33.005,7.9264],[33.0021,7.9401],[33.0091,7.9485],[33.0284,7.9609],[33.0363,7.9743],[33.0305,7.9905],[33.0364,8.0049],[33.0463,8.0146],[33.0588,8.0142],[33.0732,8.0201],[33.0775,8.0247],[33.0808,8.0479],[33.0788,8.0538],[33.0867,8.0611],[33.0834,8.0699],[33.0857,8.0751],[33.1045,8.0755],[33.1114,8.0714],[33.1186,8.0628],[33.1164,8.087],[33.1168,8.1004],[33.12,8.1068],[33.1365,8.1123],[33.1587,8.1106],[33.1633,8.1141],[33.1664,8.123],[33.1728,8.1272],[33.1862,8.1236],[33.1894,8.1345],[33.184,8.1449],[33.1841,8.1602],[33.1769,8.1663],[33.1727,8.1881],[33.1671,8.1877],[33.1658,8.1946],[33.1752,8.2023],[33.1906,8.2107],[33.1967,8.218],[33.2026,8.2338],[33.1982,8.2476],[33.1893,8.249],[33.1802,8.2481],[33.1756,8.2545],[33.173,8.2632],[33.1758,8.2839],[33.17,8.296],[33.195,8.2979],[33.2017,8.306],[33.201,8.3127],[33.1932,8.3263],[33.192,8.3329],[33.2046,8.333],[33.2106,8.3349],[33.2148,8.3419],[33.2165,8.3553],[33.2002,8.3496],[33.1934,8.3512],[33.1891,8.3799],[33.1898,8.3865],[33.195,8.3918],[33.1898,8.4018],[33.1927,8.4069],[33.208,8.4052],[33.2165,8.408],[33.2169,8.4147],[33.2148,8.427],[33.2172,8.4324],[33.2341,8.4228],[33.2468,8.4354],[33.2486,8.444],[33.2745,8.4526],[33.2889,8.4365],[33.2957,8.4367],[33.2996,8.4417],[33.3052,8.4554],[33.3139,8.4595],[33.3205,8.449],[33.3348,8.4433],[33.3495,8.445],[33.3608,8.4401],[33.3669,8.441],[33.3725,8.4309],[33.3806,8.4317],[33.3872,8.4251],[33.3954,8.4235],[33.4116,8.4391],[33.4238,8.4464],[33.4375,8.4397],[33.4479,8.4376],[33.4606,8.4493],[33.4748,8.4524],[33.4827,8.4567],[33.4891,8.469],[33.4981,8.4709],[33.511,8.471],[33.5195,8.4676],[33.5248,8.4674],[33.5336,8.4688],[33.5417,8.4676],[33.5564,8.4692],[33.5619,8.4682],[33.5687,8.4537],[33.5759,8.4473],[33.5974,8.4464],[33.6103,8.4615],[33.62,8.4686],[33.6491,8.4578],[33.6801,8.4406],[33.6779,8.4298],[33.683,8.4059],[33.6887,8.3994],[33.692,8.3916],[33.6943,8.3794],[33.7006,8.3724],[33.7097,8.3705],[33.7165,8.3655],[33.7255,8.3639],[33.7377,8.3655],[33.7494,8.3749],[33.7553,8.3716],[33.7725,8.3696],[33.7994,8.3941],[33.8076,8.3945],[33.8137,8.3998],[33.8207,8.4063],[33.8272,8.4202],[33.8374,8.4259],[33.8403,8.4308],[33.8521,8.4315],[33.8652,8.4353],[33.8772,8.4364],[33.875,8.4455],[33.8815,8.4533],[33.8815,8.4602],[33.8889,8.4623],[33.893,8.4732],[33.8983,8.4806],[33.9253,8.4869],[33.9355,8.4949],[33.9461,8.4977],[33.9563,8.4924],[33.9722,8.4984],[33.9853,8.4887],[33.9914,8.4879],[34.0005,8.4929],[34.015,8.4869],[34.0204,8.4887],[34.0274,8.4965],[34.0331,8.5104],[34.0613,8.5312],[34.0705,8.5421],[34.0813,8.5488],[34.0964,8.55],[34.1212,8.5751],[34.1421,8.6109],[34.1416,8.652],[34.1896,8.6516],[34.2235,8.6698],[34.2352,8.6861],[34.2557,8.7026],[34.2794,8.7088],[34.3124,8.6821],[34.3455,8.6001],[34.3582,8.522],[34.3574,8.4999],[34.3441,8.4692],[34.3349,8.4386],[34.3152,8.4068],[34.3133,8.3899],[34.3292,8.387],[34.3473,8.3766],[34.4364,8.4218],[34.4712,8.4476],[34.5227,8.4755],[34.5565,8.4551],[34.5743,8.4035],[34.6303,8.402],[34.6674,8.395],[34.7288,8.39],[34.7676,8.3634],[34.7853,8.3552],[34.7951,8.3269],[34.7858,8.3036],[34.8264,8.2619],[34.8551,8.2506],[34.8826,8.2509],[34.9648,8.2473],[35.0183,8.2196],[35.0732,8.2202],[35.1189,8.2006],[35.1381,8.1818],[35.1577,8.1367],[35.1433,8.1429],[35.1039,8.1151],[35.0891,8.1139],[35.1179,8.0826],[35.1407,8.0217],[35.141,7.989],[35.1086,7.9571],[35.0483,7.9544],[35.0085,7.9235],[35.0131,7.8825],[35.0006,7.8623],[34.9507,7.8903],[34.9443,7.8794],[34.9323,7.828],[34.9371,7.7648],[34.932,7.7282],[34.9955,7.748],[35.0771,7.731],[35.116,7.6451],[35.1156,7.6308],[35.1457,7.6302],[35.1663,7.6149],[35.1647,7.5804],[35.1701,7.5551],[35.1719,7.5328],[35.1462,7.5195],[35.1381,7.5121],[35.1268,7.4956],[35.1207,7.4835],[35.1224,7.4786],[35.1614,7.4714],[35.1893,7.4556],[35.2095,7.4719],[35.2439,7.4737],[35.2537,7.4784],[35.2623,7.4802],[35.2726,7.4715],[35.3096,7.4792],[35.3201,7.463],[35.3289,7.4616],[35.3453,7.4529],[35.3558,7.4367],[35.3736,7.428],[35.3678,7.4146],[35.3923,7.3962],[35.3875,7.3507],[35.3828,7.3343],[35.3749,7.29],[35.3703,7.2774],[35.3534,7.2624],[35.3458,7.239],[35.3729,7.231],[35.3401,7.1871],[35.3344,7.1883],[35.334,7.1799],[35.353,7.1539],[35.3687,7.1442],[35.3804,7.1228],[35.3718,7.117],[35.3545,7.1185],[35.3308,7.1271],[35.3136,7.1153],[35.2999,7.1158],[35.2799,7.1294],[35.2646,7.1362],[35.2345,7.1379],[35.2184,7.108],[35.2046,7.0996],[35.1143,7.1021],[35.0837,7.1248],[35.0539,7.1843],[35.0208,7.1858],[35.0109,7.1947],[34.9779,7.2133],[34.9702,7.234],[34.9656,7.2151],[34.9424,7.1929],[34.8981,7.1848],[34.8906,7.1593],[34.8927,7.0915],[34.8771,7.0698],[34.8843,7.0308],[34.9021,7.0309],[34.9113,6.9882],[34.9457,6.9441],[34.974,6.9252],[34.9979,6.8929],[34.9924,6.864],[34.969,6.8593],[34.9456,6.8265],[34.9337,6.7963],[34.9854,6.7982],[35.0429,6.8105],[35.0799,6.8108],[35.1468,6.7611],[35.1796,6.7274],[35.1782,6.7096],[35.1977,6.6802],[35.1875,6.6565],[35.1862,6.6269],[35.1953,6.5974],[35.1868,6.5575],[35.1856,6.4897],[35.1739,6.4665],[35.1866,6.4443],[35.1995,6.4109],[35.1785,6.3793]]]]}},{"type":"Feature","properties":{"GID_1":"ETH.7_1","GID_0":"ETH","COUNTRY":"Ethiopia","NAME_1":"HarariPeople","VARNAME_1":"Hareri","NL_NAME_1":"NA","TYPE_1":"Kilil","ENGTYPE_1":"State","CC_1":"13","HASC_1":"ET.HA","ISO_1":"NA"},"geometry":{"type":"MultiPolygon","coordinates":[[[[42.2703,9.3617],[42.2585,9.3344],[42.265,9.3213],[42.266,9.3098],[42.2503,9.2855],[42.2493,9.27],[42.2563,9.2526],[42.2687,9.2296],[42.272,9.2157],[42.2647,9.1979],[42.2594,9.1923],[42.246,9.187],[42.2337,9.1859],[42.2208,9.1964],[42.2085,9.2119],[42.1975,9.2199],[42.1821,9.2169],[42.1657,9.2104],[42.1486,9.2063],[42.1273,9.2266],[42.1124,9.2307],[42.0737,9.221],[42.0613,9.2265],[42.0589,9.2494],[42.0605,9.2659],[42.0705,9.3039],[42.0853,9.3291],[42.1142,9.3725],[42.1292,9.3887],[42.1466,9.3875],[42.1686,9.3628],[42.1874,9.3617],[42.2219,9.3795],[42.2381,9.3849],[42.253,9.3838],[42.2703,9.3617]]]]}},{"type":"Feature","properties":{"GID_1":"ETH.8_1","GID_0":"ETH","COUNTRY":"Ethiopia","NAME_1":"Oromia","VARNAME_1":"Oromiya","NL_NAME_1":"NA","TYPE_1":"Kilil","ENGTYPE_1":"State","CC_1":"04","HASC_1":"ET.OR","ISO_1":"NA"},"geometry":{"type":"MultiPolygon","coordinates":[[[[39.3996,3.7957],[39.2847,3.6231],[39.2205,3.6025],[39.0929,3.534],[39.0808,3.5386],[39.0657,3.5279],[39.0468,3.5215],[39.0314,3.5245],[39.0242,3.5219],[39.0153,3.5128],[39.0017,3.5209],[38.9832,3.5203],[38.9627,3.5282],[38.9469,3.5129],[38.9076,3.5097],[38.8959,3.5115],[38.8569,3.5259],[38.8363,3.5318],[38.8289,3.5322],[38.7183,3.5668],[38.7124,3.5691],[38.7058,3.5825],[38.6906,3.6036],[38.6835,3.6173],[38.6779,3.6215],[38.6704,3.6198],[38.6692,3.6147],[38.6706,3.6092],[38.6686,3.6038],[38.6624,3.5949],[38.6552,3.594],[38.6104,3.6038],[38.6097,3.6111],[38.5961,3.6045],[38.5724,3.6034],[38.5682,3.6068],[38.5532,3.6126],[38.5513,3.6175],[38.552,3.6235],[38.5439,3.639],[38.5328,3.6527],[38.5136,3.647],[38.5169,3.6398],[38.5174,3.6263],[38.4762,3.6109],[38.4488,3.6265],[38.4372,3.6013],[38.3417,3.6062],[38.3224,3.6092],[38.2776,3.6119],[38.2534,3.612],[38.1885,3.618],[38.1438,3.6093],[38.133,3.6092],[38.1262,3.6068],[38.1203,3.6085],[38.0968,3.6314],[38.0508,3.6675],[38.0449,3.6695],[38.0139,3.7022],[38.013,3.7086],[38.0053,3.7153],[38.0025,3.7222],[37.9959,3.7263],[37.9852,3.7291],[37.9662,3.7385],[37.9294,3.7591],[37.9166,3.7685],[37.9002,3.7777],[37.8337,3.8233],[37.7827,3.8556],[37.74,3.8869],[37.7099,3.9049],[37.6697,3.933],[37.6371,3.9531],[37.631,3.9625],[37.5972,3.985],[37.5854,3.9906],[37.577,3.9986],[37.5537,4.0123],[37.5305,4.0313],[37.516,4.0394],[37.5097,4.0466],[37.4011,4.1182],[37.3536,4.1468],[37.3295,4.1643],[37.2481,4.2175],[37.1904,4.2542],[37.1614,4.2702],[37.1237,4.2828],[37.1042,4.2988],[37.0848,4.3255],[37.0585,4.343],[37.0394,4.3617],[36.997,4.3789],[36.9854,4.3853],[36.9814,4.3892],[36.9697,4.3945],[36.9561,4.3967],[36.9497,4.4042],[36.8955,4.4249],[36.8665,4.4318],[36.8388,4.444],[36.7126,4.4392],[36.6575,4.5804],[36.6808,4.6043],[36.6464,4.7108],[36.8285,4.7092],[36.8547,4.7361],[36.8635,4.793],[36.8609,4.9351],[36.8648,4.9442],[36.8607,4.9788],[36.8822,5.075],[36.893,5.1098],[36.9212,5.1451],[36.949,5.1947],[36.9831,5.1924],[37.0033,5.1991],[37.0821,5.1864],[37.1122,5.1863],[37.1818,5.1939],[37.1972,5.2103],[37.2169,5.2127],[37.2381,5.1994],[37.2924,5.1944],[37.3172,5.1735],[37.3407,5.1596],[37.3672,5.1551],[37.4172,5.1666],[37.4656,5.1932],[37.4913,5.2029],[37.5179,5.2205],[37.5514,5.2339],[37.5779,5.2424],[37.5798,5.2477],[37.6297,5.266],[37.6373,5.2832],[37.6467,5.2993],[37.6742,5.3076],[37.7009,5.3059],[37.7289,5.2922],[37.7471,5.2766],[37.7728,5.2834],[37.7926,5.2742],[37.8101,5.2683],[37.8271,5.2497],[37.8527,5.2346],[37.8851,5.2343],[37.9008,5.2449],[37.9044,5.2794],[37.9048,5.304],[37.8964,5.3499],[37.9012,5.3732],[37.9193,5.396],[37.9352,5.423],[37.9402,5.4499],[37.9468,5.4743],[37.9493,5.5076],[37.9478,5.5377],[37.9415,5.5684],[37.9411,5.5851],[37.9302,5.6167],[37.9435,5.6395],[37.9775,5.6494],[38.008,5.6502],[38.0241,5.6601],[38.0408,5.6736],[38.0752,5.6889],[38.0871,5.7213],[38.0889,5.7456],[38.0721,5.7626],[38.0542,5.7641],[38.0392,5.7724],[38.0199,5.79],[38.0123,5.8043],[38.0071,5.8493],[37.9825,5.8878],[37.979,5.9076],[37.9776,5.9278],[37.9686,5.956],[37.9527,5.9633],[37.9228,5.9601],[37.904,5.9605],[37.895,5.9745],[37.8805,5.985],[37.8655,5.9866],[37.8565,5.999],[37.843,6.0109],[37.8271,6.01],[37.8133,5.9978],[37.8037,5.9932],[37.7915,5.9959],[37.7832,6.0106],[37.7898,6.0494],[37.7851,6.0726],[37.7777,6.0981],[37.7757,6.1136],[37.7747,6.1239],[37.7781,6.1496],[37.7905,6.1725],[37.8098,6.1961],[37.8256,6.2207],[37.8403,6.2483],[37.848,6.2788],[37.8522,6.3048],[37.8503,6.3268],[37.8482,6.3317],[37.8401,6.3787],[37.8196,6.3934],[37.8078,6.4102],[37.7975,6.4292],[37.7963,6.4495],[37.7999,6.4782],[37.8078,6.5007],[37.8146,6.5106],[37.8425,6.5417],[37.8715,6.5822],[37.8928,6.5961],[37.9126,6.5907],[37.9185,6.5744],[37.9327,6.5572],[37.9527,6.5496],[37.9688,6.549],[37.9834,6.5569],[37.9969,6.5756],[38.0159,6.5756],[38.0335,6.5615],[38.0516,6.5347],[38.0907,6.5261],[38.1011,6.5127],[38.1145,6.4996],[38.1393,6.506],[38.1497,6.4966],[38.1435,6.4582],[38.1552,6.4393],[38.1706,6.4498],[38.2155,6.4635],[38.2215,6.4611],[38.2456,6.4682],[38.2601,6.4522],[38.2829,6.4375],[38.2966,6.4157],[38.2928,6.3959],[38.2932,6.372],[38.2882,6.3598],[38.2725,6.3479],[38.2486,6.3363],[38.2314,6.3311],[38.2139,6.3302],[38.1976,6.319],[38.1884,6.3043],[38.1818,6.2843],[38.1737,6.2668],[38.1719,6.2553],[38.1791,6.2383],[38.1933,6.2262],[38.1979,6.2064],[38.1874,6.1822],[38.171,6.1669],[38.1584,6.1595],[38.1414,6.1545],[38.1251,6.1551],[38.117,6.1671],[38.1023,6.1804],[38.0867,6.161],[38.0799,6.117],[38.0986,6.0871],[38.1001,6.0773],[38.105,6.066],[38.1165,6.0502],[38.1216,6.0167],[38.1388,6.0103],[38.1503,6.0004],[38.1593,5.985],[38.1702,5.957],[38.181,5.9417],[38.2037,5.935],[38.2118,5.9167],[38.2148,5.8932],[38.2089,5.8791],[38.1997,5.8648],[38.1984,5.8495],[38.208,5.8402],[38.2234,5.8386],[38.2392,5.8444],[38.2545,5.8585],[38.2704,5.8685],[38.3037,5.8614],[38.3253,5.8688],[38.3581,5.9021],[38.3809,5.904],[38.3961,5.9201],[38.3884,5.933],[38.3748,5.943],[38.3383,5.9556],[38.3275,5.9554],[38.319,5.9751],[38.3045,5.98],[38.2931,5.9733],[38.2823,5.9707],[38.2717,5.9866],[38.2792,6.0063],[38.3139,6.0278],[38.3199,6.0474],[38.3515,6.0962],[38.3625,6.1202],[38.3653,6.1428],[38.377,6.1645],[38.3942,6.1818],[38.4347,6.1988],[38.439,6.2169],[38.433,6.2655],[38.4254,6.2901],[38.4275,6.3002],[38.4249,6.3066],[38.4218,6.3482],[38.4238,6.3656],[38.4276,6.3859],[38.441,6.4054],[38.4533,6.4168],[38.4753,6.4304],[38.5038,6.4363],[38.5376,6.4368],[38.5665,6.4405],[38.5833,6.437],[38.6063,6.4228],[38.6267,6.417],[38.645,6.4232],[38.6615,6.4191],[38.672,6.409],[38.6906,6.4062],[38.7072,6.3925],[38.7387,6.409],[38.758,6.4091],[38.7715,6.3998],[38.8121,6.3559],[38.832,6.3432],[38.8525,6.3203],[38.8741,6.3008],[38.8856,6.2848],[38.8977,6.2586],[38.9209,6.2286],[38.9365,6.2003],[38.9501,6.1804],[38.9606,6.1593],[38.9881,6.1471],[39.0345,6.1374],[39.0556,6.1459],[39.0797,6.153],[39.1029,6.1573],[39.1319,6.1588],[39.1304,6.166],[39.1132,6.1766],[39.1036,6.2022],[39.0997,6.2185],[39.086,6.252],[39.0909,6.2708],[39.1094,6.2873],[39.1195,6.299],[39.1257,6.3219],[39.1274,6.3444],[39.1212,6.3806],[39.1075,6.4377],[39.1,6.4556],[39.0954,6.4721],[39.0966,6.5216],[39.0862,6.5452],[39.0698,6.5533],[39.0526,6.557],[39.0484,6.5698],[39.0529,6.584],[39.0645,6.5988],[39.0593,6.6088],[39.0322,6.6118],[38.9596,6.6009],[38.9417,6.6103],[38.9445,6.6303],[38.9494,6.6438],[38.9344,6.6556],[38.9179,6.6592],[38.9018,6.6657],[38.8551,6.6687],[38.8377,6.6749],[38.8335,6.6917],[38.8179,6.7036],[38.8099,6.7013],[38.7793,6.7002],[38.7542,6.697],[38.7423,6.7009],[38.7274,6.712],[38.7209,6.7301],[38.7056,6.742],[38.6885,6.7444],[38.6784,6.749],[38.672,6.7623],[38.6582,6.7696],[38.6435,6.7687],[38.6357,6.7717],[38.6364,6.7997],[38.6399,6.8127],[38.6676,6.8323],[38.6983,6.8486],[38.7141,6.8606],[38.6998,6.9033],[38.7046,6.9306],[38.7012,6.9451],[38.6948,6.9575],[38.7005,6.9686],[38.7112,6.9738],[38.7144,6.9914],[38.7105,7.013],[38.6977,7.0138],[38.6894,7.0009],[38.6774,7.0054],[38.6744,7.0165],[38.6781,7.0288],[38.6845,7.034],[38.6809,7.0484],[38.668,7.0599],[38.6535,7.0617],[38.637,7.0661],[38.6462,7.0955],[38.6303,7.1108],[38.6115,7.1242],[38.5836,7.1263],[38.5664,7.1123],[38.5461,7.0909],[38.5281,7.091],[38.5051,7.0878],[38.48,7.0904],[38.4639,7.0998],[38.46,7.1182],[38.4425,7.1268],[38.4208,7.1225],[38.4006,7.1215],[38.3781,7.1298],[38.3569,7.1459],[38.3422,7.1645],[38.3219,7.1617],[38.3134,7.1471],[38.3053,7.1216],[38.2892,7.1071],[38.2544,7.0599],[38.2379,7.0201],[38.2164,7.0144],[38.1938,7.0123],[38.1701,7.0009],[38.1466,6.9775],[38.1293,6.9738],[38.1171,6.9809],[38.1089,6.9996],[38.1019,7.0108],[38.0879,7.0229],[38.0734,7.0296],[38.0642,7.0434],[38.0614,7.0722],[38.0665,7.0877],[38.0695,7.1224],[38.0764,7.1541],[38.078,7.1803],[38.087,7.1949],[38.1043,7.2109],[38.144,7.2322],[38.1811,7.2579],[38.1986,7.2615],[38.2058,7.2655],[38.22,7.2755],[38.2336,7.2879],[38.2652,7.3067],[38.2757,7.3189],[38.2815,7.3387],[38.2772,7.3612],[38.2794,7.3806],[38.2925,7.3914],[38.3089,7.4015],[38.3189,7.4142],[38.3252,7.4339],[38.3282,7.4564],[38.3272,7.4617],[38.3412,7.4786],[38.3917,7.5019],[38.4139,7.5042],[38.4268,7.5147],[38.4295,7.5339],[38.4257,7.5539],[38.4189,7.5695],[38.401,7.5787],[38.4008,7.5953],[38.4203,7.6243],[38.4182,7.6425],[38.4109,7.6622],[38.4124,7.6816],[38.4258,7.6968],[38.4387,7.7189],[38.4448,7.7595],[38.4924,7.7954],[38.5,7.8112],[38.5035,7.831],[38.5129,7.8489],[38.5495,7.8709],[38.5631,7.8852],[38.5666,7.9054],[38.5758,7.9243],[38.5865,7.9383],[38.5887,7.9611],[38.5974,7.9906],[38.6122,8.0068],[38.61,8.0116],[38.6245,8.0262],[38.6277,8.0336],[38.6127,8.0433],[38.6161,8.0567],[38.6219,8.0684],[38.5934,8.0909],[38.5839,8.1081],[38.5885,8.1272],[38.5873,8.1562],[38.5815,8.1719],[38.568,8.1939],[38.5426,8.2258],[38.5421,8.2461],[38.5493,8.2627],[38.5607,8.2661],[38.5935,8.2602],[38.6007,8.2496],[38.6035,8.2229],[38.6351,8.1323],[38.6541,8.1137],[38.6666,8.0956],[38.6728,8.0899],[38.6793,8.0958],[38.6845,8.1225],[38.6786,8.1712],[38.6822,8.1904],[38.6932,8.2034],[38.716,8.2194],[38.7159,8.2312],[38.7021,8.2445],[38.6621,8.2708],[38.651,8.2851],[38.666,8.327],[38.6672,8.3505],[38.6616,8.376],[38.6545,8.3946],[38.6396,8.4121],[38.6168,8.4311],[38.6043,8.4316],[38.5909,8.426],[38.5842,8.4327],[38.5758,8.4449],[38.5657,8.4483],[38.5268,8.4576],[38.5015,8.444],[38.4779,8.4474],[38.4683,8.435],[38.4616,8.3998],[38.4517,8.385],[38.4407,8.3353],[38.4325,8.3122],[38.4302,8.2988],[38.4216,8.289],[38.4009,8.2795],[38.3824,8.2735],[38.3755,8.2659],[38.3473,8.2542],[38.3332,8.2586],[38.3219,8.2723],[38.307,8.2997],[38.3079,8.3299],[38.3122,8.3524],[38.3115,8.3699],[38.3008,8.3764],[38.2893,8.3807],[38.282,8.3996],[38.2663,8.4066],[38.2383,8.4093],[38.2175,8.4088],[38.18,8.3929],[38.1642,8.4081],[38.139,8.4094],[38.1225,8.4066],[38.11,8.3904],[38.103,8.389],[38.0865,8.3901],[38.0771,8.3806],[38.0667,8.376],[38.0389,8.3892],[38.028,8.3903],[38.0082,8.3725],[37.9882,8.3595],[37.9484,8.3674],[37.928,8.3782],[37.91,8.3705],[37.8876,8.3499],[37.8629,8.3357],[37.8391,8.3321],[37.8163,8.3318],[37.7966,8.3347],[37.779,8.3397],[37.7655,8.3471],[37.748,8.3518],[37.717,8.3341],[37.7045,8.337],[37.6922,8.3536],[37.6787,8.3777],[37.6661,8.3835],[37.612,8.3541],[37.598,8.3653],[37.5761,8.4141],[37.558,8.4255],[37.5349,8.4236],[37.5122,8.417],[37.4986,8.4036],[37.4714,8.3507],[37.4662,8.3313],[37.4626,8.3059],[37.4641,8.2824],[37.472,8.2661],[37.4882,8.2524],[37.5173,8.2364],[37.5735,8.2249],[37.6217,8.209],[37.6239,8.2],[37.617,8.1772],[37.6058,8.1504],[37.5954,8.1117],[37.5921,8.0931],[37.5918,8.074],[37.6016,8.0107],[37.6011,7.9741],[37.6028,7.9649],[37.5728,7.9522],[37.5575,7.9483],[37.5494,7.9493],[37.5393,7.9539],[37.5328,7.9596],[37.5217,7.9771],[37.5184,7.9919],[37.514,7.9997],[37.5017,8.0118],[37.4908,8.0171],[37.4776,8.0142],[37.4596,8.0077],[37.4167,8.0012],[37.4094,7.9983],[37.4041,7.9936],[37.3918,7.9929],[37.3877,7.9744],[37.3898,7.962],[37.399,7.954],[37.4166,7.9436],[37.4289,7.9307],[37.4367,7.9185],[37.4344,7.8981],[37.4118,7.8539],[37.4048,7.8273],[37.4,7.7411],[37.4012,7.6827],[37.407,7.6576],[37.4198,7.6338],[37.4354,7.5841],[37.4451,7.5643],[37.4387,7.5461],[37.4072,7.4922],[37.3903,7.4024],[37.3797,7.38],[37.3566,7.3609],[37.3312,7.3497],[37.3312,7.3434],[37.2876,7.3344],[37.2623,7.3254],[37.2378,7.3121],[37.2116,7.2927],[37.1828,7.2649],[37.1542,7.2407],[37.1286,7.2284],[37.1048,7.2245],[37.0681,7.2352],[37.0395,7.24],[37.0033,7.2344],[36.9646,7.2247],[36.9658,7.2419],[36.9555,7.2605],[36.8792,7.3297],[36.8409,7.326],[36.7911,7.2523],[36.7625,7.2659],[36.7199,7.2985],[36.6941,7.3131],[36.6726,7.328],[36.6517,7.345],[36.6381,7.3712],[36.633,7.3779],[36.6228,7.3792],[36.606,7.3684],[36.5983,7.369],[36.4839,7.416],[36.4702,7.4154],[36.4532,7.4174],[36.4063,7.4085],[36.3746,7.4156],[36.3487,7.4454],[36.3018,7.4499],[36.2795,7.4633],[36.2247,7.4844],[36.2006,7.5036],[36.1809,7.5236],[36.1566,7.5426],[36.1276,7.5556],[36.0869,7.5539],[36.0622,7.5575],[36.0451,7.5655],[36.0353,7.5726],[36.0325,7.5915],[36.0471,7.6343],[36.0519,7.6539],[36.0419,7.6744],[36.0206,7.692],[35.9972,7.7451],[35.9864,7.7547],[35.9416,7.7739],[35.9226,7.7867],[35.8978,7.8069],[35.8751,7.8218],[35.86,7.8293],[35.8486,7.839],[35.8511,7.848],[35.8591,7.8601],[35.8742,7.8758],[35.8869,7.8925],[35.9024,7.9262],[35.9051,7.946],[35.8988,7.9711],[35.888,8.0005],[35.8727,8.0588],[35.8609,8.0772],[35.8163,8.0824],[35.7981,8.0791],[35.7658,8.0812],[35.7533,8.0678],[35.744,8.0509],[35.728,8.0396],[35.7229,8.0225],[35.7385,7.9888],[35.7674,7.9691],[35.7714,7.9629],[35.7825,7.954],[35.7953,7.948],[35.7999,7.9407],[35.7997,7.9326],[35.7761,7.8992],[35.7621,7.8826],[35.7395,7.8666],[35.7164,7.8555],[35.7035,7.8591],[35.6937,7.8644],[35.6764,7.8535],[35.667,7.8449],[35.6183,7.8147],[35.6062,7.8096],[35.5896,7.8086],[35.5702,7.8129],[35.5546,7.8202],[35.5444,7.831],[35.5362,7.8494],[35.5305,7.88],[35.5207,7.8956],[35.5122,7.8923],[35.5048,7.8847],[35.4972,7.8803],[35.4902,7.8826],[35.4743,7.8735],[35.4597,7.8725],[35.4335,7.8828],[35.4287,7.8808],[35.4184,7.8641],[35.4095,7.8434],[35.4006,7.8296],[35.3891,7.827],[35.372,7.8325],[35.3581,7.843],[35.3499,7.8349],[35.342,7.8214],[35.3409,7.7766],[35.3249,7.7653],[35.3108,7.761],[35.293,7.7519],[35.2899,7.7472],[35.2756,7.746],[35.2479,7.7265],[35.2227,7.7031],[35.2202,7.6802],[35.2203,7.6626],[35.2123,7.6515],[35.1729,7.6542],[35.116,7.6451],[35.0771,7.731],[34.9955,7.748],[34.932,7.7282],[34.9371,7.7648],[34.9323,7.828],[34.9443,7.8794],[34.9507,7.8903],[35.0006,7.8623],[35.0131,7.8825],[35.0085,7.9235],[35.0483,7.9544],[35.1086,7.9571],[35.141,7.989],[35.1407,8.0217],[35.1179,8.0826],[35.0891,8.1139],[35.1039,8.1151],[35.1433,8.1429],[35.1577,8.1367],[35.1381,8.1818],[35.1189,8.2006],[35.0732,8.2202],[35.0183,8.2196],[34.9648,8.2473],[34.8826,8.2509],[34.8551,8.2506],[34.8264,8.2619],[34.7858,8.3036],[34.7951,8.3269],[34.7853,8.3552],[34.7676,8.3634],[34.7288,8.39],[34.6674,8.395],[34.6303,8.402],[34.5743,8.4035],[34.5565,8.4551],[34.5227,8.4755],[34.4712,8.4476],[34.4364,8.4218],[34.3473,8.3766],[34.3292,8.387],[34.3133,8.3899],[34.3152,8.4068],[34.3349,8.4386],[34.3441,8.4692],[34.3574,8.4999],[34.3582,8.522],[34.3455,8.6001],[34.3124,8.6821],[34.2794,8.7088],[34.2557,8.7026],[34.2352,8.6861],[34.2235,8.6698],[34.1896,8.6516],[34.1416,8.652],[34.1445,8.6698],[34.1401,8.723],[34.1416,8.736],[34.1395,8.7711],[34.1415,8.8098],[34.1406,8.911],[34.1447,8.9622],[34.4307,8.9674],[34.5037,9.0041],[34.4837,9.0471],[34.4583,9.0732],[34.4268,9.0718],[34.3933,9.1163],[34.3409,9.1688],[34.4017,9.1866],[34.4396,9.2156],[34.4524,9.2575],[34.4517,9.3087],[34.4663,9.3658],[34.4518,9.4491],[34.513,9.448],[34.4987,9.5142],[34.5232,9.5411],[34.5321,9.5906],[34.5485,9.6297],[34.5854,9.6304],[34.632,9.588],[34.6859,9.5637],[34.7351,9.5453],[34.783,9.5533],[34.7921,9.6033],[34.8109,9.6301],[34.81,9.7022],[34.7961,9.7362],[34.8073,9.7611],[34.8317,9.8031],[34.8545,9.8167],[34.8697,9.8207],[34.8771,9.8454],[34.8922,9.8646],[34.8977,9.8818],[34.8668,9.9023],[34.8878,9.9082],[34.9044,9.9559],[34.9277,9.9353],[34.943,9.9336],[34.9882,9.9968],[35.015,9.9952],[35.0197,9.9288],[35.0485,9.9177],[35.081,9.9219],[35.0808,9.939],[35.0883,9.9505],[35.1596,9.9484],[35.2208,9.9254],[35.2229,9.9103],[35.2307,9.8933],[35.2785,9.9071],[35.2975,9.9225],[35.311,9.9112],[35.3247,9.8848],[35.3498,9.8661],[35.3638,9.813],[35.3869,9.8019],[35.408,9.7945],[35.4196,9.7851],[35.3788,9.7654],[35.383,9.759],[35.3754,9.75],[35.3651,9.7275],[35.3684,9.7193],[35.3894,9.72],[35.4108,9.7137],[35.4554,9.6722],[35.4684,9.6704],[35.5051,9.6887],[35.5333,9.6904],[35.534,9.6964],[35.5394,9.6976],[35.5537,9.6961],[35.5611,9.692],[35.5785,9.6655],[35.5944,9.656],[35.6248,9.6512],[35.6347,9.6515],[35.6534,9.6349],[35.6505,9.613],[35.6436,9.5946],[35.6475,9.5533],[35.6714,9.5172],[35.6865,9.5104],[35.7108,9.4868],[35.7319,9.4815],[35.7529,9.4817],[35.765,9.4734],[35.7773,9.4401],[35.7784,9.4307],[35.7659,9.4276],[35.754,9.4165],[35.7501,9.4031],[35.7552,9.3648],[35.7492,9.3486],[35.7506,9.3311],[35.7567,9.3236],[35.774,9.3243],[35.7972,9.3086],[35.8085,9.3089],[35.8599,9.325],[35.9111,9.316],[35.9179,9.2856],[35.9307,9.2672],[35.9493,9.2492],[35.9754,9.2429],[36.0316,9.2334],[36.044,9.1951],[36.0536,9.1194],[36.034,9.1074],[36.0281,9.056],[36.0424,9.0322],[36.0422,9.015],[36.0639,9.0199],[36.0865,9.0126],[36.097,9.0324],[36.0755,9.0626],[36.0842,9.0584],[36.0946,9.065],[36.1086,9.08],[36.1287,9.0511],[36.1314,9.0208],[36.1596,9.0207],[36.1671,9.028],[36.1768,9.0445],[36.2259,9.031],[36.2465,9.041],[36.2358,9.0509],[36.2076,9.0672],[36.1846,9.072],[36.1615,9.1054],[36.1719,9.1083],[36.2039,9.1573],[36.2289,9.229],[36.2263,9.2717],[36.1949,9.289],[36.1946,9.3263],[36.2059,9.3547],[36.2343,9.347],[36.2146,9.3324],[36.2148,9.3149],[36.2184,9.2971],[36.2532,9.3018],[36.2702,9.3284],[36.2751,9.3438],[36.2896,9.3215],[36.2955,9.3017],[36.319,9.3059],[36.3262,9.3308],[36.3338,9.3398],[36.3493,9.3449],[36.3747,9.358],[36.4614,9.3572],[36.4841,9.3679],[36.4752,9.3946],[36.4836,9.4052],[36.5073,9.4193],[36.5149,9.4441],[36.4987,9.4729],[36.4944,9.5094],[36.4612,9.5281],[36.4006,9.511],[36.3803,9.4805],[36.3551,9.4947],[36.336,9.512],[36.301,9.5555],[36.2663,9.5687],[36.2318,9.5703],[36.2291,9.5798],[36.2008,9.6149],[36.1926,9.6585],[36.1919,9.6879],[36.1775,9.7013],[36.1619,9.7305],[36.1591,9.7469],[36.1434,9.7578],[36.1053,9.7733],[36.1365,9.8074],[36.1282,9.8522],[36.1523,9.8489],[36.1522,9.8664],[36.134,9.9159],[36.1198,9.9613],[36.1206,9.9716],[36.1399,10.0097],[36.1846,10.0497],[36.2189,10.0532],[36.2589,10.0785],[36.2679,10.0885],[36.2719,10.1131],[36.3323,10.1384],[36.3694,10.1617],[36.3953,10.1871],[36.4162,10.2168],[36.4454,10.2458],[36.4909,10.2343],[36.5155,10.2399],[36.5224,10.2504],[36.5451,10.2693],[36.5493,10.2788],[36.5545,10.2851],[36.5758,10.2792],[36.5747,10.2642],[36.6106,10.2592],[36.6597,10.277],[36.6922,10.2963],[36.6887,10.3114],[36.6854,10.3176],[36.6859,10.3231],[36.6809,10.3346],[36.6881,10.345],[36.6917,10.3573],[36.718,10.3579],[36.7235,10.3608],[36.7314,10.3614],[36.7457,10.36],[36.7524,10.366],[36.7618,10.3673],[36.7666,10.3623],[36.7766,10.346],[36.792,10.3434],[36.7987,10.3378],[36.8066,10.3354],[36.8118,10.3373],[36.817,10.3417],[36.8247,10.3425],[36.8396,10.3408],[36.8692,10.3407],[36.8758,10.3338],[36.8831,10.3207],[36.8887,10.3155],[36.898,10.3128],[36.9192,10.3142],[36.9246,10.3138],[36.9308,10.3109],[36.9647,10.3119],[36.9717,10.3151],[36.9799,10.314],[36.9971,10.303],[37.0072,10.2888],[37.0133,10.2849],[37.0401,10.2854],[37.0459,10.2884],[37.0508,10.2836],[37.0618,10.2817],[37.0697,10.2761],[37.0781,10.2634],[37.0871,10.2595],[37.1348,10.246],[37.1745,10.2433],[37.1818,10.2413],[37.1904,10.2363],[37.196,10.2309],[37.1999,10.2233],[37.1975,10.2139],[37.1825,10.188],[37.171,10.174],[37.1677,10.1633],[37.1798,10.1444],[37.1907,10.1116],[37.1955,10.1045],[37.2133,10.0879],[37.2205,10.0839],[37.2407,10.0756],[37.2619,10.0767],[37.2716,10.0736],[37.2825,10.0649],[37.2877,10.0629],[37.2965,10.0528],[37.2997,10.0388],[37.3056,10.0267],[37.3178,10.0181],[37.3233,10.0081],[37.3393,10.0045],[37.3447,10.0058],[37.3493,10.0119],[37.357,10.0402],[37.3622,10.0432],[37.3736,10.0422],[37.3804,10.0431],[37.3873,10.0465],[37.3983,10.0462],[37.4244,10.0338],[37.4445,10.0146],[37.4613,10.0121],[37.4757,10.0149],[37.4781,10.0092],[37.4831,10.0035],[37.4885,10.003],[37.5016,9.9979],[37.5197,9.9999],[37.5292,9.9962],[37.5514,9.9734],[37.5529,9.9586],[37.5572,9.9539],[37.5743,9.9419],[37.5869,9.9394],[37.5906,9.933],[37.5897,9.9268],[37.5924,9.9188],[37.5993,9.9178],[37.6128,9.9094],[37.6175,9.9017],[37.6182,9.8939],[37.6236,9.889],[37.6366,9.8855],[37.6414,9.8825],[37.6516,9.8691],[37.6619,9.8605],[37.6669,9.8595],[37.6804,9.8623],[37.6851,9.8575],[37.6946,9.8427],[37.7007,9.8367],[37.7107,9.8426],[37.7243,9.8445],[37.7307,9.8449],[37.736,9.8408],[37.7429,9.8407],[37.7482,9.8467],[37.7485,9.8559],[37.754,9.8571],[37.761,9.8519],[37.7691,9.8514],[37.7746,9.8565],[37.8006,9.8618],[37.807,9.8653],[37.816,9.8672],[37.8233,9.8739],[37.8308,9.8846],[37.8364,9.8879],[37.8427,9.8967],[37.8484,9.8976],[37.8559,9.8959],[37.8592,9.9002],[37.8604,9.9128],[37.8645,9.9129],[37.8699,9.9075],[37.8745,9.9112],[37.8759,9.9163],[37.8802,9.9215],[37.893,9.9273],[37.9014,9.9304],[37.9093,9.9304],[37.9234,9.9147],[37.9301,9.9146],[37.9351,9.919],[37.9352,9.923],[37.9308,9.9305],[37.9328,9.9413],[37.9387,9.9441],[37.9519,9.9384],[37.9571,9.9386],[37.9784,9.9491],[37.9934,9.9491],[38.0085,9.9641],[38.016,9.9668],[38.0256,9.9683],[38.0339,9.9675],[38.0436,9.9698],[38.0481,9.9815],[38.0599,9.9818],[38.0643,9.9979],[38.0698,10.0015],[38.0812,10.0022],[38.0827,10.0075],[38.0803,10.0152],[38.0876,10.0203],[38.0941,10.0202],[38.1007,10.0223],[38.1131,10.016],[38.1183,10.0178],[38.1171,10.0236],[38.1183,10.029],[38.1253,10.0432],[38.1309,10.0475],[38.137,10.0474],[38.1422,10.0433],[38.1451,10.0367],[38.1506,10.0351],[38.1604,10.0441],[38.1673,10.0461],[38.1699,10.0507],[38.1706,10.0578],[38.1766,10.0631],[38.1843,10.0668],[38.2037,10.0818],[38.2164,10.0864],[38.222,10.0923],[38.2404,10.1026],[38.2478,10.1019],[38.2515,10.0965],[38.2524,10.0884],[38.2581,10.0877],[38.2718,10.0918],[38.2808,10.0909],[38.2861,10.0885],[38.2953,10.0892],[38.3004,10.0954],[38.3023,10.1034],[38.3086,10.108],[38.3218,10.1072],[38.3265,10.1145],[38.3237,10.1234],[38.326,10.1331],[38.3333,10.1514],[38.34,10.1562],[38.3483,10.1588],[38.3541,10.1551],[38.357,10.1508],[38.3581,10.1443],[38.3663,10.1405],[38.3756,10.1404],[38.3975,10.1443],[38.4009,10.1486],[38.4021,10.1547],[38.4063,10.1604],[38.4257,10.1718],[38.4259,10.1778],[38.4211,10.1808],[38.43,10.1931],[38.4194,10.2132],[38.4194,10.2198],[38.4242,10.2227],[38.4307,10.2316],[38.4481,10.2403],[38.4542,10.2467],[38.4553,10.2611],[38.4627,10.2677],[38.4579,10.282],[38.4601,10.29],[38.4725,10.2918],[38.4661,10.3052],[38.4679,10.3111],[38.4737,10.3146],[38.4751,10.3307],[38.4812,10.3444],[38.4795,10.3511],[38.4761,10.3562],[38.4767,10.3633],[38.4835,10.3654],[38.5028,10.3633],[38.5238,10.3678],[38.5344,10.3665],[38.5412,10.3703],[38.5602,10.3759],[38.566,10.3743],[38.578,10.3772],[38.5921,10.3744],[38.6047,10.3746],[38.6238,10.3784],[38.6303,10.3822],[38.6565,10.3736],[38.6642,10.3728],[38.6713,10.3741],[38.676,10.3774],[38.6823,10.379],[38.6974,10.3794],[38.7126,10.3869],[38.7382,10.3856],[38.7461,10.3837],[38.7612,10.3756],[38.7721,10.3662],[38.7907,10.3665],[38.8065,10.3688],[38.8156,10.3643],[38.8457,10.361],[38.8451,10.3548],[38.8532,10.3338],[38.8557,10.2947],[38.8595,10.286],[38.8608,10.278],[38.8446,10.2561],[38.8444,10.2507],[38.8476,10.2443],[38.8353,10.2257],[38.8327,10.2121],[38.8337,10.204],[38.8381,10.1981],[38.8344,10.1792],[38.8337,10.1619],[38.8392,10.149],[38.8443,10.1443],[38.8472,10.1387],[38.8486,10.1239],[38.8526,10.1181],[38.8426,10.1099],[38.8391,10.1144],[38.829,10.1097],[38.8236,10.1097],[38.8109,10.0944],[38.8053,10.0935],[38.7995,10.0903],[38.792,10.0894],[38.7773,10.0828],[38.7649,10.0708],[38.7579,10.0683],[38.7512,10.0633],[38.741,10.0611],[38.7339,10.0563],[38.7214,10.0514],[38.7057,10.053],[38.7015,10.0494],[38.6957,10.0509],[38.6887,10.0502],[38.6627,10.0574],[38.6572,10.0515],[38.6605,10.0455],[38.6608,10.0338],[38.6695,10.0192],[38.6738,10.0151],[38.6811,10.0134],[38.6865,10.008],[38.6941,10.0078],[38.7099,9.9984],[38.7186,9.996],[38.7254,9.9913],[38.7336,9.9929],[38.7402,9.9875],[38.7521,9.9847],[38.7581,9.9807],[38.7649,9.9806],[38.7712,9.9781],[38.7793,9.9824],[38.7848,9.9783],[38.7896,9.9719],[38.7969,9.9677],[38.8006,9.9622],[38.8027,9.9536],[38.8014,9.9465],[38.7973,9.9408],[38.7964,9.9337],[38.7978,9.9278],[38.8013,9.9222],[38.8025,9.9095],[38.796,9.8891],[38.7909,9.8826],[38.803,9.8621],[38.8084,9.8353],[38.8078,9.8195],[38.8137,9.8062],[38.8182,9.8027],[38.8215,9.7845],[38.8289,9.7691],[38.8403,9.757],[38.8585,9.7449],[38.8665,9.7336],[38.8967,9.7143],[38.9093,9.7087],[38.9178,9.7115],[38.9282,9.7251],[38.9347,9.7279],[38.9403,9.7252],[38.9538,9.7138],[38.9603,9.7108],[38.9591,9.7185],[38.9527,9.7327],[38.9521,9.7387],[38.9641,9.7491],[38.9679,9.7562],[38.9744,9.7611],[38.9808,9.752],[38.9901,9.746],[39.0122,9.7522],[39.0166,9.7577],[39.0236,9.7579],[39.0306,9.7555],[39.035,9.7528],[39.036,9.747],[39.0505,9.7534],[39.0689,9.753],[39.0765,9.7546],[39.0821,9.757],[39.0871,9.7615],[39.0922,9.7631],[39.1018,9.7551],[39.1045,9.7486],[39.0974,9.7438],[39.0977,9.7354],[39.1096,9.7325],[39.117,9.7333],[39.1227,9.7349],[39.1335,9.7414],[39.1393,9.7407],[39.143,9.7353],[39.1449,9.7286],[39.1443,9.7207],[39.1477,9.7154],[39.146,9.7084],[39.1454,9.6933],[39.1557,9.6887],[39.1618,9.6888],[39.1663,9.6927],[39.1742,9.6948],[39.1786,9.6893],[39.184,9.6858],[39.1842,9.7201],[39.1974,9.7164],[39.2001,9.7087],[39.2049,9.7066],[39.2086,9.7109],[39.2114,9.7047],[39.2168,9.7084],[39.2235,9.7052],[39.2281,9.6937],[39.2328,9.6992],[39.239,9.7024],[39.2448,9.7018],[39.2499,9.7049],[39.26,9.7293],[39.2681,9.7397],[39.2804,9.7332],[39.2876,9.734],[39.2917,9.7451],[39.2979,9.748],[39.3081,9.744],[39.3134,9.7314],[39.3204,9.7241],[39.3288,9.7244],[39.3418,9.7275],[39.3467,9.7251],[39.3408,9.7171],[39.338,9.7102],[39.3393,9.7039],[39.3445,9.699],[39.3641,9.7015],[39.3701,9.6994],[39.3697,9.6896],[39.361,9.6803],[39.3713,9.67],[39.3682,9.663],[39.3621,9.6615],[39.3577,9.6569],[39.352,9.6221],[39.3544,9.6177],[39.3617,9.6189],[39.3755,9.6292],[39.3859,9.6308],[39.3888,9.6157],[39.3853,9.6107],[39.3842,9.6029],[39.3797,9.5963],[39.3734,9.592],[39.3733,9.5829],[39.3779,9.5802],[39.3785,9.5731],[39.3765,9.5673],[39.3726,9.564],[39.3606,9.5461],[39.3528,9.5492],[39.3414,9.5454],[39.3297,9.5266],[39.3229,9.5257],[39.3129,9.5356],[39.3021,9.5227],[39.3025,9.512],[39.3052,9.5052],[39.2965,9.5017],[39.2939,9.4963],[39.2941,9.4917],[39.3011,9.4878],[39.3055,9.4737],[39.3097,9.4677],[39.3148,9.467],[39.3386,9.4748],[39.3438,9.4723],[39.3504,9.472],[39.3556,9.4742],[39.3631,9.4739],[39.3751,9.4671],[39.3769,9.4633],[39.3733,9.458],[39.3727,9.4468],[39.3784,9.4461],[39.3879,9.4498],[39.3939,9.455],[39.4113,9.4475],[39.4303,9.4339],[39.4477,9.4325],[39.4493,9.4253],[39.4476,9.4188],[39.4431,9.4144],[39.4496,9.4047],[39.4539,9.4012],[39.4522,9.3939],[39.4456,9.3839],[39.4405,9.3814],[39.4259,9.3794],[39.4204,9.3715],[39.4119,9.3745],[39.4039,9.3804],[39.3949,9.3919],[39.3763,9.384],[39.373,9.3757],[39.3567,9.369],[39.3467,9.3785],[39.3372,9.3805],[39.3251,9.3805],[39.3201,9.374],[39.3196,9.3656],[39.3065,9.3661],[39.303,9.3566],[39.293,9.3492],[39.2915,9.3317],[39.2854,9.3158],[39.2783,9.3123],[39.2644,9.3242],[39.2662,9.2885],[39.2847,9.2775],[39.2662,9.2445],[39.2604,9.2503],[39.2337,9.2936],[39.2072,9.2919],[39.1777,9.2711],[39.1941,9.2524],[39.1997,9.25],[39.2137,9.2281],[39.1886,9.2093],[39.2146,9.1734],[39.2337,9.1579],[39.2495,9.1356],[39.2941,9.1493],[39.3232,9.1488],[39.3202,9.1402],[39.3288,9.1372],[39.3486,9.0881],[39.3485,9.0766],[39.3542,9.0707],[39.357,9.0621],[39.347,9.0642],[39.3153,9.0602],[39.2968,9.0533],[39.2882,8.999],[39.2696,8.9806],[39.2586,8.9626],[39.2654,8.9224],[39.2591,8.91],[39.241,8.8889],[39.2375,8.862],[39.2605,8.8506],[39.2655,8.8431],[39.244,8.8366],[39.2439,8.8277],[39.2545,8.8132],[39.272,8.783],[39.273,8.7669],[39.262,8.7469],[39.2704,8.7245],[39.2858,8.7178],[39.299,8.7185],[39.3053,8.7217],[39.3245,8.7469],[39.3315,8.7409],[39.342,8.7269],[39.3611,8.721],[39.3771,8.7309],[39.3736,8.7668],[39.3746,8.7797],[39.3782,8.7912],[39.3862,8.7986],[39.4055,8.81],[39.4178,8.8145],[39.4312,8.7901],[39.4397,8.7677],[39.4492,8.7522],[39.4702,8.7418],[39.4923,8.7253],[39.5008,8.7148],[39.5338,8.758],[39.5518,8.7688],[39.562,8.8178],[39.5915,8.7969],[39.617,8.7869],[39.6341,8.7988],[39.6501,8.8028],[39.6621,8.8132],[39.6792,8.8157],[39.7167,8.8161],[39.7333,8.8262],[39.7313,8.8442],[39.7369,8.8572],[39.7385,8.8721],[39.748,8.9103],[39.7465,9.0098],[39.7462,9.0153],[39.7412,9.023],[39.7402,9.0395],[39.7462,9.0552],[39.7475,9.0631],[39.7425,9.0913],[39.7639,9.0951],[39.7938,9.1127],[39.7971,9.1215],[39.802,9.1261],[39.8077,9.1354],[39.849,9.1381],[39.8777,9.1447],[39.8984,9.1389],[39.909,9.1318],[39.9156,9.0973],[39.9187,9.0684],[39.9284,9.0541],[39.9425,9.0477],[39.9519,9.03],[39.9476,9.0036],[39.9682,9.0036],[39.9996,9.0072],[40.0219,9.0023],[40.0348,8.9944],[40.0475,8.9779],[40.0511,8.9614],[40.0439,8.9423],[40.0366,8.9065],[40.0193,8.8891],[40.0109,8.8708],[40.0104,8.8561],[40.0242,8.845],[40.0403,8.8411],[40.0512,8.8406],[40.067,8.844],[40.081,8.8513],[40.0945,8.8622],[40.1205,8.8958],[40.1522,8.932],[40.1699,8.9645],[40.1875,8.9743],[40.2223,8.9877],[40.2378,8.9973],[40.2423,9.0132],[40.246,9.0354],[40.2443,9.0556],[40.2455,9.0749],[40.2543,9.0861],[40.3006,9.1281],[40.327,9.1547],[40.3695,9.2183],[40.4081,9.2812],[40.4258,9.3043],[40.471,9.3548],[40.4988,9.375],[40.5284,9.3855],[40.606,9.391],[40.636,9.3959],[40.6596,9.4043],[40.6755,9.4175],[40.6889,9.4384],[40.6936,9.4444],[40.6986,9.4476],[40.7195,9.4439],[40.7832,9.4479],[40.8158,9.4527],[40.8424,9.4636],[40.8622,9.463],[40.89,9.4486],[40.9175,9.4218],[40.9275,9.4051],[40.9139,9.3972],[40.8912,9.3895],[40.8582,9.3854],[40.8281,9.3931],[40.7976,9.3956],[40.7888,9.3869],[40.7926,9.3674],[40.8085,9.3268],[40.8126,9.3109],[40.8248,9.3054],[40.8441,9.3048],[40.8741,9.3094],[40.903,9.3182],[40.927,9.3231],[40.9536,9.3356],[40.9707,9.3515],[41.0141,9.3572],[41.0301,9.3725],[41.0565,9.3911],[41.0835,9.4044],[41.1454,9.4246],[41.1705,9.4414],[41.1948,9.4623],[41.2199,9.4907],[41.2393,9.4988],[41.2523,9.5004],[41.2676,9.4994],[41.2797,9.5015],[41.3087,9.5031],[41.3365,9.4946],[41.3931,9.4858],[41.4326,9.4759],[41.479,9.46],[41.491,9.4574],[41.5221,9.4853],[41.5406,9.4996],[41.5642,9.5069],[41.6426,9.5151],[41.6542,9.4812],[41.6702,9.4706],[41.7023,9.4667],[41.7219,9.4675],[41.7346,9.4715],[41.7545,9.4846],[41.773,9.4911],[41.7925,9.4895],[41.8152,9.4767],[41.8387,9.4779],[41.8597,9.488],[41.9134,9.4725],[41.9387,9.4795],[41.9825,9.5085],[41.9954,9.5065],[42.0191,9.5082],[42.0317,9.5044],[42.0439,9.4983],[42.0521,9.492],[42.0676,9.4748],[42.0748,9.4737],[42.0811,9.4882],[42.0963,9.5013],[42.1097,9.508],[42.1389,9.5347],[42.1526,9.5564],[42.1461,9.5706],[42.1334,9.5825],[42.1278,9.5984],[42.1249,9.6145],[42.1423,9.6203],[42.1804,9.6443],[42.2005,9.6531],[42.2205,9.6562],[42.2408,9.6566],[42.2586,9.6516],[42.2719,9.667],[42.2859,9.6761],[42.3181,9.7057],[42.3398,9.7196],[42.3462,9.7214],[42.3558,9.7179],[42.3766,9.7138],[42.4485,9.722],[42.499,9.7211],[42.5681,9.7369],[42.6185,9.7584],[42.6474,9.7752],[42.6638,9.7765],[42.681,9.7743],[42.6941,9.7687],[42.7035,9.7584],[42.7137,9.7407],[42.7305,9.7211],[42.7903,9.693],[42.823,9.6744],[42.8538,9.6622],[42.8977,9.6501],[42.9079,9.6501],[42.9173,9.6576],[42.9257,9.6725],[42.935,9.68],[42.9509,9.6725],[42.964,9.6557],[42.978,9.6286],[42.9798,9.6071],[42.9686,9.5922],[42.9434,9.5875],[42.921,9.5651],[42.9089,9.5632],[42.8921,9.5745],[42.8799,9.5847],[42.8641,9.5866],[42.8407,9.5829],[42.8136,9.5726],[42.7875,9.5231],[42.7763,9.5119],[42.7473,9.5016],[42.7361,9.4951],[42.7287,9.4829],[42.7147,9.4745],[42.682,9.4699],[42.6661,9.4587],[42.6558,9.4559],[42.6409,9.4475],[42.6035,9.4166],[42.5849,9.4092],[42.5671,9.3961],[42.5522,9.3821],[42.5375,9.373],[42.5516,9.3452],[42.5563,9.3211],[42.547,9.3052],[42.5514,9.2866],[42.5611,9.2703],[42.571,9.2582],[42.5796,9.2375],[42.5836,9.2154],[42.5955,9.1936],[42.6143,9.174],[42.6347,9.1585],[42.6351,9.144],[42.626,9.1321],[42.6094,9.1185],[42.5993,9.1062],[42.6193,9.0893],[42.6443,9.073],[42.6623,9.049],[42.6801,9.015],[42.7031,8.9809],[42.7306,8.948],[42.7612,8.9177],[42.8052,8.87],[42.8495,8.8443],[42.8653,8.8251],[42.8654,8.8044],[42.8439,8.7579],[42.8371,8.7278],[42.832,8.6952],[42.8384,8.6644],[42.8599,8.6363],[42.8988,8.6027],[42.9053,8.5822],[42.9076,8.549],[42.9124,8.5221],[42.9108,8.4988],[42.897,8.4578],[42.8988,8.4091],[42.8844,8.3985],[42.8581,8.3917],[42.7982,8.3701],[42.7794,8.3733],[42.7682,8.3632],[42.7539,8.3371],[42.7349,8.2944],[42.7191,8.2457],[42.7112,8.2068],[42.7016,8.1796],[42.6785,8.1473],[42.6614,8.1303],[42.6514,8.1297],[42.6306,8.1404],[42.616,8.1596],[42.5781,8.2285],[42.567,8.2556],[42.5501,8.3505],[42.5387,8.3972],[42.5298,8.4548],[42.5201,8.4787],[42.5026,8.4921],[42.323,8.5368],[42.3071,8.5596],[42.2947,8.586],[42.275,8.6151],[42.2631,8.636],[42.2397,8.6399],[42.2327,8.635],[42.2156,8.6112],[42.0977,8.519],[42.0697,8.494],[42.0413,8.4475],[42.026,8.4258],[42.0271,8.323],[41.9484,8.2009],[41.9263,8.0806],[41.9222,7.9781],[41.9124,7.8444],[41.9571,7.7748],[41.9425,7.7275],[41.9048,7.6359],[41.8678,7.5382],[41.8671,7.5328],[41.8936,7.4187],[41.8961,7.4112],[42.1991,7.2914],[42.2099,7.264],[42.2098,7.2269],[42.2035,7.1946],[42.2047,7.141],[42.187,7.0964],[42.1576,7.0513],[42.1626,7.0071],[42.1399,6.9673],[42.1342,6.9542],[42.1061,6.9302],[42.0987,6.9157],[42.0762,6.8867],[42.0755,6.864],[42.0629,6.8259],[42.0555,6.7488],[42.0255,6.7064],[42.0146,6.6804],[42.0135,6.6586],[41.9992,6.6416],[42.0004,6.6286],[42.0065,6.6144],[42.004,6.5976],[41.9995,6.5898],[41.9364,6.5532],[41.888,6.5353],[41.8607,6.5353],[41.8537,6.5689],[41.8197,6.5705],[41.7988,6.5575],[41.7579,6.5405],[41.7389,6.5199],[41.7045,6.4524],[41.6903,6.4294],[41.6842,6.4241],[41.6561,6.4092],[41.6334,6.3914],[41.6197,6.3617],[41.528,6.4649],[41.4378,6.544],[41.38,6.5655],[41.3584,6.5655],[41.2285,6.623],[41.1743,6.6589],[41.1563,6.6769],[41.131,6.6913],[41.0721,6.6943],[41.0712,6.6879],[41.0155,6.6446],[40.99,6.6042],[40.9361,6.5512],[40.9001,6.5116],[40.8856,6.4721],[40.8604,6.4362],[40.8567,6.3859],[40.861,6.3611],[40.8644,6.3523],[40.8619,6.3457],[40.8645,6.3203],[40.8797,6.2665],[40.8816,6.2443],[40.878,6.1877],[40.8679,6.1513],[40.8664,6.1337],[40.8664,6.1138],[40.8695,6.0945],[40.8667,6.0766],[40.8712,6.0558],[40.8784,5.9875],[40.8748,5.8079],[40.9223,5.6834],[40.865,5.669],[40.8322,5.6559],[40.8115,5.6349],[40.7529,5.5944],[40.6944,5.5672],[40.6796,5.5406],[40.6331,5.5301],[40.6054,5.4903],[40.581,5.4759],[40.5635,5.4539],[40.549,5.4277],[40.5329,5.4106],[40.3695,5.3864],[40.3104,5.3763],[40.2767,5.3682],[40.2406,5.3661],[40.2084,5.3555],[40.1744,5.3534],[40.1346,5.3579],[40.0979,5.3649],[40.0634,5.3785],[40.0337,5.3968],[39.9423,5.285],[39.9073,5.2196],[39.8784,5.1403],[39.8336,5.0328],[39.8129,5.0021],[39.8045,4.9515],[39.784,4.8906],[39.7651,4.8468],[39.7585,4.8011],[39.7436,4.7235],[39.7459,4.6666],[39.7251,4.6331],[39.717,4.6157],[39.7098,4.5974],[39.7033,4.5682],[39.6901,4.5433],[39.6746,4.5052],[39.6556,4.4689],[39.6421,4.4359],[39.6188,4.3685],[39.5858,4.2965],[39.567,4.2646],[39.5397,4.2352],[39.5288,4.1667],[39.5091,4.1144],[39.4783,4.0403],[39.4997,3.9657],[39.4828,3.942],[39.3996,3.7957]],[[38.6854,9.073],[38.6837,9.0663],[38.6835,9.05],[38.6726,9.0387],[38.6721,9.0331],[38.6672,9.0262],[38.667,9.01],[38.6519,9.0103],[38.6511,9.0025],[38.6578,8.9948],[38.6594,8.9854],[38.6546,8.9769],[38.6394,8.974],[38.6428,8.9659],[38.6762,8.9576],[38.681,8.9497],[38.6806,8.9411],[38.6879,8.9397],[38.6938,8.9419],[38.6968,8.9327],[38.702,8.9256],[38.7084,8.9209],[38.7191,8.9197],[38.7311,8.9051],[38.7365,8.9013],[38.7436,8.9026],[38.7445,8.8921],[38.7432,8.8804],[38.7473,8.8772],[38.7452,8.8695],[38.7455,8.8634],[38.7541,8.8586],[38.7565,8.8532],[38.773,8.8575],[38.7775,8.8524],[38.7784,8.8418],[38.7806,8.8359],[38.792,8.8358],[38.7976,8.8335],[38.8125,8.84],[38.8175,8.8393],[38.8244,8.8413],[38.8239,8.8528],[38.8294,8.8688],[38.826,8.8802],[38.833,8.8829],[38.8407,8.8799],[38.8471,8.88],[38.8584,8.8836],[38.8638,8.8829],[38.8687,8.873],[38.8698,8.8808],[38.8775,8.8958],[38.8733,8.9051],[38.8794,8.9183],[38.8608,8.9322],[38.8556,8.9383],[38.8614,8.9427],[38.8914,8.9343],[38.8968,8.937],[38.9011,8.9461],[38.8962,8.9548],[38.9028,8.9624],[38.9062,8.9774],[38.9043,8.9922],[38.9061,8.9975],[38.905,9.0095],[38.8933,9.0372],[38.8829,9.0521],[38.882,9.0686],[38.8763,9.0816],[38.8682,9.0849],[38.8568,9.0835],[38.8495,9.0782],[38.8426,9.0786],[38.8247,9.0759],[38.8051,9.0823],[38.8,9.0786],[38.7913,9.0777],[38.7782,9.0937],[38.7712,9.0982],[38.7652,9.0982],[38.7509,9.0905],[38.738,9.0869],[38.7271,9.0857],[38.7166,9.0878],[38.7067,9.0818],[38.7007,9.0805],[38.6854,9.073]],[[42.272,9.2157],[42.2687,9.2296],[42.2563,9.2526],[42.2493,9.27],[42.2503,9.2855],[42.266,9.3098],[42.265,9.3213],[42.2585,9.3344],[42.2703,9.3617],[42.253,9.3838],[42.2381,9.3849],[42.2219,9.3795],[42.1874,9.3617],[42.1686,9.3628],[42.1466,9.3875],[42.1292,9.3887],[42.1142,9.3725],[42.0853,9.3291],[42.0705,9.3039],[42.0605,9.2659],[42.0589,9.2494],[42.0613,9.2265],[42.0737,9.221],[42.1124,9.2307],[42.1273,9.2266],[42.1486,9.2063],[42.1657,9.2104],[42.1821,9.2169],[42.1975,9.2199],[42.2085,9.2119],[42.2208,9.1964],[42.2337,9.1859],[42.246,9.187],[42.2594,9.1923],[42.2647,9.1979],[42.272,9.2157]]]]}},{"type":"Feature","properties":{"GID_1":"ETH.9_1","GID_0":"ETH","COUNTRY":"Ethiopia","NAME_1":"Somali","VARNAME_1":"Sumale","NL_NAME_1":"NA","TYPE_1":"Kilil","ENGTYPE_1":"State","CC_1":"05","HASC_1":"ET.SO","ISO_1":"NA"},"geometry":{"type":"MultiPolygon","coordinates":[[[[39.6421,4.4359],[39.6556,4.4689],[39.6746,4.5052],[39.6901,4.5433],[39.7033,4.5682],[39.7098,4.5974],[39.717,4.6157],[39.7251,4.6331],[39.7459,4.6666],[39.7436,4.7235],[39.7585,4.8011],[39.7651,4.8468],[39.784,4.8906],[39.8045,4.9515],[39.8129,5.0021],[39.8336,5.0328],[39.8784,5.1403],[39.9073,5.2196],[39.9423,5.285],[40.0337,5.3968],[40.0634,5.3785],[40.0979,5.3649],[40.1346,5.3579],[40.1744,5.3534],[40.2084,5.3555],[40.2406,5.3661],[40.2767,5.3682],[40.3104,5.3763],[40.3695,5.3864],[40.5329,5.4106],[40.549,5.4277],[40.5635,5.4539],[40.581,5.4759],[40.6054,5.4903],[40.6331,5.5301],[40.6796,5.5406],[40.6944,5.5672],[40.7529,5.5944],[40.8115,5.6349],[40.8322,5.6559],[40.865,5.669],[40.9223,5.6834],[40.8748,5.8079],[40.8784,5.9875],[40.8712,6.0558],[40.8667,6.0766],[40.8695,6.0945],[40.8664,6.1138],[40.8664,6.1337],[40.8679,6.1513],[40.878,6.1877],[40.8816,6.2443],[40.8797,6.2665],[40.8645,6.3203],[40.8619,6.3457],[40.8644,6.3523],[40.861,6.3611],[40.8567,6.3859],[40.8604,6.4362],[40.8856,6.4721],[40.9001,6.5116],[40.9361,6.5512],[40.99,6.6042],[41.0155,6.6446],[41.0712,6.6879],[41.0721,6.6943],[41.131,6.6913],[41.1563,6.6769],[41.1743,6.6589],[41.2285,6.623],[41.3584,6.5655],[41.38,6.5655],[41.4378,6.544],[41.528,6.4649],[41.6197,6.3617],[41.6334,6.3914],[41.6561,6.4092],[41.6842,6.4241],[41.6903,6.4294],[41.7045,6.4524],[41.7389,6.5199],[41.7579,6.5405],[41.7988,6.5575],[41.8197,6.5705],[41.8537,6.5689],[41.8607,6.5353],[41.888,6.5353],[41.9364,6.5532],[41.9995,6.5898],[42.004,6.5976],[42.0065,6.6144],[42.0004,6.6286],[41.9992,6.6416],[42.0135,6.6586],[42.0146,6.6804],[42.0255,6.7064],[42.0555,6.7488],[42.0629,6.8259],[42.0755,6.864],[42.0762,6.8867],[42.0987,6.9157],[42.1061,6.9302],[42.1342,6.9542],[42.1399,6.9673],[42.1626,7.0071],[42.1576,7.0513],[42.187,7.0964],[42.2047,7.141],[42.2035,7.1946],[42.2098,7.2269],[42.2099,7.264],[42.1991,7.2914],[41.8961,7.4112],[41.8671,7.5328],[41.8678,7.5382],[41.9048,7.6359],[41.9425,7.7275],[41.9571,7.7748],[41.9124,7.8444],[41.9222,7.9781],[41.9263,8.0806],[41.9484,8.2009],[42.0271,8.323],[42.026,8.4258],[42.0413,8.4475],[42.0697,8.494],[42.0977,8.519],[42.2156,8.6112],[42.2327,8.635],[42.2397,8.6399],[42.2631,8.636],[42.275,8.6151],[42.2947,8.586],[42.3071,8.5596],[42.323,8.5368],[42.5026,8.4921],[42.5201,8.4787],[42.5298,8.4548],[42.5387,8.3972],[42.5501,8.3505],[42.567,8.2556],[42.5781,8.2285],[42.616,8.1596],[42.6306,8.1404],[42.6514,8.1297],[42.6614,8.1303],[42.6785,8.1473],[42.7016,8.1796],[42.7112,8.2068],[42.7191,8.2457],[42.7349,8.2944],[42.7539,8.3371],[42.7682,8.3632],[42.7794,8.3733],[42.7982,8.3701],[42.8581,8.3917],[42.8844,8.3985],[42.8988,8.4091],[42.897,8.4578],[42.9108,8.4988],[42.9124,8.5221],[42.9076,8.549],[42.9053,8.5822],[42.8988,8.6027],[42.8599,8.6363],[42.8384,8.6644],[42.832,8.6952],[42.8371,8.7278],[42.8439,8.7579],[42.8654,8.8044],[42.8653,8.8251],[42.8495,8.8443],[42.8052,8.87],[42.7612,8.9177],[42.7306,8.948],[42.7031,8.9809],[42.6801,9.015],[42.6623,9.049],[42.6443,9.073],[42.6193,9.0893],[42.5993,9.1062],[42.6094,9.1185],[42.626,9.1321],[42.6351,9.144],[42.6347,9.1585],[42.6143,9.174],[42.5955,9.1936],[42.5836,9.2154],[42.5796,9.2375],[42.571,9.2582],[42.5611,9.2703],[42.5514,9.2866],[42.547,9.3052],[42.5563,9.3211],[42.5516,9.3452],[42.5375,9.373],[42.5522,9.3821],[42.5671,9.3961],[42.5849,9.4092],[42.6035,9.4166],[42.6409,9.4475],[42.6558,9.4559],[42.6661,9.4587],[42.682,9.4699],[42.7147,9.4745],[42.7287,9.4829],[42.7361,9.4951],[42.7473,9.5016],[42.7763,9.5119],[42.7875,9.5231],[42.8136,9.5726],[42.8407,9.5829],[42.8641,9.5866],[42.8799,9.5847],[42.8921,9.5745],[42.9089,9.5632],[42.921,9.5651],[42.9434,9.5875],[42.9686,9.5922],[42.9798,9.6071],[42.978,9.6286],[42.964,9.6557],[42.9509,9.6725],[42.935,9.68],[42.9257,9.6725],[42.9173,9.6576],[42.9079,9.6501],[42.8977,9.6501],[42.8538,9.6622],[42.823,9.6744],[42.7903,9.693],[42.7305,9.7211],[42.7137,9.7407],[42.7035,9.7584],[42.6941,9.7687],[42.681,9.7743],[42.6638,9.7765],[42.6474,9.7752],[42.6185,9.7584],[42.5681,9.7369],[42.499,9.7211],[42.4485,9.722],[42.3766,9.7138],[42.3558,9.7179],[42.3462,9.7214],[42.3398,9.7196],[42.2935,9.7575],[42.251,9.7835],[42.2134,9.7837],[42.1858,9.7736],[42.0308,9.6185],[42.0189,9.6179],[42.0084,9.6222],[41.9964,9.6312],[41.9061,9.6793],[41.8732,9.6839],[41.8533,9.6737],[41.8087,9.6406],[41.801,9.6424],[41.791,9.649],[41.7738,9.6537],[41.7486,9.6364],[41.7491,9.6006],[41.728,9.489],[41.7346,9.4715],[41.7219,9.4675],[41.7023,9.4667],[41.6702,9.4706],[41.6542,9.4812],[41.6426,9.5151],[41.5642,9.5069],[41.5406,9.4996],[41.5221,9.4853],[41.491,9.4574],[41.479,9.46],[41.4326,9.4759],[41.3931,9.4858],[41.3365,9.4946],[41.3087,9.5031],[41.2797,9.5015],[41.2676,9.4994],[41.2523,9.5004],[41.2393,9.4988],[41.2199,9.4907],[41.1948,9.4623],[41.1705,9.4414],[41.1454,9.4246],[41.0835,9.4044],[41.0565,9.3911],[41.0301,9.3725],[41.0141,9.3572],[40.9707,9.3515],[40.9536,9.3356],[40.927,9.3231],[40.903,9.3182],[40.8741,9.3094],[40.8441,9.3048],[40.8248,9.3054],[40.8126,9.3109],[40.8085,9.3268],[40.7926,9.3674],[40.7888,9.3869],[40.7976,9.3956],[40.8281,9.3931],[40.8582,9.3854],[40.8912,9.3895],[40.9139,9.3972],[40.9275,9.4051],[40.9175,9.4218],[40.89,9.4486],[40.8622,9.463],[40.8424,9.4636],[40.8158,9.4527],[40.7832,9.4479],[40.7195,9.4439],[40.6986,9.4476],[40.6936,9.4444],[40.693,9.4989],[40.699,9.5328],[40.7145,9.566],[40.7218,9.5903],[40.7305,9.6068],[40.7353,9.6217],[40.7487,9.6513],[40.7631,9.6675],[40.8256,9.7635],[40.8473,9.7903],[40.9467,9.8804],[40.9966,9.9287],[41.0139,9.9392],[41.0196,9.9488],[41.0134,9.96],[40.9989,9.9678],[40.9658,9.9717],[40.9535,9.9875],[40.946,10.0013],[40.9366,10.0352],[40.9487,10.0678],[40.9538,10.0957],[40.9747,10.1566],[40.9788,10.1947],[40.9899,10.2399],[41.0051,10.3188],[41.015,10.3432],[41.0304,10.4004],[41.0318,10.422],[41.0471,10.4776],[41.057,10.5003],[41.0614,10.5167],[41.0713,10.541],[41.087,10.6006],[41.0824,10.6325],[41.0779,10.6395],[41.079,10.6588],[41.0773,10.6812],[41.09,10.697],[41.1149,10.7203],[41.1331,10.7441],[41.1492,10.7597],[41.1664,10.7797],[41.1909,10.7964],[41.2075,10.8203],[41.2201,10.8345],[41.232,10.8637],[41.2336,10.8912],[41.2407,10.9214],[41.2682,10.9579],[41.3003,10.9641],[41.3486,10.9625],[41.3922,10.9663],[41.4101,10.9585],[41.4841,10.9669],[41.5822,10.9621],[41.6342,10.9653],[41.6808,10.9639],[41.6995,10.9693],[41.7176,10.9648],[41.7395,10.9683],[41.7534,10.9773],[41.7551,10.9728],[41.774,10.9686],[41.7803,10.9581],[41.8076,10.956],[41.8601,10.9444],[41.9053,10.9371],[41.9043,10.914],[41.9158,10.9087],[41.9263,10.9087],[41.94,10.9245],[41.9673,10.914],[41.9925,10.9203],[42.0345,10.9213],[42.045,10.9539],[42.066,10.9507],[42.1133,10.9696],[42.1606,10.9665],[42.1711,10.9539],[42.1942,10.9581],[42.2425,10.9623],[42.2698,10.9791],[42.2992,10.9791],[42.3203,10.9833],[42.3486,10.9844],[42.3948,10.9686],[42.4327,10.9907],[42.4743,11.0319],[42.5808,11.0537],[42.6268,11.0733],[42.6512,11.0526],[42.6743,11.0379],[42.7215,11.0558],[42.7373,11.0484],[42.7615,11.0075],[42.7573,10.9707],[42.8203,10.957],[42.9361,10.9663],[42.933,10.9583],[42.897,10.9242],[42.7965,10.792],[42.7677,10.7342],[42.7408,10.6859],[42.7216,10.6605],[42.7069,10.619],[42.7047,10.5746],[42.716,10.5312],[42.7364,10.4986],[42.7497,10.4496],[42.7756,10.4047],[42.7857,10.3587],[42.8045,10.3148],[42.8194,10.2909],[42.8398,10.2665],[42.856,10.2256],[42.8837,10.1864],[42.9667,10.0988],[42.9703,10.0898],[42.9939,10.0805],[43.0045,10.0694],[43.0121,10.0573],[43.0213,10.0478],[43.0262,10.0373],[43.0407,10.0216],[43.052,10.0033],[43.063,9.9965],[43.0657,9.9776],[43.0781,9.9549],[43.081,9.9388],[43.0922,9.9349],[43.0983,9.9214],[43.1364,9.9136],[43.1428,9.9044],[43.1583,9.9001],[43.1673,9.8877],[43.1997,9.8804],[43.2134,9.872],[43.2223,9.8582],[43.2315,9.8487],[43.2379,9.8395],[43.2514,9.8282],[43.2496,9.791],[43.2561,9.7832],[43.2636,9.7696],[43.265,9.7523],[43.2741,9.7414],[43.2742,9.7255],[43.2721,9.7171],[43.275,9.701],[43.2872,9.6927],[43.2889,9.6782],[43.298,9.6673],[43.3011,9.6527],[43.307,9.6377],[43.3178,9.6296],[43.3358,9.6049],[43.3451,9.5954],[43.3564,9.5771],[43.3553,9.5643],[43.3677,9.5574],[43.3793,9.542],[43.388,9.5254],[43.4054,9.5108],[43.4155,9.4769],[43.4473,9.4571],[43.4557,9.4471],[43.4662,9.4405],[43.4825,9.4353],[43.4924,9.4214],[43.4968,9.4081],[43.5343,9.4055],[43.5463,9.4009],[43.5541,9.3896],[43.5696,9.3847],[43.5814,9.3783],[43.5975,9.3609],[43.6245,9.3461],[43.6288,9.3351],[43.6537,9.317],[43.6668,9.3052],[43.6822,9.2791],[43.7096,9.2695],[43.7246,9.2593],[43.7358,9.2459],[43.7611,9.2313],[43.7705,9.2181],[43.804,9.1973],[43.8429,9.1567],[43.8663,9.1422],[43.8841,9.123],[43.9123,9.1027],[43.9585,9.065],[43.9755,9.037],[44.0028,9.0305],[44.0184,9.0245],[44.0353,9.0068],[44.0531,8.9982],[44.0612,8.9859],[44.1215,8.9619],[44.1564,8.938],[45.6208,8.4429],[46.7358,8.0703],[46.9993,7.9851],[47.9582,8.0126],[46.8036,6.8033],[46.1772,6.1534],[46.1218,6.09],[45.9453,5.9097],[45.8984,5.8569],[45.6682,5.6223],[45.0801,5.0111],[45.0017,4.9322],[44.9621,4.9189],[44.9032,4.9127],[44.827,4.9126],[44.7313,4.9184],[44.6782,4.9131],[44.6264,4.9223],[44.547,4.9212],[44.3833,4.9364],[44.3069,4.9361],[44.2012,4.9385],[44.1501,4.9457],[44.1229,4.9433],[44.0778,4.9351],[44.029,4.9397],[43.8937,4.9128],[43.8639,4.9106],[43.8438,4.9051],[43.8063,4.8988],[43.7879,4.8857],[43.7557,4.8838],[43.7129,4.873],[43.6826,4.8635],[43.6223,4.8494],[43.6121,4.8454],[43.5996,4.8441],[43.5795,4.8386],[43.5691,4.8321],[43.5518,4.8313],[43.5259,4.8165],[43.5106,4.8105],[43.4882,4.8077],[43.4556,4.8008],[43.4274,4.7887],[43.3975,4.7841],[43.3842,4.773],[43.374,4.769],[43.3565,4.7657],[43.3532,4.7562],[43.3247,4.7391],[43.3072,4.7358],[43.2866,4.7254],[43.2704,4.7097],[43.25,4.7018],[43.2295,4.6914],[43.2009,4.6743],[43.1626,4.6582],[43.1516,4.6445],[43.1097,4.6163],[43.0832,4.5942],[43.0671,4.5785],[43.033,4.5546],[43.0267,4.5379],[43.0128,4.5195],[43.0076,4.488],[42.9911,4.4674],[42.9733,4.4322],[42.9576,4.4213],[42.948,4.3952],[42.9163,4.371],[42.9027,4.3551],[42.8894,4.344],[42.8739,4.3356],[42.8604,4.3221],[42.829,4.3004],[42.8153,4.2844],[42.8023,4.2758],[42.777,4.2683],[42.7558,4.2506],[42.7305,4.2431],[42.7148,4.2322],[42.692,4.2245],[42.6521,4.2184],[42.6388,4.2073],[42.6119,4.2098],[42.5962,4.1989],[42.5742,4.201],[42.5459,4.1864],[42.519,4.1888],[42.4359,4.167],[42.3962,4.1633],[42.3446,4.1656],[42.3049,4.1619],[42.2039,4.1614],[42.158,4.1435],[42.1152,4.1327],[42.0782,4.1312],[42.0574,4.1184],[42.0421,4.1124],[42.0137,4.0978],[42.0054,4.0863],[41.9946,4.075],[41.9825,4.0491],[41.9721,4.0427],[41.9588,4.0316],[41.938,4.0187],[41.9268,4.0026],[41.9139,3.9964],[41.9007,3.9853],[41.8836,3.9869],[41.8589,3.9867],[41.8436,3.9807],[41.7988,3.975],[41.7673,3.9804],[41.752,3.9745],[41.7245,3.9696],[41.6976,3.9721],[41.6774,3.9666],[41.6528,3.9664],[41.5784,3.961],[41.5558,3.9557],[41.4972,3.9611],[41.4721,3.9561],[41.433,3.9597],[41.3786,3.9573],[41.332,3.9592],[41.288,3.9633],[41.2151,3.9749],[41.1917,3.9599],[41.1721,3.9617],[41.1463,3.9764],[41.1127,3.9869],[41.1013,3.9977],[41.057,4.0264],[41.0418,4.05],[41.0255,4.0613],[41.0072,4.0778],[40.9814,4.0925],[40.9546,4.1245],[40.9369,4.1483],[40.881,4.1854],[40.8263,4.2372],[40.8056,4.2539],[40.7922,4.2699],[40.7752,4.2772],[40.7586,4.2686],[40.7439,4.258],[40.7211,4.2454],[40.706,4.243],[40.6871,4.2311],[40.6704,4.2294],[40.649,4.2211],[40.4396,4.1341],[40.3998,4.1159],[40.3846,4.101],[40.3726,4.1025],[40.2309,4.0463],[40.1908,4.0361],[40.1264,4.0024],[40.119,3.9963],[40.1066,3.9896],[40.0181,3.9474],[39.8619,3.8641],[39.8543,3.8462],[39.8366,3.8133],[39.771,3.6684],[39.7064,3.6047],[39.6165,3.5125],[39.609,3.5026],[39.5819,3.4781],[39.5786,3.4726],[39.5647,3.4261],[39.5589,3.4124],[39.5439,3.4015],[39.5274,3.3988],[39.5161,3.4044],[39.5116,3.4104],[39.4984,3.4538],[39.4937,3.4575],[39.486,3.4595],[39.4675,3.4566],[39.4237,3.4571],[39.4156,3.4623],[39.4056,3.4646],[39.3326,3.4662],[39.3291,3.4725],[39.3284,3.4782],[39.2988,3.4769],[39.2799,3.4729],[39.2005,3.4791],[39.1349,3.5106],[39.1065,3.5191],[39.0929,3.534],[39.2205,3.6025],[39.2847,3.6231],[39.3996,3.7957],[39.4828,3.942],[39.4997,3.9657],[39.4783,4.0403],[39.5091,4.1144],[39.5288,4.1667],[39.5397,4.2352],[39.567,4.2646],[39.5858,4.2965],[39.6188,4.3685],[39.6421,4.4359]]]]}},{"type":"Feature","properties":{"GID_1":"ETH.10_1","GID_0":"ETH","COUNTRY":"Ethiopia","NAME_1":"SouthernNations,Nationalities","VARNAME_1":"SNNPR","NL_NAME_1":"NA","TYPE_1":"Kilil","ENGTYPE_1":"State","CC_1":"07","HASC_1":"ET.SN","ISO_1":"NA"},"geometry":{"type":"MultiPolygon","coordinates":[[[[36.6464,4.7108],[36.6808,4.6043],[36.6575,4.5804],[36.7126,4.4392],[36.6564,4.44],[36.6403,4.4499],[36.6169,4.4498],[36.5428,4.4397],[36.4539,4.4431],[36.3972,4.4392],[36.3527,4.4427],[36.2651,4.4436],[36.2441,4.4547],[36.2094,4.4448],[36.1555,4.4463],[36.1142,4.45],[36.059,4.4487],[36.0436,4.4512],[35.9969,4.4914],[35.9654,4.5115],[35.9029,4.5896],[35.8732,4.6241],[35.8459,4.6512],[35.826,4.6809],[35.7863,4.7315],[35.7862,4.75],[35.7934,4.8033],[35.7986,4.8783],[35.8046,4.9221],[35.8044,4.9455],[35.8091,4.9938],[35.8099,5.07],[35.8078,5.0865],[35.8142,5.1037],[35.8326,5.1196],[35.8457,5.1411],[35.8546,5.1489],[35.8579,5.1645],[35.8584,5.175],[35.8527,5.189],[35.8489,5.1952],[35.8361,5.2026],[35.8276,5.2228],[35.8239,5.2278],[35.8219,5.2364],[35.8222,5.2481],[35.8238,5.2559],[35.8272,5.261],[35.8418,5.2739],[35.8459,5.2808],[35.8528,5.2839],[35.8576,5.2944],[35.8593,5.3022],[35.8576,5.3095],[35.8543,5.3146],[35.8469,5.3188],[35.8388,5.3206],[35.8351,5.3274],[35.8287,5.3317],[35.8191,5.3313],[35.8132,5.3371],[35.8079,5.3399],[35.7852,5.3428],[35.7625,5.3519],[35.7404,5.3697],[35.6557,5.381],[35.5787,5.4144],[35.5391,5.4144],[35.5333,5.4174],[35.5158,5.4137],[35.5101,5.4173],[35.505,5.4177],[35.4925,5.4122],[35.4869,5.4131],[35.4796,5.411],[35.4687,5.4058],[35.4547,5.3912],[35.4263,5.3725],[35.4103,5.3641],[35.4065,5.3597],[35.374,5.3528],[35.3669,5.3489],[35.3593,5.3473],[35.3347,5.3327],[35.3158,5.329],[35.3081,5.3295],[35.3001,5.3325],[35.2856,5.3759],[35.2851,5.3827],[35.2871,5.3901],[35.2871,5.4024],[35.2905,5.4253],[35.2992,5.4375],[35.2998,5.4454],[35.3043,5.4577],[35.3041,5.4763],[35.2995,5.4905],[35.3002,5.4963],[35.2833,5.5107],[35.1262,5.6152],[35.1213,5.6203],[35.1206,5.628],[35.1249,5.6736],[35.1249,5.6827],[35.1211,5.6908],[35.0956,5.7302],[35.0462,5.8175],[34.9909,5.8954],[34.991,5.9013],[34.9973,5.9245],[34.9868,5.9453],[34.9876,5.9543],[34.9911,5.9702],[34.9978,5.982],[35.002,6.0026],[34.9926,6.0185],[34.992,6.0538],[34.9872,6.0675],[34.9721,6.0847],[34.9654,6.0902],[34.958,6.1199],[34.9574,6.1273],[34.9599,6.1353],[34.9656,6.1445],[34.969,6.1544],[34.9657,6.184],[34.966,6.2009],[34.9641,6.2122],[34.9523,6.2376],[34.949,6.252],[34.9511,6.2678],[34.985,6.2988],[35.0113,6.2803],[35.0383,6.3046],[35.0735,6.3074],[35.0834,6.3181],[35.1061,6.3189],[35.1189,6.3465],[35.1315,6.3955],[35.1434,6.3977],[35.1648,6.3828],[35.1785,6.3793],[35.1995,6.4109],[35.1866,6.4443],[35.1739,6.4665],[35.1856,6.4897],[35.1868,6.5575],[35.1953,6.5974],[35.1862,6.6269],[35.1875,6.6565],[35.1977,6.6802],[35.1782,6.7096],[35.1796,6.7274],[35.1468,6.7611],[35.0799,6.8108],[35.0429,6.8105],[34.9854,6.7982],[34.9337,6.7963],[34.9456,6.8265],[34.969,6.8593],[34.9924,6.864],[34.9979,6.8929],[34.974,6.9252],[34.9457,6.9441],[34.9113,6.9882],[34.9021,7.0309],[34.8843,7.0308],[34.8771,7.0698],[34.8927,7.0915],[34.8906,7.1593],[34.8981,7.1848],[34.9424,7.1929],[34.9656,7.2151],[34.9702,7.234],[34.9779,7.2133],[35.0109,7.1947],[35.0208,7.1858],[35.0539,7.1843],[35.0837,7.1248],[35.1143,7.1021],[35.2046,7.0996],[35.2184,7.108],[35.2345,7.1379],[35.2646,7.1362],[35.2799,7.1294],[35.2999,7.1158],[35.3136,7.1153],[35.3308,7.1271],[35.3545,7.1185],[35.3718,7.117],[35.3804,7.1228],[35.3687,7.1442],[35.353,7.1539],[35.334,7.1799],[35.3344,7.1883],[35.3401,7.1871],[35.3729,7.231],[35.3458,7.239],[35.3534,7.2624],[35.3703,7.2774],[35.3749,7.29],[35.3828,7.3343],[35.3875,7.3507],[35.3923,7.3962],[35.3678,7.4146],[35.3736,7.428],[35.3558,7.4367],[35.3453,7.4529],[35.3289,7.4616],[35.3201,7.463],[35.3096,7.4792],[35.2726,7.4715],[35.2623,7.4802],[35.2537,7.4784],[35.2439,7.4737],[35.2095,7.4719],[35.1893,7.4556],[35.1614,7.4714],[35.1224,7.4786],[35.1207,7.4835],[35.1268,7.4956],[35.1381,7.5121],[35.1462,7.5195],[35.1719,7.5328],[35.1701,7.5551],[35.1647,7.5804],[35.1663,7.6149],[35.1457,7.6302],[35.1156,7.6308],[35.116,7.6451],[35.1729,7.6542],[35.2123,7.6515],[35.2203,7.6626],[35.2202,7.6802],[35.2227,7.7031],[35.2479,7.7265],[35.2756,7.746],[35.2899,7.7472],[35.293,7.7519],[35.3108,7.761],[35.3249,7.7653],[35.3409,7.7766],[35.342,7.8214],[35.3499,7.8349],[35.3581,7.843],[35.372,7.8325],[35.3891,7.827],[35.4006,7.8296],[35.4095,7.8434],[35.4184,7.8641],[35.4287,7.8808],[35.4335,7.8828],[35.4597,7.8725],[35.4743,7.8735],[35.4902,7.8826],[35.4972,7.8803],[35.5048,7.8847],[35.5122,7.8923],[35.5207,7.8956],[35.5305,7.88],[35.5362,7.8494],[35.5444,7.831],[35.5546,7.8202],[35.5702,7.8129],[35.5896,7.8086],[35.6062,7.8096],[35.6183,7.8147],[35.667,7.8449],[35.6764,7.8535],[35.6937,7.8644],[35.7035,7.8591],[35.7164,7.8555],[35.7395,7.8666],[35.7621,7.8826],[35.7761,7.8992],[35.7997,7.9326],[35.7999,7.9407],[35.7953,7.948],[35.7825,7.954],[35.7714,7.9629],[35.7674,7.9691],[35.7385,7.9888],[35.7229,8.0225],[35.728,8.0396],[35.744,8.0509],[35.7533,8.0678],[35.7658,8.0812],[35.7981,8.0791],[35.8163,8.0824],[35.8609,8.0772],[35.8727,8.0588],[35.888,8.0005],[35.8988,7.9711],[35.9051,7.946],[35.9024,7.9262],[35.8869,7.8925],[35.8742,7.8758],[35.8591,7.8601],[35.8511,7.848],[35.8486,7.839],[35.86,7.8293],[35.8751,7.8218],[35.8978,7.8069],[35.9226,7.7867],[35.9416,7.7739],[35.9864,7.7547],[35.9972,7.7451],[36.0206,7.692],[36.0419,7.6744],[36.0519,7.6539],[36.0471,7.6343],[36.0325,7.5915],[36.0353,7.5726],[36.0451,7.5655],[36.0622,7.5575],[36.0869,7.5539],[36.1276,7.5556],[36.1566,7.5426],[36.1809,7.5236],[36.2006,7.5036],[36.2247,7.4844],[36.2795,7.4633],[36.3018,7.4499],[36.3487,7.4454],[36.3746,7.4156],[36.4063,7.4085],[36.4532,7.4174],[36.4702,7.4154],[36.4839,7.416],[36.5983,7.369],[36.606,7.3684],[36.6228,7.3792],[36.633,7.3779],[36.6381,7.3712],[36.6517,7.345],[36.6726,7.328],[36.6941,7.3131],[36.7199,7.2985],[36.7625,7.2659],[36.7911,7.2523],[36.8409,7.326],[36.8792,7.3297],[36.9555,7.2605],[36.9658,7.2419],[36.9646,7.2247],[37.0033,7.2344],[37.0395,7.24],[37.0681,7.2352],[37.1048,7.2245],[37.1286,7.2284],[37.1542,7.2407],[37.1828,7.2649],[37.2116,7.2927],[37.2378,7.3121],[37.2623,7.3254],[37.2876,7.3344],[37.3312,7.3434],[37.3312,7.3497],[37.3566,7.3609],[37.3797,7.38],[37.3903,7.4024],[37.4072,7.4922],[37.4387,7.5461],[37.4451,7.5643],[37.4354,7.5841],[37.4198,7.6338],[37.407,7.6576],[37.4012,7.6827],[37.4,7.7411],[37.4048,7.8273],[37.4118,7.8539],[37.4344,7.8981],[37.4367,7.9185],[37.4289,7.9307],[37.4166,7.9436],[37.399,7.954],[37.3898,7.962],[37.3877,7.9744],[37.3918,7.9929],[37.4041,7.9936],[37.4094,7.9983],[37.4167,8.0012],[37.4596,8.0077],[37.4776,8.0142],[37.4908,8.0171],[37.5017,8.0118],[37.514,7.9997],[37.5184,7.9919],[37.5217,7.9771],[37.5328,7.9596],[37.5393,7.9539],[37.5494,7.9493],[37.5575,7.9483],[37.5728,7.9522],[37.6028,7.9649],[37.6011,7.9741],[37.6016,8.0107],[37.5918,8.074],[37.5921,8.0931],[37.5954,8.1117],[37.6058,8.1504],[37.617,8.1772],[37.6239,8.2],[37.6217,8.209],[37.5735,8.2249],[37.5173,8.2364],[37.4882,8.2524],[37.472,8.2661],[37.4641,8.2824],[37.4626,8.3059],[37.4662,8.3313],[37.4714,8.3507],[37.4986,8.4036],[37.5122,8.417],[37.5349,8.4236],[37.558,8.4255],[37.5761,8.4141],[37.598,8.3653],[37.612,8.3541],[37.6661,8.3835],[37.6787,8.3777],[37.6922,8.3536],[37.7045,8.337],[37.717,8.3341],[37.748,8.3518],[37.7655,8.3471],[37.779,8.3397],[37.7966,8.3347],[37.8163,8.3318],[37.8391,8.3321],[37.8629,8.3357],[37.8876,8.3499],[37.91,8.3705],[37.928,8.3782],[37.9484,8.3674],[37.9882,8.3595],[38.0082,8.3725],[38.028,8.3903],[38.0389,8.3892],[38.0667,8.376],[38.0771,8.3806],[38.0865,8.3901],[38.103,8.389],[38.11,8.3904],[38.1225,8.4066],[38.139,8.4094],[38.1642,8.4081],[38.18,8.3929],[38.2175,8.4088],[38.2383,8.4093],[38.2663,8.4066],[38.282,8.3996],[38.2893,8.3807],[38.3008,8.3764],[38.3115,8.3699],[38.3122,8.3524],[38.3079,8.3299],[38.307,8.2997],[38.3219,8.2723],[38.3332,8.2586],[38.3473,8.2542],[38.3755,8.2659],[38.3824,8.2735],[38.4009,8.2795],[38.4216,8.289],[38.4302,8.2988],[38.4325,8.3122],[38.4407,8.3353],[38.4517,8.385],[38.4616,8.3998],[38.4683,8.435],[38.4779,8.4474],[38.5015,8.444],[38.5268,8.4576],[38.5758,8.4449],[38.5842,8.4327],[38.5909,8.426],[38.6043,8.4316],[38.6168,8.4311],[38.6396,8.4121],[38.6545,8.3946],[38.6616,8.376],[38.6672,8.3505],[38.666,8.327],[38.651,8.2851],[38.6621,8.2708],[38.7021,8.2445],[38.7159,8.2312],[38.716,8.2194],[38.6932,8.2034],[38.6822,8.1904],[38.6786,8.1712],[38.6845,8.1225],[38.6793,8.0958],[38.6728,8.0899],[38.6666,8.0956],[38.6541,8.1137],[38.6351,8.1323],[38.6035,8.2229],[38.6007,8.2496],[38.5935,8.2602],[38.5607,8.2661],[38.5493,8.2627],[38.5421,8.2461],[38.5426,8.2258],[38.568,8.1939],[38.5815,8.1719],[38.5873,8.1562],[38.588,8.1424],[38.5885,8.1272],[38.5839,8.1081],[38.5934,8.0909],[38.6219,8.0684],[38.6161,8.0567],[38.6127,8.0433],[38.6277,8.0336],[38.6245,8.0262],[38.61,8.0116],[38.6122,8.0068],[38.5974,7.9906],[38.5887,7.9611],[38.5865,7.9383],[38.5758,7.9243],[38.5666,7.9054],[38.5631,7.8852],[38.5495,7.8709],[38.5129,7.8489],[38.5035,7.831],[38.5,7.8112],[38.4924,7.7954],[38.4448,7.7595],[38.4387,7.7189],[38.4258,7.6968],[38.4124,7.6816],[38.4109,7.6622],[38.4182,7.6425],[38.4203,7.6243],[38.4008,7.5953],[38.401,7.5787],[38.4189,7.5695],[38.4257,7.5539],[38.4295,7.5339],[38.4268,7.5147],[38.4139,7.5042],[38.3917,7.5019],[38.3412,7.4786],[38.3272,7.4617],[38.3282,7.4564],[38.3252,7.4339],[38.3189,7.4142],[38.3089,7.4015],[38.2925,7.3914],[38.2794,7.3806],[38.2772,7.3612],[38.2815,7.3387],[38.2757,7.3189],[38.2652,7.3067],[38.2336,7.2879],[38.22,7.2755],[38.2058,7.2655],[38.1986,7.2615],[38.1811,7.2579],[38.144,7.2322],[38.1043,7.2109],[38.087,7.1949],[38.078,7.1803],[38.0764,7.1541],[38.0695,7.1224],[38.0665,7.0877],[38.0614,7.0722],[38.0642,7.0434],[38.0734,7.0296],[38.0879,7.0229],[38.1019,7.0108],[38.1089,6.9996],[38.1171,6.9809],[38.1293,6.9738],[38.1466,6.9775],[38.1701,7.0009],[38.1938,7.0123],[38.2164,7.0144],[38.2379,7.0201],[38.2544,7.0599],[38.2892,7.1071],[38.3053,7.1216],[38.3134,7.1471],[38.3219,7.1617],[38.3422,7.1645],[38.3569,7.1459],[38.3781,7.1298],[38.4006,7.1215],[38.4208,7.1225],[38.4425,7.1268],[38.46,7.1182],[38.4639,7.0998],[38.48,7.0904],[38.5051,7.0878],[38.5281,7.091],[38.5461,7.0909],[38.5664,7.1123],[38.5836,7.1263],[38.6115,7.1242],[38.6303,7.1108],[38.6462,7.0955],[38.637,7.0661],[38.6535,7.0617],[38.668,7.0599],[38.6809,7.0484],[38.6845,7.034],[38.6781,7.0288],[38.6744,7.0165],[38.6774,7.0054],[38.6894,7.0009],[38.6977,7.0138],[38.7105,7.013],[38.7144,6.9914],[38.7112,6.9738],[38.7005,6.9686],[38.6948,6.9575],[38.7012,6.9451],[38.7046,6.9306],[38.6998,6.9033],[38.7141,6.8606],[38.6983,6.8486],[38.6676,6.8323],[38.6399,6.8127],[38.6364,6.7997],[38.6357,6.7717],[38.6435,6.7687],[38.6582,6.7696],[38.672,6.7623],[38.6784,6.749],[38.6885,6.7444],[38.7056,6.742],[38.7209,6.7301],[38.7274,6.712],[38.7423,6.7009],[38.7542,6.697],[38.7793,6.7002],[38.8099,6.7013],[38.8179,6.7036],[38.8335,6.6917],[38.8377,6.6749],[38.8551,6.6687],[38.9018,6.6657],[38.9179,6.6592],[38.9344,6.6556],[38.9494,6.6438],[38.9445,6.6303],[38.9417,6.6103],[38.9596,6.6009],[39.0322,6.6118],[39.0593,6.6088],[39.0645,6.5988],[39.0529,6.584],[39.0484,6.5698],[39.0526,6.557],[39.0698,6.5533],[39.0862,6.5452],[39.0966,6.5216],[39.0954,6.4721],[39.1,6.4556],[39.1075,6.4377],[39.1212,6.3806],[39.1274,6.3444],[39.1257,6.3219],[39.1195,6.299],[39.1094,6.2873],[39.0909,6.2708],[39.086,6.252],[39.0997,6.2185],[39.1036,6.2022],[39.1132,6.1766],[39.1304,6.166],[39.1319,6.1588],[39.1029,6.1573],[39.0797,6.153],[39.0556,6.1459],[39.0345,6.1374],[38.9881,6.1471],[38.9606,6.1593],[38.9501,6.1804],[38.9365,6.2003],[38.9209,6.2286],[38.8977,6.2586],[38.8856,6.2848],[38.8741,6.3008],[38.8525,6.3203],[38.832,6.3432],[38.8121,6.3559],[38.7715,6.3998],[38.758,6.4091],[38.7387,6.409],[38.7072,6.3925],[38.6906,6.4062],[38.672,6.409],[38.6615,6.4191],[38.645,6.4232],[38.6267,6.417],[38.6063,6.4228],[38.5833,6.437],[38.5665,6.4405],[38.5376,6.4368],[38.5038,6.4363],[38.4753,6.4304],[38.4533,6.4168],[38.441,6.4054],[38.4276,6.3859],[38.4238,6.3656],[38.4218,6.3482],[38.4249,6.3066],[38.4275,6.3002],[38.4254,6.2901],[38.433,6.2655],[38.439,6.2169],[38.4347,6.1988],[38.3942,6.1818],[38.377,6.1645],[38.3653,6.1428],[38.3625,6.1202],[38.3515,6.0962],[38.3199,6.0474],[38.3139,6.0278],[38.2792,6.0063],[38.2717,5.9866],[38.2823,5.9707],[38.2931,5.9733],[38.3045,5.98],[38.319,5.9751],[38.3275,5.9554],[38.3383,5.9556],[38.3748,5.943],[38.3884,5.933],[38.3961,5.9201],[38.3809,5.904],[38.3581,5.9021],[38.3253,5.8688],[38.3037,5.8614],[38.2704,5.8685],[38.2545,5.8585],[38.2392,5.8444],[38.2234,5.8386],[38.208,5.8402],[38.1984,5.8495],[38.1997,5.8648],[38.2089,5.8791],[38.2148,5.8932],[38.2118,5.9167],[38.2037,5.935],[38.181,5.9417],[38.1702,5.957],[38.1593,5.985],[38.1503,6.0004],[38.1388,6.0103],[38.1216,6.0167],[38.1165,6.0502],[38.105,6.066],[38.1001,6.0773],[38.0986,6.0871],[38.0799,6.117],[38.0867,6.161],[38.1023,6.1804],[38.117,6.1671],[38.1251,6.1551],[38.1414,6.1545],[38.1584,6.1595],[38.171,6.1669],[38.1874,6.1822],[38.1979,6.2064],[38.1933,6.2262],[38.1791,6.2383],[38.1719,6.2553],[38.1737,6.2668],[38.1818,6.2843],[38.1884,6.3043],[38.1976,6.319],[38.2139,6.3302],[38.2314,6.3311],[38.2486,6.3363],[38.2725,6.3479],[38.2882,6.3598],[38.2932,6.372],[38.2928,6.3959],[38.2966,6.4157],[38.2829,6.4375],[38.2601,6.4522],[38.2456,6.4682],[38.2215,6.4611],[38.2155,6.4635],[38.1706,6.4498],[38.1552,6.4393],[38.1435,6.4582],[38.1497,6.4966],[38.1393,6.506],[38.1145,6.4996],[38.1011,6.5127],[38.0907,6.5261],[38.0516,6.5347],[38.0335,6.5615],[38.0159,6.5756],[37.9969,6.5756],[37.9834,6.5569],[37.9688,6.549],[37.9527,6.5496],[37.9327,6.5572],[37.9185,6.5744],[37.9126,6.5907],[37.8928,6.5961],[37.8715,6.5822],[37.8425,6.5417],[37.8146,6.5106],[37.8078,6.5007],[37.7999,6.4782],[37.7963,6.4495],[37.7975,6.4292],[37.8078,6.4102],[37.8196,6.3934],[37.8401,6.3787],[37.8482,6.3317],[37.8503,6.3268],[37.8522,6.3048],[37.848,6.2788],[37.8403,6.2483],[37.8256,6.2207],[37.8098,6.1961],[37.7905,6.1725],[37.7781,6.1496],[37.7747,6.1239],[37.7757,6.1136],[37.7777,6.0981],[37.7851,6.0726],[37.7898,6.0494],[37.7832,6.0106],[37.7915,5.9959],[37.8037,5.9932],[37.8133,5.9978],[37.8271,6.01],[37.843,6.0109],[37.8565,5.999],[37.8655,5.9866],[37.8805,5.985],[37.895,5.9745],[37.904,5.9605],[37.9228,5.9601],[37.9527,5.9633],[37.9686,5.956],[37.9776,5.9278],[37.979,5.9076],[37.9825,5.8878],[38.0071,5.8493],[38.0123,5.8043],[38.0199,5.79],[38.0392,5.7724],[38.0542,5.7641],[38.0721,5.7626],[38.0889,5.7456],[38.0871,5.7213],[38.0752,5.6889],[38.0408,5.6736],[38.0241,5.6601],[38.008,5.6502],[37.9775,5.6494],[37.9435,5.6395],[37.9302,5.6167],[37.9411,5.5851],[37.9415,5.5684],[37.9478,5.5377],[37.9493,5.5076],[37.9468,5.4743],[37.9402,5.4499],[37.9352,5.423],[37.9193,5.396],[37.9012,5.3732],[37.8964,5.3499],[37.9048,5.304],[37.9044,5.2794],[37.9008,5.2449],[37.8851,5.2343],[37.8527,5.2346],[37.8271,5.2497],[37.8101,5.2683],[37.7926,5.2742],[37.7728,5.2834],[37.7471,5.2766],[37.7289,5.2922],[37.7009,5.3059],[37.6742,5.3076],[37.6467,5.2993],[37.6373,5.2832],[37.6297,5.266],[37.5798,5.2477],[37.5779,5.2424],[37.5514,5.2339],[37.5179,5.2205],[37.4913,5.2029],[37.4656,5.1932],[37.4172,5.1666],[37.3672,5.1551],[37.3407,5.1596],[37.3172,5.1735],[37.2924,5.1944],[37.2381,5.1994],[37.2169,5.2127],[37.1972,5.2103],[37.1818,5.1939],[37.1122,5.1863],[37.0821,5.1864],[37.0033,5.1991],[36.9831,5.1924],[36.949,5.1947],[36.9212,5.1451],[36.893,5.1098],[36.8822,5.075],[36.8607,4.9788],[36.8648,4.9442],[36.8609,4.9351],[36.8635,4.793],[36.8547,4.7361],[36.8285,4.7092],[36.6464,4.7108]]]]}},{"type":"Feature","properties":{"GID_1":"ETH.11_1","GID_0":"ETH","COUNTRY":"Ethiopia","NAME_1":"Tigray","VARNAME_1":"Tegré|Tigrai|Tigre","NL_NAME_1":"NA","TYPE_1":"Kilil","ENGTYPE_1":"State","CC_1":"01","HASC_1":"ET.TI","ISO_1":"ET-TI"},"geometry":{"type":"MultiPolygon","coordinates":[[[[39.3338,12.3006],[39.3217,12.3049],[39.3052,12.2973],[39.2909,12.2961],[39.2848,12.2997],[39.2802,12.305],[39.2635,12.3304],[39.2629,12.3347],[39.2512,12.3441],[39.2455,12.3529],[39.2465,12.3599],[39.2399,12.3945],[39.2418,12.4036],[39.2414,12.4256],[39.2362,12.449],[39.2364,12.4731],[39.2309,12.4862],[39.2316,12.4931],[39.2298,12.5011],[39.2223,12.5167],[39.2227,12.5223],[39.2181,12.5301],[39.2176,12.536],[39.2143,12.5434],[39.2087,12.5496],[39.2092,12.5606],[39.2043,12.576],[39.183,12.6123],[39.1834,12.6303],[39.1744,12.6435],[39.1814,12.6527],[39.1989,12.6604],[39.212,12.6616],[39.2308,12.6665],[39.2389,12.6631],[39.2657,12.6771],[39.2805,12.688],[39.2855,12.7044],[39.2695,12.7232],[39.2739,12.7266],[39.2809,12.7433],[39.2789,12.7585],[39.2677,12.7713],[39.2758,12.7878],[39.2957,12.7855],[39.3036,12.7933],[39.3072,12.8117],[39.2777,12.826],[39.2904,12.8379],[39.3101,12.8522],[39.3068,12.8663],[39.303,12.8701],[39.2949,12.8709],[39.279,12.8562],[39.2631,12.8941],[39.2587,12.9147],[39.2508,12.918],[39.2326,12.9167],[39.2153,12.9221],[39.2033,12.9289],[39.1928,12.9281],[39.1748,12.9382],[39.1635,12.9484],[39.1548,12.9498],[39.1504,12.9532],[39.1419,12.9558],[39.1191,12.9609],[39.1005,12.9588],[39.0829,12.9593],[39.0741,12.9761],[39.0536,12.9907],[39.0446,12.9934],[39.0343,13.0005],[39.0144,13.0016],[39.0096,13.0039],[39.0002,13.0034],[38.9945,13.0117],[39.0043,13.0234],[39.0001,13.0389],[38.994,13.0453],[38.9905,13.0628],[38.9898,13.0813],[38.9786,13.099],[39.0102,13.114],[39.0202,13.1269],[39.0263,13.1279],[39.0369,13.1342],[39.0426,13.1556],[39.0416,13.1615],[39.036,13.1699],[39.0167,13.1787],[38.9974,13.2034],[38.9848,13.2028],[38.9648,13.2078],[38.9558,13.212],[38.9563,13.2192],[38.9534,13.2238],[38.9517,13.2375],[38.9296,13.2357],[38.9186,13.2299],[38.9133,13.2245],[38.8932,13.2234],[38.8762,13.2205],[38.8672,13.2153],[38.8631,13.2095],[38.8503,13.2145],[38.8383,13.2291],[38.8339,13.2319],[38.8191,13.2347],[38.8007,13.2473],[38.7897,13.2501],[38.7792,13.2494],[38.7433,13.265],[38.7316,13.2623],[38.7299,13.2692],[38.7355,13.2819],[38.7401,13.2868],[38.7393,13.2964],[38.7352,13.3024],[38.741,13.3074],[38.7382,13.3123],[38.7369,13.3303],[38.7417,13.3335],[38.7418,13.3398],[38.7337,13.3498],[38.7302,13.3654],[38.7372,13.3777],[38.7333,13.3841],[38.7331,13.3988],[38.7219,13.4081],[38.7187,13.4028],[38.7057,13.3893],[38.6691,13.3919],[38.6486,13.3965],[38.6323,13.4042],[38.6224,13.4112],[38.6179,13.4283],[38.6158,13.4514],[38.6333,13.4727],[38.6482,13.4814],[38.6613,13.4847],[38.6764,13.4834],[38.6733,13.4919],[38.676,13.4976],[38.6777,13.5113],[38.6682,13.5334],[38.6622,13.5312],[38.636,13.5063],[38.6225,13.4954],[38.614,13.4907],[38.6054,13.4907],[38.5901,13.5061],[38.5796,13.5035],[38.573,13.4977],[38.5675,13.4865],[38.5621,13.4833],[38.5342,13.4818],[38.5117,13.4729],[38.4842,13.4697],[38.461,13.4596],[38.469,13.4754],[38.4655,13.4797],[38.4674,13.4849],[38.4983,13.4845],[38.4907,13.4958],[38.4968,13.5068],[38.5029,13.5115],[38.5086,13.5112],[38.5222,13.5174],[38.5326,13.5187],[38.5425,13.5258],[38.5507,13.5379],[38.5539,13.5503],[38.5493,13.5526],[38.5324,13.5533],[38.5014,13.5579],[38.4899,13.558],[38.4776,13.5523],[38.4735,13.5573],[38.4729,13.5641],[38.4652,13.5676],[38.4585,13.5598],[38.4536,13.5569],[38.4428,13.5605],[38.4433,13.5689],[38.451,13.5846],[38.4408,13.5844],[38.4327,13.5797],[38.4264,13.5713],[38.4238,13.5613],[38.4065,13.5394],[38.3994,13.5397],[38.3993,13.5455],[38.3912,13.5534],[38.3856,13.5516],[38.3798,13.5445],[38.3655,13.5522],[38.36,13.553],[38.3494,13.5424],[38.3412,13.5376],[38.3279,13.5503],[38.3251,13.5433],[38.326,13.5344],[38.32,13.5239],[38.323,13.5096],[38.3199,13.5022],[38.2789,13.4855],[38.2677,13.4878],[38.2591,13.4862],[38.2498,13.4962],[38.248,13.5017],[38.2431,13.4967],[38.2273,13.4892],[38.2202,13.4893],[38.2113,13.4868],[38.2009,13.4801],[38.1885,13.4844],[38.1737,13.4934],[38.1585,13.4828],[38.1552,13.4765],[38.1452,13.4717],[38.1353,13.4787],[38.1299,13.4847],[38.1284,13.4923],[38.121,13.5063],[38.1153,13.4943],[38.0829,13.4837],[38.0707,13.4764],[38.0594,13.4672],[38.052,13.4679],[38.0456,13.4801],[38.0369,13.4828],[38.0299,13.4828],[38.0244,13.4856],[38.0207,13.4813],[38.0149,13.4865],[38.0081,13.5008],[38.0012,13.5011],[37.9684,13.4937],[37.9625,13.4896],[37.9465,13.4664],[37.9041,13.447],[37.8872,13.4534],[37.8751,13.4677],[37.8664,13.4751],[37.8169,13.4632],[37.8119,13.4797],[37.809,13.5191],[37.7927,13.5206],[37.7849,13.5392],[37.769,13.5626],[37.7739,13.5743],[37.7841,13.5877],[37.7846,13.5973],[37.7748,13.6117],[37.7761,13.6335],[37.7694,13.6279],[37.7644,13.6184],[37.7651,13.6022],[37.7607,13.5965],[37.7599,13.591],[37.7539,13.5912],[37.7458,13.5781],[37.7461,13.5709],[37.7357,13.5721],[37.727,13.5634],[37.7201,13.5462],[37.7144,13.542],[37.7155,13.5345],[37.7096,13.5302],[37.7079,13.5212],[37.6987,13.4954],[37.6949,13.4883],[37.6909,13.4847],[37.6941,13.4724],[37.6854,13.4653],[37.6833,13.4597],[37.679,13.4565],[37.6768,13.4507],[37.6657,13.4464],[37.6622,13.4421],[37.6566,13.4414],[37.6557,13.4348],[37.6371,13.4139],[37.6254,13.4082],[37.6176,13.4079],[37.611,13.4111],[37.6045,13.4089],[37.5902,13.3976],[37.5823,13.397],[37.5672,13.3882],[37.5615,13.3871],[37.5572,13.3903],[37.552,13.3886],[37.5318,13.3776],[37.5259,13.3713],[37.5178,13.3665],[37.4949,13.3678],[37.4901,13.3632],[37.4828,13.3643],[37.4765,13.3677],[37.4715,13.3669],[37.462,13.3595],[37.4501,13.3549],[37.4405,13.3541],[37.4376,13.3583],[37.4313,13.3595],[37.4249,13.3635],[37.4158,13.374],[37.4095,13.3701],[37.403,13.3617],[37.3958,13.3578],[37.3887,13.3563],[37.3652,13.3599],[37.359,13.3575],[37.3554,13.3513],[37.3519,13.3426],[37.3525,13.3344],[37.3504,13.3267],[37.3443,13.3244],[37.339,13.3186],[37.3355,13.3104],[37.3218,13.2972],[37.3127,13.2975],[37.2806,13.2849],[37.2759,13.2884],[37.2638,13.29],[37.2559,13.295],[37.2505,13.295],[37.2462,13.2922],[37.2398,13.2769],[37.2244,13.2747],[37.2141,13.2658],[37.211,13.2594],[37.2047,13.2557],[37.1857,13.2825],[37.1755,13.2885],[37.1635,13.2926],[37.1577,13.2978],[37.1503,13.3008],[37.1275,13.3051],[37.1157,13.3116],[37.0987,13.3164],[37.0839,13.3147],[37.0784,13.3118],[37.0764,13.318],[37.0693,13.3174],[37.0656,13.3299],[37.0525,13.333],[37.0397,13.351],[37.035,13.3533],[37.0253,13.3546],[37.013,13.3605],[37.0018,13.3567],[36.9968,13.359],[36.9821,13.3613],[36.9762,13.3647],[36.9704,13.3654],[36.9645,13.3696],[36.9598,13.3673],[36.9569,13.3624],[36.9516,13.3648],[36.9461,13.3698],[36.9386,13.38],[36.9297,13.3721],[36.9269,13.3776],[36.9192,13.3768],[36.9154,13.3828],[36.909,13.3845],[36.9051,13.3882],[36.9039,13.3946],[36.8955,13.4069],[36.8812,13.4075],[36.8738,13.4132],[36.8712,13.419],[36.8542,13.4314],[36.8447,13.4354],[36.8437,13.4409],[36.8379,13.4446],[36.8248,13.4482],[36.8171,13.4465],[36.8125,13.4352],[36.8086,13.4185],[36.8025,13.4134],[36.7884,13.4076],[36.7832,13.4029],[36.7724,13.3889],[36.7705,13.3819],[36.7669,13.3781],[36.7622,13.3741],[36.7494,13.3714],[36.7448,13.367],[36.7347,13.3631],[36.7314,13.3687],[36.722,13.3666],[36.7148,13.3671],[36.7054,13.3721],[36.6851,13.3748],[36.6646,13.3666],[36.6562,13.3691],[36.6491,13.3802],[36.6439,13.3781],[36.6358,13.3825],[36.6281,13.3819],[36.6095,13.3752],[36.6048,13.3776],[36.602,13.3821],[36.5927,13.389],[36.5887,13.4028],[36.5793,13.4116],[36.5763,13.4176],[36.5695,13.4253],[36.5664,13.4462],[36.5709,13.4497],[36.5729,13.4562],[36.571,13.4669],[36.5743,13.4779],[36.5788,13.4822],[36.5964,13.4891],[36.6011,13.4984],[36.5981,13.5047],[36.5797,13.5203],[36.5724,13.5223],[36.5647,13.533],[36.5665,13.5391],[36.564,13.5474],[36.5585,13.5515],[36.5617,13.5555],[36.5603,13.5633],[36.5547,13.5713],[36.5399,13.5755],[36.5378,13.582],[36.5316,13.5817],[36.5196,13.5855],[36.5261,13.6065],[36.5128,13.6313],[36.5102,13.6496],[36.5058,13.6525],[36.5044,13.6651],[36.4984,13.6657],[36.4942,13.6699],[36.4824,13.6886],[36.4777,13.6935],[36.4758,13.7004],[36.4786,13.7048],[36.4778,13.7208],[36.4838,13.7271],[36.4807,13.7347],[36.4676,13.7431],[36.4554,13.7544],[36.4512,13.7687],[36.4991,13.8468],[36.4628,13.971],[36.5405,14.1981],[36.5431,14.2507],[36.5495,14.2502],[36.5617,14.2606],[36.5611,14.2661],[36.5566,14.2703],[36.5527,14.2768],[36.5638,14.2828],[36.5781,14.287],[36.5842,14.2831],[36.5996,14.2898],[36.6182,14.2929],[36.6213,14.3062],[36.6288,14.3076],[36.6512,14.3045],[36.6858,14.2959],[36.6909,14.2963],[36.7118,14.3067],[36.7284,14.3098],[36.7343,14.3152],[36.7465,14.3177],[36.7654,14.3156],[36.7782,14.3167],[36.8082,14.3131],[36.8249,14.3137],[36.827,14.3089],[36.8322,14.3069],[36.8407,14.3087],[36.8486,14.3163],[36.8633,14.3178],[36.8782,14.3109],[36.8946,14.3108],[36.9003,14.3047],[36.9148,14.2995],[36.9326,14.2957],[36.9377,14.2912],[36.9437,14.2891],[36.9562,14.2904],[36.9626,14.2899],[36.9692,14.2871],[36.9744,14.2802],[36.9814,14.2745],[36.9864,14.2631],[36.9903,14.2598],[36.9971,14.2579],[37.0081,14.2495],[37.0175,14.2506],[37.0328,14.2583],[37.038,14.2642],[37.0436,14.2664],[37.0498,14.2661],[37.057,14.2624],[37.0651,14.2619],[37.0715,14.2666],[37.0893,14.268],[37.0938,14.2717],[37.096,14.2825],[37.1007,14.2859],[37.1034,14.2908],[37.1028,14.3066],[37.1047,14.3208],[37.1004,14.3265],[37.0996,14.3333],[37.1084,14.3561],[37.1135,14.3612],[37.1138,14.3672],[37.1221,14.3795],[37.1288,14.399],[37.1338,14.4054],[37.1415,14.4063],[37.1569,14.4158],[37.1642,14.4173],[37.1711,14.4134],[37.1797,14.4145],[37.1935,14.4204],[37.1999,14.4248],[37.212,14.4369],[37.2269,14.4404],[37.2383,14.4322],[37.2479,14.4295],[37.2533,14.4302],[37.2581,14.4348],[37.283,14.4387],[37.2899,14.4426],[37.2993,14.4446],[37.3079,14.4426],[37.3143,14.4287],[37.3275,14.4226],[37.3367,14.4111],[37.344,14.409],[37.3453,14.4158],[37.3589,14.4172],[37.3771,14.4285],[37.4033,14.4714],[37.4297,14.4802],[37.4401,14.4775],[37.4431,14.4706],[37.4711,14.4687],[37.489,14.4731],[37.5075,14.4613],[37.5248,14.46],[37.5488,14.4461],[37.5592,14.4523],[37.5725,14.4554],[37.5767,14.4679],[37.5954,14.4776],[37.6572,14.4947],[37.6707,14.5042],[37.6723,14.5217],[37.6789,14.5274],[37.698,14.5626],[37.7006,14.5789],[37.7099,14.5886],[37.7237,14.6238],[37.7415,14.6424],[37.753,14.6427],[37.7736,14.6304],[37.7827,14.6537],[37.7752,14.6785],[37.7736,14.6982],[37.7819,14.7349],[37.8048,14.7689],[37.8326,14.8052],[37.8495,14.8125],[37.8757,14.7999],[37.9021,14.81],[37.9228,14.8261],[37.9403,14.8455],[37.9437,14.8414],[37.9455,14.8347],[37.9504,14.8322],[37.9592,14.833],[37.971,14.8304],[37.9749,14.818],[37.9745,14.8016],[37.9879,14.8079],[37.9923,14.792],[37.992,14.7792],[37.9942,14.7735],[37.9996,14.7754],[38.0036,14.7716],[38.0048,14.7663],[38.0158,14.7652],[38.0205,14.7608],[38.0215,14.755],[38.0174,14.7426],[38.0183,14.7366],[38.0301,14.7279],[38.0404,14.7166],[38.0535,14.7108],[38.0646,14.7113],[38.0779,14.7074],[38.0915,14.7066],[38.0954,14.7014],[38.1056,14.6975],[38.1092,14.6901],[38.1201,14.6838],[38.1276,14.6819],[38.1321,14.6785],[38.1344,14.6725],[38.1393,14.6673],[38.1461,14.6686],[38.1503,14.6748],[38.1562,14.6765],[38.162,14.6759],[38.1738,14.6798],[38.18,14.6766],[38.1836,14.6793],[38.1874,14.6892],[38.2027,14.6859],[38.21,14.6868],[38.215,14.6828],[38.2282,14.6858],[38.2371,14.6831],[38.2431,14.6779],[38.2516,14.675],[38.2562,14.6698],[38.2611,14.6671],[38.2645,14.6388],[38.2691,14.6344],[38.2663,14.6278],[38.2645,14.6141],[38.2711,14.6105],[38.2861,14.6075],[38.292,14.6024],[38.2931,14.5948],[38.3079,14.5851],[38.3104,14.5787],[38.3153,14.5735],[38.3134,14.5681],[38.3152,14.5507],[38.3297,14.5315],[38.3364,14.5289],[38.3409,14.522],[38.3398,14.5138],[38.3432,14.5077],[38.3493,14.5095],[38.3559,14.5067],[38.3561,14.4993],[38.3622,14.4868],[38.3689,14.4844],[38.3734,14.4802],[38.3884,14.4796],[38.3948,14.4815],[38.3981,14.4765],[38.3989,14.4701],[38.4015,14.465],[38.4208,14.4637],[38.4322,14.428],[38.4387,14.4268],[38.4427,14.4222],[38.4427,14.4161],[38.4474,14.4104],[38.4562,14.4094],[38.4723,14.4131],[38.4776,14.4166],[38.4837,14.4182],[38.4986,14.4119],[38.506,14.4133],[38.5159,14.4051],[38.521,14.4109],[38.5374,14.4201],[38.5436,14.4225],[38.5491,14.4223],[38.5547,14.4257],[38.5611,14.426],[38.5721,14.433],[38.579,14.4336],[38.5944,14.4386],[38.6083,14.4386],[38.6158,14.4335],[38.6313,14.4405],[38.6391,14.4395],[38.6468,14.4412],[38.6542,14.445],[38.6616,14.4455],[38.6649,14.4504],[38.6751,14.453],[38.6872,14.4602],[38.7029,14.4653],[38.7158,14.461],[38.7305,14.4589],[38.7502,14.4651],[38.7589,14.4646],[38.7748,14.4669],[38.794,14.4632],[38.8152,14.4743],[38.8167,14.4819],[38.8245,14.482],[38.8352,14.4853],[38.8484,14.4957],[38.8642,14.494],[38.9049,14.5012],[38.921,14.5113],[38.9373,14.5321],[38.9496,14.5311],[38.9541,14.536],[38.9673,14.5385],[38.9747,14.5416],[38.9809,14.5527],[38.9939,14.5656],[39.0012,14.5858],[39.01,14.5903],[39.0127,14.6034],[39.0085,14.6162],[39.0235,14.6324],[39.0287,14.6345],[39.0414,14.6316],[39.0484,14.6355],[39.0552,14.6362],[39.0753,14.6334],[39.0807,14.6365],[39.0868,14.6333],[39.0976,14.6334],[39.1044,14.63],[39.114,14.6176],[39.1247,14.6134],[39.1575,14.6203],[39.1777,14.6185],[39.2003,14.611],[39.2081,14.6033],[39.2159,14.5915],[39.221,14.5796],[39.2215,14.5725],[39.2265,14.5682],[39.2332,14.5682],[39.2386,14.5659],[39.2382,14.5607],[39.2401,14.5557],[39.2385,14.5476],[39.2323,14.5403],[39.2315,14.5192],[39.2279,14.5116],[39.2167,14.4961],[39.2085,14.4931],[39.2145,14.4828],[39.2191,14.4782],[39.221,14.4538],[39.2242,14.4433],[39.2318,14.4308],[39.2398,14.4116],[39.2468,14.4053],[39.2497,14.3923],[39.2607,14.3931],[39.2758,14.4022],[39.2902,14.4047],[39.2929,14.4106],[39.3008,14.4114],[39.3011,14.4182],[39.2979,14.4242],[39.2977,14.4362],[39.3148,14.4376],[39.3199,14.4419],[39.3233,14.45],[39.3178,14.4528],[39.3224,14.459],[39.3163,14.4598],[39.3143,14.4658],[39.3138,14.4789],[39.33,14.4804],[39.3235,14.4924],[39.324,14.4983],[39.34,14.5113],[39.3534,14.505],[39.3647,14.4963],[39.3711,14.4946],[39.3694,14.4998],[39.3646,14.5058],[39.3648,14.5118],[39.3686,14.5187],[39.3677,14.5266],[39.3646,14.534],[39.3687,14.5383],[39.3836,14.5358],[39.3985,14.5382],[39.4122,14.531],[39.4282,14.5307],[39.4291,14.5244],[39.4355,14.5193],[39.4533,14.5269],[39.4521,14.5109],[39.4571,14.5072],[39.4619,14.513],[39.4693,14.5156],[39.4678,14.5084],[39.471,14.5044],[39.4726,14.4983],[39.4851,14.5014],[39.4931,14.5089],[39.5004,14.5438],[39.4944,14.5644],[39.4917,14.5825],[39.4778,14.5976],[39.4775,14.6036],[39.4901,14.625],[39.4866,14.6402],[39.4884,14.6453],[39.4971,14.6543],[39.5027,14.677],[39.51,14.6718],[39.5158,14.6771],[39.5374,14.6695],[39.5752,14.6699],[39.5912,14.6621],[39.6058,14.6471],[39.6227,14.6359],[39.6288,14.6088],[39.6377,14.5984],[39.6574,14.5898],[39.6665,14.5922],[39.6738,14.5882],[39.6803,14.5888],[39.6968,14.569],[39.699,14.562],[39.7093,14.5514],[39.7152,14.5517],[39.7288,14.5468],[39.7503,14.5452],[39.7668,14.5408],[39.7685,14.5332],[39.7745,14.5271],[39.7854,14.5111],[39.7915,14.5063],[39.7926,14.5002],[39.801,14.4992],[39.8067,14.4934],[39.8132,14.4824],[39.82,14.479],[39.8257,14.4801],[39.8313,14.4849],[39.8414,14.4794],[39.8468,14.4745],[39.8566,14.472],[39.8619,14.4658],[39.8726,14.4619],[39.8798,14.4521],[39.8905,14.4436],[39.8952,14.4359],[39.9237,14.415],[39.9385,14.4087],[39.9499,14.4106],[39.958,14.4179],[39.9714,14.4263],[39.9715,14.4316],[39.9809,14.4408],[39.9843,14.4323],[39.9838,14.4236],[39.9796,14.4099],[39.9817,14.3938],[39.9881,14.3881],[39.9908,14.382],[39.9798,14.371],[39.9722,14.3702],[39.9565,14.3624],[39.9503,14.3604],[39.9385,14.3614],[39.9163,14.3703],[39.9083,14.3654],[39.9015,14.3667],[39.8955,14.3706],[39.8531,14.3671],[39.8546,14.3732],[39.8474,14.375],[39.8381,14.3805],[39.8276,14.3827],[39.82,14.3825],[39.8009,14.3872],[39.796,14.386],[39.7877,14.3787],[39.772,14.3739],[39.7749,14.3514],[39.7797,14.3358],[39.7792,14.3305],[39.7713,14.3199],[39.7626,14.3187],[39.7453,14.3086],[39.7333,14.3066],[39.7262,14.303],[39.7268,14.294],[39.7338,14.2879],[39.742,14.2813],[39.7576,14.2772],[39.7559,14.25],[39.7573,14.2398],[39.753,14.237],[39.7422,14.2349],[39.7065,14.2421],[39.6941,14.2413],[39.6879,14.2313],[39.6857,14.2162],[39.6763,14.2071],[39.6723,14.2003],[39.6639,14.1969],[39.6584,14.1987],[39.6564,14.1928],[39.65,14.1886],[39.6578,14.1824],[39.6735,14.1777],[39.682,14.1647],[39.715,14.1563],[39.7209,14.157],[39.7495,14.1518],[39.7671,14.14],[39.7754,14.1391],[39.7907,14.1425],[39.7978,14.1425],[39.8095,14.1516],[39.8268,14.155],[39.8376,14.1542],[39.8382,14.1265],[39.8431,14.1094],[39.8419,14.097],[39.8432,14.0899],[39.8483,14.078],[39.8445,14.0601],[39.844,14.0503],[39.8547,14.031],[39.8607,14.0282],[39.8663,14.0216],[39.8823,14.0161],[39.8859,14.0122],[39.8685,13.9922],[39.8691,13.9829],[39.8586,13.9732],[39.8592,13.9658],[39.8356,13.9756],[39.8292,13.9743],[39.8157,13.9682],[39.8128,13.9602],[39.8017,13.9456],[39.8126,13.9449],[39.8176,13.9426],[39.8279,13.9316],[39.8256,13.9266],[39.8261,13.9214],[39.8333,13.9184],[39.8335,13.9078],[39.8294,13.8996],[39.8282,13.888],[39.829,13.8685],[39.8378,13.8642],[39.8363,13.8541],[39.8411,13.8471],[39.8422,13.8384],[39.8337,13.8214],[39.8363,13.8114],[39.8415,13.8035],[39.8484,13.8],[39.8523,13.7949],[39.8537,13.7862],[39.8532,13.7665],[39.8638,13.7551],[39.8742,13.7494],[39.8841,13.7482],[39.876,13.7382],[39.8741,13.7222],[39.8746,13.7105],[39.8777,13.706],[39.8777,13.6888],[39.8762,13.6803],[39.8674,13.6583],[39.8686,13.6435],[39.8665,13.6269],[39.8687,13.6205],[39.8696,13.6095],[39.865,13.6027],[39.8655,13.5903],[39.8676,13.5838],[39.8653,13.5637],[39.8634,13.5584],[39.8639,13.5482],[39.8533,13.5541],[39.8434,13.5565],[39.8358,13.5553],[39.8163,13.5578],[39.8038,13.5537],[39.7938,13.5557],[39.7836,13.5634],[39.763,13.5713],[39.7445,13.5708],[39.7395,13.5631],[39.7397,13.5473],[39.7339,13.5287],[39.7292,13.5241],[39.7282,13.5166],[39.7234,13.5092],[39.7195,13.4757],[39.7261,13.4412],[39.7277,13.4222],[39.7339,13.4031],[39.7383,13.3996],[39.7435,13.3889],[39.7413,13.3822],[39.7458,13.3741],[39.7295,13.3788],[39.7317,13.3733],[39.74,13.3633],[39.7422,13.3575],[39.7417,13.3513],[39.7388,13.3329],[39.7365,13.3273],[39.7377,13.3211],[39.735,13.3143],[39.7285,13.3088],[39.7197,13.2946],[39.725,13.2883],[39.7359,13.2865],[39.7418,13.2826],[39.7586,13.2789],[39.7624,13.2835],[39.7673,13.2853],[39.7774,13.2752],[39.7857,13.2627],[39.7851,13.252],[39.7872,13.2456],[39.7991,13.2275],[39.8006,13.2192],[39.8085,13.2172],[39.8038,13.1897],[39.8092,13.1767],[39.8119,13.1552],[39.8243,13.132],[39.8312,13.1125],[39.8332,13.0886],[39.8351,13.083],[39.848,13.0528],[39.858,13.0362],[39.8631,13.0197],[39.8604,13.0036],[39.8618,12.9938],[39.86,12.9696],[39.8624,12.962],[39.8728,12.9423],[39.8864,12.9309],[39.8982,12.9261],[39.9042,12.9218],[39.9064,12.9143],[39.9252,12.8938],[39.9293,12.8815],[39.9294,12.8744],[39.9412,12.8613],[39.9525,12.8369],[39.9655,12.8219],[39.9695,12.8141],[39.9726,12.7974],[39.978,12.7922],[39.9633,12.7822],[39.9427,12.7715],[39.9276,12.7671],[39.9196,12.7669],[39.899,12.7623],[39.8886,12.7558],[39.8698,12.7339],[39.8676,12.7237],[39.8394,12.7133],[39.8261,12.6937],[39.8201,12.6588],[39.8233,12.6457],[39.8326,12.6344],[39.8243,12.6225],[39.8187,12.6188],[39.8089,12.6034],[39.8067,12.5963],[39.8155,12.5814],[39.8268,12.572],[39.8259,12.561],[39.8328,12.5499],[39.8405,12.5467],[39.8524,12.5474],[39.8632,12.5314],[39.8636,12.5237],[39.8617,12.5175],[39.8635,12.5063],[39.8682,12.4943],[39.8811,12.4845],[39.8663,12.4726],[39.8713,12.4688],[39.882,12.467],[39.8826,12.4577],[39.8631,12.4633],[39.8475,12.4492],[39.8334,12.4335],[39.8216,12.4148],[39.8149,12.4071],[39.821,12.3952],[39.8199,12.39],[39.823,12.3839],[39.8253,12.3723],[39.8293,12.3657],[39.8309,12.3575],[39.8176,12.3418],[39.8176,12.324],[39.8003,12.3164],[39.7771,12.3109],[39.7615,12.3033],[39.7586,12.32],[39.7391,12.3128],[39.7215,12.3082],[39.7063,12.3062],[39.6793,12.3078],[39.6587,12.3064],[39.6323,12.3077],[39.6209,12.3002],[39.6251,12.288],[39.6142,12.2757],[39.605,12.2706],[39.5919,12.271],[39.5725,12.2559],[39.5552,12.2555],[39.5433,12.265],[39.5385,12.2919],[39.5227,12.3264],[39.5074,12.3329],[39.4705,12.3214],[39.4556,12.325],[39.4407,12.3155],[39.4195,12.2966],[39.4029,12.2953],[39.3886,12.3005],[39.3726,12.3013],[39.3502,12.2984],[39.3423,12.3007],[39.3338,12.3006]]]]}}]} diff --git a/Use_cases/Enhanced_Combined_Drought_Index/dekad.py b/Use_cases/Enhanced_Combined_Drought_Index/dekad.py new file mode 100644 index 00000000..0a3942c8 --- /dev/null +++ b/Use_cases/Enhanced_Combined_Drought_Index/dekad.py @@ -0,0 +1,299 @@ +##Resample the data timeseries into **dekadal** (10-day) timesteps. + +import calendar +from datetime import datetime, timedelta +import pandas as pd +import numpy as np +import xarray as xr + +from xarray.core.groupby import DataArrayGroupBy, DatasetGroupBy + +def get_dekad(date: np.datetime64) -> np.datetime64: + """ + Get the start date of the dekad that a date belongs to. + Every month has three dekads, such that the first two dekads + have 10 days (i.e., 1-10, 11-20), and the third is comprised of the + remaining days of the month. + + Parameters + ---------- + date : np.datetime64 + Date to check. + + Returns + ------- + np.datetime64 + Start date of the dekad. + """ + timestamp = pd.Timestamp(date) + year = timestamp.year + month = timestamp.month + + first_day = datetime(year, month, 1) + last_day = datetime(year, month, calendar.monthrange(year, month)[1]) + + d1_start_date, d2_start_date, d3_start_date = pd.date_range( + start=first_day, end=last_day, freq="10D", inclusive="left" + ) + + if d1_start_date <= timestamp < d2_start_date: + return np.datetime64(d1_start_date, "ns") + elif d2_start_date <= timestamp < d3_start_date: + return np.datetime64(d2_start_date, "ns") + else: + return np.datetime64(d3_start_date, "ns") + +def group_by_dekad( + ds: xr.DataArray | xr.Dataset, +) -> DataArrayGroupBy | DatasetGroupBy: + """ + Group a dataset or array by dekad. + + Parameters + ---------- + ds : xr.DataArray | xr.Dataset + Dataset or DataArray to group + + Returns + ------- + xr.core.groupby.DataArrayGroupBy | xr.core.groupby.DatasetGroupBy + Groupby oject + """ + group = xr.DataArray( + data=np.vectorize(get_dekad)(ds.time.values), + coords=ds.time.coords, + dims=ds.time.dims, + name="dekad", + attrs=ds.time.attrs, + ) + grouped_by_dekad = ds.groupby(group) + return grouped_by_dekad + +def get_dekad_no_in_month(date: np.datetime64) -> int: + """ + Get the number of the dekad in a month that a date belongs to. + Every month has three dekads, such that the first two dekads + have 10 days (i.e., 1-10, 11-20), and the third is comprised of the + remaining days of the month. + + Parameters + ---------- + date : np.datetime64 + Date to check. + + Returns + ------- + int + Number of the dekad in a month. + """ + timestamp = pd.Timestamp(date) + year = timestamp.year + month = timestamp.month + + first_day = datetime(year, month, 1) + last_day = datetime(year, month, calendar.monthrange(year, month)[1]) + + d1_start_date, d2_start_date, d3_start_date = pd.date_range( + start=first_day, end=last_day, freq="10D", inclusive="left" + ) + + if d1_start_date <= timestamp < d2_start_date: + return 1 + elif d2_start_date <= timestamp < d3_start_date: + return 2 + else: + return 3 + + +def get_dekad_no_in_year(date: np.datetime64) -> int: + """ + Get the number of the dekad in a year that a date belongs to. + Every month has three dekads, such that the first two dekads + have 10 days (i.e., 1-10, 11-20), and the third is comprised of the + remaining days of the month (21-last day). Every year has 36 dekads. + + Parameters + ---------- + date : np.datetime64 + Date to check. + + Returns + ------- + int + Number of the dekad in a year. + """ + dekad_no_in_month = get_dekad_no_in_month(date=date) + timestamp = pd.Timestamp(date) + month = timestamp.month + dekad_no_in_year = ((month - 1) * 3) + dekad_no_in_month + return dekad_no_in_year + + +def get_interest_period(dekad: np.datetime64, ip: int) -> list[np.datetime64]: + """ + Get all the dekads in the interest period for a dekad. + `dekad` will always be the end dekad of the interest period. + + Parameters + ---------- + dekad : np.datetime64 + Dekad to get the interest period for. + This will always be the end dekad of the interest period + ip : int + Number of dekads in an interest period. + + Returns + ------- + list[np.datetime64] + All the dekads in the interest period. + """ + year = pd.Timestamp(dekad).year + dekad_no_in_year = get_dekad_no_in_year(dekad) - (ip - 1) + while dekad_no_in_year <= 0: + year -= 1 + dekad_no_in_year += 36 + + month = (dekad_no_in_year - 1) // 3 + 1 + dekad_no_in_month = (dekad_no_in_year - 1) % 3 + 1 + if dekad_no_in_month == 1: + day = 1 + elif dekad_no_in_month == 2: + day = 11 + elif dekad_no_in_month == 3: + day = 21 + + start_dekad = np.datetime64(datetime(year, month, day), "ns") + date_range = pd.date_range( + start_dekad, dekad, freq=timedelta(days=1), inclusive="both" + ).values + interest_period_dekads = np.unique(np.vectorize(get_dekad)(date_range)) + return interest_period_dekads + + +def bin_by_interest_period( + ds: xr.Dataset | xr.DataArray, ip: int +) -> dict[np.datetime64, xr.Dataset | xr.DataArray]: + """ + Bin each dekad in the dataset by interest period. + + Parameters + ---------- + ds : xr.Dataset | xr.DataArray + Dataset to bin + ip : int + Number of dekads in an interest period. + + Returns + ------- + list[tuple[np.datetime64, np.datetime64]] + List of dekad ranges to bin + """ + start_date = ds.dekad.min().values + end_date = ds.dekad.max().values + date_range = pd.date_range( + start_date, end_date, freq=timedelta(days=1), inclusive="both" + ).values + dekads = np.unique(np.vectorize(get_dekad)(date_range)) + bins = {i: get_interest_period(dekad=i, ip=ip) for i in dekads} + binned_by_interest_period = {interest_period_label : ds.reindex(dekad=interest_period) for interest_period_label, interest_period in bins.items()} + return binned_by_interest_period + +def get_no_data_mask(arr): + """ + Check if all values in an array are NaN + """ + return np.all(np.isnan(arr)) + +# From https://www.geeksforgeeks.org/maximum-consecutive-ones-or-zeros-in-a-binary-array/ +def max_consecutive_ones(arr: np.ndarray) -> int: + """ + Get the maximum number of successive ones in an array. + + Parameters + ---------- + + arr : np.ndarray + Array to check + + Returns + ------- + int + Maximum number of consecutive ones in the input array. + + """ + + n = len(arr) + # initialize count + count = 0 + # initialize max + result = 0 + + for i in range(0, n): + # If 1 is found, increment count + # and update result if count + # becomes more. + if arr[i] == 1: + # increase count + count += 1 + result = max(result, count) + # Reset count if one is not found + else: + count = 0 + + return result + +def read_table(path: str) -> pd.DataFrame: + """Read a Parquet file with Conflux metadata. + + Arguments + --------- + path : str + Path to Parquet file. + + Returns + ------- + pd.DataFrame + DataFrame with attrs set. + """ + table = pq_read_table(path) + df = table.to_pandas() + meta_json = table.schema.metadata[PARQUET_META_KEY] + metadata = json.loads(meta_json) + for key, val in metadata.items(): + df.attrs[key] = val + return df + +def get_max_value(index, da): + return da.isel(time_lag=index) + +def get_correlation(reference_drought_index, comparison_drought_index): + # Identify pixels that are NaN across all dekads + # in the comparison index. + all_nan_mask = comparison_drought_index.isnull().all(dim='dekad') + + lags=[0, 10] + corr_list = [] + for time_lag in range(lags[0], lags[1]): + # Modify the time lag + time_lag += abs(lags[0]) + 1 + # Pearson's correlation coefficient + corr = xr.corr(reference_drought_index, comparison_drought_index.shift(dekad=time_lag), dim="dekad") + modified_corr = np.abs(corr).assign_coords(time_lag=time_lag).expand_dims({"time_lag": 1}) + corr_list.append(modified_corr) + + da_corr = xr.concat(corr_list, dim="time_lag") + + # Get the maximum modified correlation value for each pixel. + max_corr = da_corr.max(dim="time_lag", skipna=True) + + # For each pixel get the the time lag at which the maximum + # correlation value occurs. + max_time_lag = xr.apply_ufunc( + get_max_value, + # Replace NaNs with -np.inf to ensure they are ignored in the argmax calculation. + da_corr.fillna(-np.inf).argmax(dim="time_lag"), + kwargs={"da": da_corr.time_lag}, + vectorize=True, + dask="allowed",) + max_time_lag = max_time_lag.where(~all_nan_mask) + return dict(corr=max_corr, lag=max_time_lag) \ No newline at end of file