diff --git a/_static/custom.css b/_static/custom.css
index e49cdc4..a6b4aca 100644
--- a/_static/custom.css
+++ b/_static/custom.css
@@ -1,4 +1,3 @@
div.navbar-brand-box a.navbar-brand img {
- max-height: unset !important;
- max-width: 80%
+ max-height: 13em !important;
}
diff --git a/_toc.yml b/_toc.yml
index cb4e2c8..39754e9 100644
--- a/_toc.yml
+++ b/_toc.yml
@@ -1,17 +1,17 @@
# Table of contents
# Learn more at https://jupyterbook.org/customize/toc.html
-- file: README
- title: "Remote Sensing for Journalism"
+- file: "README.md"
- part: "Data Retrieval and Processing"
chapters:
- file: "sources/01 Overview.md"
- file: "sources/01a Download from Scihub.ipynb"
- file: "sources/01b Plot downloaded products.ipynb"
- file: "sources/01c Coverage analysis.ipynb"
- - file: "sources/1d Brandenburg mosaic.ipynb"
+ - file: "sources/01d Brandenburg mosaic.ipynb"
- file: "sources/01e True-color pipeline.ipynb"
- part: "Spectral Indices"
chapters:
+ - file: "sources/02 Overview.md"
- file: "sources/02a NDVI.ipynb"
- file: "sources/02b Timeseries.ipynb"
sections:
@@ -21,6 +21,7 @@
- file: "sources/02e Spectral Indices.ipynb"
- part: "Burn Ratio Calculations"
chapters:
+ - file: "sources/03 Overview.md"
- file: "sources/03a Forest Fire Product Downloads.ipynb"
- file: "sources/03b Example Initialized Downloads.ipynb"
- file: "sources/03b Forest Fires 2018 and 2019.ipynb"
diff --git a/sources/02 Overview.md b/sources/02 Overview.md
new file mode 100644
index 0000000..7c5a467
--- /dev/null
+++ b/sources/02 Overview.md
@@ -0,0 +1,9 @@
+# Overview
+
+The parts of the Sentinel-2 data that extend the visible spectrum can be used to calculate _Spectral Indices_ or _Spectral Indicators_.
+
+These indicators can be used for a range of different tasks. The Normalised Difference in Water Index (NDWI) for example gives information about how likely a pixel represents water, the Bare-Soil Index (BSI) gives an estimate about how likely a pixel represents unvegetaed soil. Other indices give an indication about vegetation health or plant activity using reflectance properties of the ground in different spectra of light.
+
+This chapter explores how to calculate these indices over long and short time spans, leveraging the high spatial resolution to provide highly localized information using these indices.
+
+It ends with a notebook that implements the BSI, the NDWI, the Normalized Difference In Vegetation Index (NDVI) and the Normalized Burn Ratio (NBR) which can be used to determine burn severity after a fire. The implementation is extensible enough to perform many different kinds of index calculations on downloaded products with only minimal changes.
diff --git a/sources/02e Spectral Indices.ipynb b/sources/02e Spectral Indices.ipynb
index 604893e..ed6afd8 100644
--- a/sources/02e Spectral Indices.ipynb
+++ b/sources/02e Spectral Indices.ipynb
@@ -152,10 +152,12 @@
"outputs": [],
"source": [
"indices = {\n",
- " # normalized difference in vegetation\n",
- " 'ndvi': (div, (sub, 'B08', 'B04'), (add, 'B08', 'B04')),\n",
" # normalized burn ratio\n",
" 'nbr': (div, (sub, 'B08', 'B12'), (add, 'B08', 'B12')),\n",
+ " # normalized difference in vegetation\n",
+ " 'ndvi': (div, (sub, 'B08', 'B04'), (add, 'B08', 'B04')),\n",
+ " # normalized difference in water index\n",
+ " 'ndwi': (div (sub, 'B03', 'B08'), (add, 'B03', 'B08')),\n",
" # bare soil index\n",
" 'bsi': (div, (sub, (add, 'B11', 'B04'), (add, 'B08', 'B02')),\n",
" (add, (add, 'B11', 'B04'), (add, 'B08', 'B02')))\n",
diff --git a/sources/03 Overview.md b/sources/03 Overview.md
new file mode 100644
index 0000000..07dd0c5
--- /dev/null
+++ b/sources/03 Overview.md
@@ -0,0 +1 @@
+# Overview
diff --git a/sources/03b Forest Fires 2018 and 2019.ipynb b/sources/03b Forest Fires 2018 and 2019.ipynb
index 54d329d..0458ef5 100644
--- a/sources/03b Forest Fires 2018 and 2019.ipynb
+++ b/sources/03b Forest Fires 2018 and 2019.ipynb
@@ -81,10 +81,10 @@
{
"data": {
"text/html": [
- "
Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
],
"text/plain": [
- ""
+ ""
]
},
"execution_count": 4,
@@ -299,7 +299,50 @@
"cell_type": "code",
"execution_count": 14,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "2702698598e54e98af641ec984eaf23f",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "HBox(children=(HTML(value='Downloading'), FloatProgress(value=0.0, max=24010296.0), HTML(value='')))"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "9f3cae91148b47a4adc90687cdb8050f",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "HBox(children=(HTML(value='MD5 checksumming'), FloatProgress(value=0.0, max=24010296.0), HTML(value='')))"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ }
+ ],
"source": [
"out_dir.mkdir(exist_ok=True, parents=True)\n",
"downloaded, initialized, failed = api.download_all(product_uuids_2018, out_dir)"
@@ -313,7 +356,7 @@
{
"data": {
"text/plain": [
- "1"
+ "2"
]
},
"execution_count": 15,
@@ -353,7 +396,7 @@
{
"data": {
"text/plain": [
- "1"
+ "0"
]
},
"execution_count": 17,
@@ -380,7 +423,8 @@
{
"data": {
"text/plain": [
- "[None]"
+ "[None,\n",
+ " 'input/forest_fires/S2A_MSIL2A_20180919T102021_N0208_R065_T33UUT_20180919T132226.zip']"
]
},
"execution_count": 18,
@@ -497,10 +541,10 @@
{
"data": {
"text/html": [
- "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
],
"text/plain": [
- ""
+ ""
]
},
"execution_count": 20,
@@ -536,10 +580,10 @@
{
"data": {
"text/html": [
- "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
],
"text/plain": [
- ""
+ ""
]
},
"execution_count": 22,
@@ -715,7 +759,50 @@
"cell_type": "code",
"execution_count": 29,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "ea9d141fa8814b688226635222a65450",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "HBox(children=(HTML(value='Downloading'), FloatProgress(value=0.0, max=14958136.0), HTML(value='')))"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "08fa6fd7ca854550804209fa5d4bf922",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "HBox(children=(HTML(value='MD5 checksumming'), FloatProgress(value=0.0, max=14958136.0), HTML(value='')))"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ }
+ ],
"source": [
"downloaded, initialized, failed = api.download_all(product_uuids_2019, out_dir)"
]
@@ -728,7 +815,7 @@
{
"data": {
"text/plain": [
- "0"
+ "1"
]
},
"execution_count": 30,
@@ -768,7 +855,7 @@
{
"data": {
"text/plain": [
- "2"
+ "1"
]
},
"execution_count": 32,
@@ -788,17 +875,7 @@
{
"data": {
"text/plain": [
- "{'42633406-e729-4d38-94df-942813cac1c0': {'id': '42633406-e729-4d38-94df-942813cac1c0',\n",
- " 'title': 'S2A_MSIL2A_20190613T101031_N0212_R022_T33UUT_20190614T125329',\n",
- " 'size': 1111903391,\n",
- " 'md5': '1979124f0a7e11f4b134c36e1516ccce',\n",
- " 'date': datetime.datetime(2019, 6, 13, 10, 10, 31, 24000),\n",
- " 'footprint': 'POLYGON((12.109949135874256 51.62754367459543,12.12855260381174 51.67223353291847,12.189749670211857 51.8181446227169,12.251335944032553 51.96394652824928,12.313165570575627 52.109686926175314,12.374979421078276 52.25542506753664,12.402567238605169 52.3200953024738,13.675924550313963 52.34305438492137,13.704578464673325 51.35607984388353,12.12921085152078 51.3280532483229,12.109949135874256 51.62754367459543))',\n",
- " 'url': \"https://scihub.copernicus.eu/apihub/odata/v1/Products('42633406-e729-4d38-94df-942813cac1c0')/$value\",\n",
- " 'Online': False,\n",
- " 'Creation Date': datetime.datetime(2019, 6, 15, 0, 11, 53, 498000),\n",
- " 'Ingestion Date': datetime.datetime(2019, 6, 14, 22, 44, 51, 876000)},\n",
- " '1e9358eb-2c1e-45a5-aabd-ee7b193eda0e': {'id': '1e9358eb-2c1e-45a5-aabd-ee7b193eda0e',\n",
+ "{'1e9358eb-2c1e-45a5-aabd-ee7b193eda0e': {'id': '1e9358eb-2c1e-45a5-aabd-ee7b193eda0e',\n",
" 'title': 'S2A_MSIL2A_20190603T101031_N0212_R022_T33UUT_20190603T114652',\n",
" 'size': 1099877545,\n",
" 'md5': 'b6472601cbf27fd3fe121e9e8ce15c99',\n",
@@ -839,7 +916,18 @@
{
"data": {
"text/plain": [
- "[]"
+ "[{'id': '99c568e9-8f98-4263-bc66-d8450658cdc8',\n",
+ " 'title': 'S2A_MSIL2A_20190626T102031_N0212_R065_T33UUT_20190626T125319',\n",
+ " 'size': 14958136,\n",
+ " 'md5': '310c0479f5b346cb07796b51659eb9e8',\n",
+ " 'date': datetime.datetime(2019, 6, 26, 10, 20, 31, 24000),\n",
+ " 'footprint': 'POLYGON((12.065798228229744 52.31402323817268,13.675924550313963 52.34305438492137,13.704578464673325 51.35607984388353,12.12921085152078 51.3280532483229,12.065798228229744 52.31402323817268))',\n",
+ " 'url': \"https://scihub.copernicus.eu/apihub/odata/v1/Products('99c568e9-8f98-4263-bc66-d8450658cdc8')/$value\",\n",
+ " 'Online': True,\n",
+ " 'Creation Date': datetime.datetime(2019, 6, 27, 18, 44, 15, 261000),\n",
+ " 'Ingestion Date': datetime.datetime(2019, 6, 27, 18, 43, 49, 503000),\n",
+ " 'path': 'input/forest_fires/S2A_MSIL2A_20190626T102031_N0212_R065_T33UUT_20190626T125319.zip',\n",
+ " 'downloaded_bytes': 14958136}]"
]
},
"execution_count": 34,
@@ -859,7 +947,7 @@
{
"data": {
"text/plain": [
- "[]"
+ "['input/forest_fires/S2A_MSIL2A_20190626T102031_N0212_R065_T33UUT_20190626T125319.zip']"
]
},
"execution_count": 35,
@@ -973,10 +1061,10 @@
{
"data": {
"text/html": [
- "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
],
"text/plain": [
- ""
+ ""
]
},
"execution_count": 37,
@@ -1483,8 +1571,50 @@
"outputs": [
{
"data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "0f9702cfa96540eb93473a6b1bb363ff",
+ "version_major": 2,
+ "version_minor": 0
+ },
"text/plain": [
- "(2, 1, 0)"
+ "HBox(children=(HTML(value='Downloading'), FloatProgress(value=0.0, max=17260088.0), HTML(value='')))"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "82748c2890794d218471ce7207fc5317",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "HBox(children=(HTML(value='MD5 checksumming'), FloatProgress(value=0.0, max=17260088.0), HTML(value='')))"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "(3, 0, 0)"
]
},
"execution_count": 47,
@@ -1512,7 +1642,9 @@
{
"data": {
"text/plain": [
- "[None, None]"
+ "[None,\n",
+ " None,\n",
+ " 'input/forest_fires/S2A_MSIL2A_20190629T103031_N0212_R108_T32UPE_20190629T135351.zip']"
]
},
"execution_count": 48,