mirror of
https://github.com/heyarne/earth-observation-for-journalism.git
synced 2026-05-06 19:13:40 +02:00
Add headlines to all notebooks
This commit is contained in:
parent
b6b6bf7dd9
commit
b0d9d1336d
14 changed files with 843 additions and 401 deletions
|
|
@ -2,6 +2,9 @@
|
|||
# build process
|
||||
/.*
|
||||
|
||||
# ignore jupyter-book artefacts
|
||||
/_build
|
||||
|
||||
# ignore files downloaded from scihub
|
||||
**/*.jp2
|
||||
**/*.tif
|
||||
|
|
@ -10,3 +13,4 @@
|
|||
**/*.tiff.aux.xml
|
||||
**/*.SAFE
|
||||
**/*.zip
|
||||
**/*.zip.incomplete
|
||||
|
|
|
|||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -14,6 +14,7 @@
|
|||
*.tif.aux.xml
|
||||
*.tiff.aux.xml
|
||||
*.zip
|
||||
*.zip.incomplete
|
||||
**/*.SAFE/*
|
||||
|
||||
.jupyter
|
||||
|
|
|
|||
13
Dockerfile
13
Dockerfile
|
|
@ -8,11 +8,10 @@ ENV SCIHUB_PASSWORD=""
|
|||
ENV JUPYTER_ENABLE_LAB=yes
|
||||
|
||||
# See https://jupyter-docker-stacks.readthedocs.io/en/latest/using/recipes.html#using-pip-install-or-conda-install-in-a-child-docker-image for more info
|
||||
RUN conda install -c conda-forge geopandas==0.8.1 && \
|
||||
pip install \
|
||||
RUN conda install -c conda-forge geopandas==0.8.1
|
||||
RUN pip install \
|
||||
descartes==1.1.0 sentinelsat==0.14 rasterio==1.2.0 folium==0.11.0 \
|
||||
jupyterlab-spellchecker nbdime \
|
||||
jupyter-book==0.10.0 && \
|
||||
fix-permissions $CONDA_DIR && \
|
||||
fix-permissions /home/$NB_USER && \
|
||||
nbdime extensions --enable
|
||||
jupyterlab-spellchecker \
|
||||
jupyter-book==0.10.0
|
||||
RUN fix-permissions $CONDA_DIR && \
|
||||
fix-permissions /home/$NB_USER
|
||||
|
|
|
|||
2
_toc.yml
2
_toc.yml
|
|
@ -10,7 +10,7 @@
|
|||
- file: "sources/01c Coverage analysis.ipynb"
|
||||
- file: "sources/1d Brandenburg mosaic.ipynb"
|
||||
- file: "sources/01 True-color pipeline.ipynb"
|
||||
- part: "Band Maths"
|
||||
- part: "Spectral Indices"
|
||||
chapters:
|
||||
- file: "sources/02a NDVI.ipynb"
|
||||
- file: "sources/02b Timeseries.ipynb"
|
||||
|
|
|
|||
|
|
@ -2,6 +2,6 @@
|
|||
|
||||
The first chapter contains notebooks that document the data retrieval process from the Copernicus Open Access Hub.
|
||||
|
||||
It explains how to use [`sentinelsat`](https://github.com/sentinelsat/sentinelsat) library to interact with the API: How to specify what kind of data we are interested in with the aide of open map data from [OpenStreetMap](https://www.openstreetmap.org/) and [`geopandas`](https://geopandas.org/) and how to download it. It then goes on to show how to use [`rasterio`](https://rasterio.readthedocs.io/) and [`matplotlib`](https://matplotlib.org/stable/index.html) to work with the data.
|
||||
It explains how to use the [`sentinelsat`](https://github.com/sentinelsat/sentinelsat) library to interact with the HTTP API: How to specify what kind of data we are interested in with the aide of open map data from [OpenStreetMap](https://www.openstreetmap.org/) and [`geopandas`](https://geopandas.org/) and how to download it. It then goes on to show how to use [`rasterio`](https://rasterio.readthedocs.io/) and [`numpy`](https://numpy.org/) to read and process the downloaded data and [`matplotlib`](https://matplotlib.org/stable/index.html) to visualize it.
|
||||
|
||||
The Sentinel-2 satellite captures light in visible and invisible parts of the spectrum. This can be used to derive different kinds of useful information about ground-level phenomena. This chapter will detail how to use it to create true-color images for different moments in time.
|
||||
The Sentinel-2 satellite captures light in visible and invisible parts of the spectrum. This can be used to derive different kinds of useful information about ground-level phenomena. The end of this chapter will detail how to use it to create true-color images for different moments in time.
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# When is Brandenburg Covered in its Entirety?\n",
|
||||
"# Large Area Coverage Analysis\n",
|
||||
"\n",
|
||||
"When trying to generate mosaics covering the entire federal state of Brandenburg it was discovered that even over relatively long time frames (i.e. four weeks) uncovered areas could be detected.\n",
|
||||
"This discovery stands in contrast with the claim that the revisit time in that given latitude would be approximately one week.\n",
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1,5 +1,12 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Small-Scale NDVI Calculation"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
|
|
@ -8,41 +15,16 @@
|
|||
"source": [
|
||||
"import folium\n",
|
||||
"import sentinel_helpers\n",
|
||||
"from pathlib import Path"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Let's search for a more detailed geometry this time that would be hard to find outside of OpenStreetMap:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from pathlib import Path\n",
|
||||
"\n",
|
||||
"tempelhofer_feld = sentinel_helpers.search_osm('Tempelhofer Feld, Berlin, Germany').iloc[:1]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# there's a warning about this being in WGS84 which we can ignore\n",
|
||||
"bbox = tempelhofer_feld.bounds.values[0]\n",
|
||||
"minx, miny, maxx, maxy = bbox"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Is the area we have the area we want?\n",
|
||||
"## Verify the Obtained Geometry\n",
|
||||
"\n",
|
||||
"We introduce the `folium` library which lets us plot an OpenStreetMap-based map in the background.\n",
|
||||
"This enables us a better preview of our shape, because it allows us to surrounding features such as streets or parks.\n",
|
||||
|
|
@ -810,7 +792,9 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The finally helpful tip for clipping came from [this website](https://automating-gis-processes.github.io/CSC/notebooks/L5/clipping-raster.html)."
|
||||
"The finally helpful tip for clipping came from [this website](https://automating-gis-processes.github.io/CSC/notebooks/L5/clipping-raster.html).\n",
|
||||
"\n",
|
||||
"**TODO** Make sure that we are using the correct range here."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -4,7 +4,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Multi-Threading Comparison\n",
|
||||
"# Multi-Threading Performance Benchmark\n",
|
||||
"\n",
|
||||
"This notebook contains a performance comparison of different methods to process the NDVI calculations.\n",
|
||||
"\n",
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Dealing with cloud masks\n",
|
||||
"# Cloud Masks\n",
|
||||
"\n",
|
||||
"The products contain several raster and vector files that represent cloud masks or cloud propabilities.\n",
|
||||
"\n",
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Naive Approach to Downloading\n",
|
||||
"\n",
|
||||
"- How much data would we need to download when covering Brandenburg in its entirety?"
|
||||
]
|
||||
},
|
||||
|
|
@ -17,8 +19,11 @@
|
|||
"import os\n",
|
||||
"from sentinel_helpers import search_osm\n",
|
||||
"from sentinelsat import SentinelAPI\n",
|
||||
"from tqdm.notebook import tqdm\n",
|
||||
"\n",
|
||||
"api = SentinelAPI(os.getenv('SCIHUB_USERNAME'), os.getenv('SCIHUB_PASSWORD'))\n",
|
||||
"api._tqdm = tqdm\n",
|
||||
"\n",
|
||||
"start_date = date(2018, 1, 1)\n",
|
||||
"end_date = date(2018, 12, 31)\n",
|
||||
"cloud_coverage = (0, 30)"
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Forest Fire Subset Definition\n",
|
||||
"\n",
|
||||
"- Other approach\n",
|
||||
"- Instead of focusing on all fires in an entire year, we focus on several firest that were covered well\n",
|
||||
"- → Jueterbog / Luckenwalde\n",
|
||||
|
|
|
|||
|
|
@ -7,19 +7,20 @@
|
|||
"# Comparison of dNBR for three wild fires in 2018 and 2019\n",
|
||||
"\n",
|
||||
"This notebook contains the calculations necessary for mapping the burn severity of the previously selected products.\n",
|
||||
"This burn severity is measured as the ${\\Delta}NBR$, which is defined as:\n",
|
||||
"This burn severity is measured as the Normalized Burn Ratio (NBR).\n",
|
||||
"The development of this burn ratio over time is described using the ${\\Delta}$NBR, which is defined as:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"{\\Delta}NBR = NBR_\\text{pre-fire} - NBR_\\text{post-fire}\n",
|
||||
"{\\Delta}\\text{NBR} = \\text{NBR}_\\text{pre-fire} - \\text{NBR}_\\text{post-fire}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"Instead of only calculating values by overlaying different bands in one product, the ${\\Delta}NBR$ adds a time dimension to determine changes that have occured in the time span between the two chosen products.\n",
|
||||
"Instead of only calculating values by overlaying different bands in one product, the ${\\Delta}$NBR adds a time dimension to determine changes that have occurred in the time span between the two chosen products.\n",
|
||||
"\n",
|
||||
"## Methodology\n",
|
||||
"\n",
|
||||
"The $NBR$ of the products downloaded in the previous notebook is calculated using the notebook [02 Spectral Indices](\"02 Spectral Indices.ipynb\").\n",
|
||||
"These $NBR$ values are plotted side-by-side to get a visual impression of the changes that may have occured between two given dates.\n",
|
||||
"The ${\\Delta}NBR$ is calculated and, if showing signs of burned areas, compared to data given by the responsible German ministries.\n",
|
||||
"The NBR of the products downloaded in the previous notebook is calculated using the notebook [02 Spectral Indices](\"02 Spectral Indices.ipynb\").\n",
|
||||
"These NBR values are plotted side-by-side to get a visual impression of the changes that may have occurred between two given dates.\n",
|
||||
"The ${\\Delta}$NBR is calculated and, if showing signs of burned areas, compared to data given by the responsible German ministries.\n",
|
||||
"\n",
|
||||
"## Calculcations\n",
|
||||
"### Setup"
|
||||
|
|
@ -224,7 +225,7 @@
|
|||
"source": [
|
||||
"#### NBR plots\n",
|
||||
"\n",
|
||||
"We plot the $NBR$ values for all dates side by side to get a first visual impression of changes that have occured."
|
||||
"We plot the NBR values for all dates side by side to get a first visual impression of changes that have occurred."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -283,7 +284,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Red dots mark the location of the evacuated villages, the background shows the calculated $NBR$ values, where areas with a low $NBR$ value are brighter and areas with a high NBR value are darker."
|
||||
"Red dots mark the location of the evacuated villages, the background shows the calculated NBR values, where areas with a low NBR value are brighter and areas with a high NBR value are darker."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue