mirror of
https://github.com/heyarne/earth-observation-for-journalism.git
synced 2026-05-06 19:13:40 +02:00
Use passive voice throughout
This commit is contained in:
parent
3d50f4a014
commit
3e6e2dd09f
8 changed files with 29 additions and 29 deletions
|
|
@ -80,7 +80,7 @@
|
|||
"source": [
|
||||
"The function is mostly concerned with constructing the correct URL and ensuring that the response is returned as GeoJSON so it can be parsed by the `GeoPandas` library.\n",
|
||||
"\n",
|
||||
"A query returns a `GeoPandas` `GeoDataFrame` which contains a geometry and additional information that can be used to narrow down the area we are interested in:"
|
||||
"A query returns a `GeoPandas` `GeoDataFrame` which contains a geometry and additional information that can be used to narrow down the area of interest in:"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -398,7 +398,7 @@
|
|||
"source": [
|
||||
"## Defining a Request to the Copernicus Open Access Hub\n",
|
||||
"\n",
|
||||
"An API request additionally contains the time span for which to search for results - we might be interested in very recent images or in imagery over a long time span - and the maximum cloud coverage.\n",
|
||||
"An API request additionally contains the time span in which to search for results - so especially recent imagery or imagery over a long time can be directly queried - and the maximum cloud coverage.\n",
|
||||
"The maximum cloud coverage is needed because Sentinel-2 is equipped with optical instruments.\n",
|
||||
"If there are too many clouds the products will not contain a lot of useful information."
|
||||
]
|
||||
|
|
@ -481,7 +481,7 @@
|
|||
"## Selecting Products from the Result Set\n",
|
||||
"\n",
|
||||
"The criteria for selecting a product depends on the specific use case.\n",
|
||||
"The first use case is to plot an image of Berlin, so want to make sure that as much of the city as possible is visible in the data we download.\n",
|
||||
"The first use case is to plot an image of Berlin, so as much of the city as possible should be visible in the downloaded data.\n",
|
||||
"\n",
|
||||
"The list of products to a `GeoDataFrame` (`gdf`):"
|
||||
]
|
||||
|
|
@ -553,7 +553,7 @@
|
|||
"Because products are large (roughly 1GB), it is desirable to skip unnecessary downloads whenever possible.\n",
|
||||
"Products are therefore filtered by two criteria:\n",
|
||||
"\n",
|
||||
"- How much of the area of interest is visible in the product (i.e. area of the intersection of a product's tile and our area of interest)\n",
|
||||
"- How much of the area of interest is visible in the product (i.e. area of the intersection of a product's tile and the area of interest)\n",
|
||||
"- Cloud coverage (the less the better)"
|
||||
]
|
||||
},
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@
|
|||
"This notebook shows how to access the content of the products downloaded in [](01a-download-process.ipynb) and plot a true-color rendering. \n",
|
||||
"While the products already contain a True-Color Image (TCI), this approach is useful for two reasons:\n",
|
||||
"\n",
|
||||
"1. It allows comparing the readings with a rendering provided by official sources, thereby allowing us to find errors\n",
|
||||
"2. Generating a custom True-Color Image can be useful for further image manipulations, changing contrast or changing out single bands for others to highlight specific phenomena.\n",
|
||||
"1. It allows comparing the custom rendering with a rendering provided by official sources, thereby providing a template that can be used to spot any errors.\n",
|
||||
"2. Generating a custom True-Color Image can be useful for further image manipulations, changing contrast or changing out single bands for others to highlight phenomena which are more visible at certain wavelengths.\n",
|
||||
"\n",
|
||||
"First the shape of Berlin is created from data previously downloaded from OpenStreetMap:"
|
||||
]
|
||||
|
|
@ -108,7 +108,7 @@
|
|||
"source": [
|
||||
"## Previewing Downloaded Files\n",
|
||||
"\n",
|
||||
"There is a helper that, given a resolution and the band name, returns the correct file paths for us to use with the `rasterio` library.\n",
|
||||
"There is a function that, given a resolution and the band name, returns the correct file paths to use with the `rasterio` library.\n",
|
||||
"It contains code to deal with compressed or uncompressed products."
|
||||
]
|
||||
},
|
||||
|
|
@ -173,7 +173,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Using the compressed zip-file, while slightly inconvenient, makes sense because it allows saving disk space and allows us to avoid the extra step of decompressing every single downloaded product.\n",
|
||||
"Using the compressed zip-file, while slightly inconvenient, makes sense because it allows saving disk space and avoiding the extra step of decompressing every single downloaded product.\n",
|
||||
"\n",
|
||||
"There is a pre-rendered True-Color Image (\"TCI\") that can be plotted for an impression of the product's contents:"
|
||||
]
|
||||
|
|
|
|||
|
|
@ -321,7 +321,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Looking at the plot above we can see a repeating pattern.\n",
|
||||
"Looking at the plot above, a repeating pattern shows.\n",
|
||||
"Orbits #16965, #17108, #17251, #25945, #26088 and #26231 cover the same shape.\n",
|
||||
"The same can be said for the other slices, which repeat at the same frequencies.\n",
|
||||
"Except for the jump in orbit number from of roughly 8000 from 17xxx to 25xxx, the cycle repeats every 143 orbits.\n",
|
||||
|
|
@ -468,10 +468,10 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Yes, so we don't need to sort manually.\n",
|
||||
"If we iterate through them in the order they are returned from the API we can get a set of products covering our area of interest that is:\n",
|
||||
"Yes, so sorting them manually is unnecessary.\n",
|
||||
"Iterating through them in the order they are returned from the API produces a set of products covering the area of interest that is:\n",
|
||||
"\n",
|
||||
"1. As close to the start of our observation time span as possible.\n",
|
||||
"1. As close to the start of the observation time span as possible.\n",
|
||||
"2. Captured over a time span that is as small as possible.\n",
|
||||
"\n",
|
||||
"The code for the algorithm is very short thanks to the `shapely` geometry operators:"
|
||||
|
|
@ -654,7 +654,7 @@
|
|||
"metadata": {},
|
||||
"source": [
|
||||
"The histogram shows that some of the products consist mostly of cloudy pixels - in fact, the relationship between cloudy and non-cloudy pixels is almost symmetrical.\n",
|
||||
"A cloud coverage of 100% is not of much use for us because it amounts to an image that does not contain any of the surface features we are interested in.\n",
|
||||
"A cloud coverage of 100% is not of much use because it does not contain any surface features.\n",
|
||||
"\n",
|
||||
"To include only less cloudy products, a compromise on up-to-dateness has to be made.\n",
|
||||
"Setting a maximum cloud coverage of 50% increases the time delta to 15 days:"
|
||||
|
|
|
|||
|
|
@ -251,8 +251,8 @@
|
|||
"source": [
|
||||
"## Result\n",
|
||||
"\n",
|
||||
"As we can see when processing a single element, multiprocessing comes with an overhead.\n",
|
||||
"When the list to be processed is sufficiently large, we get a slight reduction in processing time, that, even with a higher standard deviation, manages to be faster than the single-process version.\n",
|
||||
"Multiprocessing comes with an overhead, which is significant enough to rule it out when processing a single element.\n",
|
||||
"When the list of elements is sufficiently large, there is a slight reduction in processing time, that, even with a higher standard deviation, manages to be faster than the single-process version.\n",
|
||||
"\n",
|
||||
"Averaging the masked array is an operation that can be implemented to scale in $O(N)$ with the size of the input array.\n",
|
||||
"The time reduction should be even higher for more complex tasks."
|
||||
|
|
|
|||
|
|
@ -448,7 +448,7 @@
|
|||
"Spectral indices can get distorted by highly reflective clouds.\n",
|
||||
"To avoid this the products include cloud masks, which contain information about the cloud positions in a product in order to discard them.\n",
|
||||
"\n",
|
||||
"In order to construct a cloud mask that we can operate on, we need to know the transformation needed from the coordinates given by the raster's coordinate reference system to the pixel coordinates of the highest resolution raster.\n",
|
||||
"To construct a cloud mask, it is essential to know the transformation from the coordinates given by the raster's coordinate reference system to the pixel coordinates of the highest resolution raster.\n",
|
||||
"\n",
|
||||
"These are encoded as metadata in the raster file:"
|
||||
]
|
||||
|
|
|
|||
|
|
@ -571,7 +571,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"- how well do the results cover our study area?"
|
||||
"How well do the results cover the study area?"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The API query is initialized for a time span we are interested in and using an area that slightly extends the geometry fetched from OpenStreetMap. This is done to increase the likelihood that the phenomenon we are interested in is visible on the products we download - we don't know where exactly we will need to look, we only know proximity."
|
||||
"The API query is initialized for a time span of interest, using an area that slightly extends the geometry fetched from OpenStreetMap. This is done to increase the likelihood that the phenomenon is visible on the downloaded products - it is still unknown where exactly to look, there is only some information about proximity."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -228,7 +228,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"We also want to avoid merging or reprojecting adjacent tiles if possible, so we prefer tiles that easily cover the entire area of interest:"
|
||||
"Merging or reprojecting adjacent tiles is avoided if possible, so tiles that easily cover the entire area of interest are preferred:"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
"### Treuenbrietzen 2018\n",
|
||||
"\n",
|
||||
"The first case is the wild fire in August 2018 that led to the evacuation of three villages (source).\n",
|
||||
"We load the pre-calculated NBR values and geometries we fetched from OpenStreetMap:"
|
||||
"The following files contain their respective OpenStreetMap geometries and pre-calculated NBR values for the area:"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -429,10 +429,10 @@
|
|||
"source": [
|
||||
"The left image shows a dark spot between the three locations marking a decrease in NBR values after the start of the fire on August 23.\n",
|
||||
"is very likely the result of a loss of vegetation due to the fire.\n",
|
||||
"However, we can also see other examples of vegetation loss in the bottom left and top right corner of both plots which, according to the burn severity scale, are classified as \"high severity\" burns.\n",
|
||||
"However, other examples of vegetation loss are visible in the bottom left and top right corner of both plots which, according to the burn severity scale, are classified as \"high severity\" burns.\n",
|
||||
"\n",
|
||||
"Given the regular shape of these vegetation loss, we may assume that they are the result of crop harvests or that they have other causes unrelated to the fire.\n",
|
||||
"This interpretation is **based on assumptions** that need to be verified by experts.\n",
|
||||
"Given the regular shape of these vegetation losses, it can be assumed that they are the result of crop harvests or that they have other causes unrelated to the fire.\n",
|
||||
"It is important to stress again that this interpretation is **based on assumptions** that need to be verified by experts.\n",
|
||||
"\n",
|
||||
"The area selected is verified against the _Waldbrandstatistik_:\n",
|
||||
"\n",
|
||||
|
|
@ -861,7 +861,7 @@
|
|||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"After masking the array with the shape of the nature reserve, we only keep the pixels within that nature reserve that have at marks of at least a low severity burn."
|
||||
"After masking the array with the shape of the nature reserve, only the pixels within that nature reserve that have at marks of at least a low severity burn are kept and all others omitted."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -960,7 +960,7 @@
|
|||
"metadata": {},
|
||||
"source": [
|
||||
"Please note that fire area and area with burn marks are two different things, but it is the most reliable available information available that is close to ground truth.\n",
|
||||
"Compared with the Waldbrandstatistik, the area we calculated has an error of approximately 25%."
|
||||
"Compared with the Waldbrandstatistik, the calculated area has an error of approximately 25%."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -980,7 +980,7 @@
|
|||
"\n",
|
||||
"The animation above contains a true-color rendering and a frame that highlights wavelengths in the infrared spectrum to create a faux-color image highlighting the burn-scar and decreasing the visibility of smoke.\n",
|
||||
"\n",
|
||||
"Using the same data we can get a glimpse of the site before, during and after the fire:"
|
||||
"The same data gives an impression of the site before, during and after the fire:"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
@ -1051,8 +1051,8 @@
|
|||
"source": [
|
||||
"The area highlighted in the ESA animation is positioned in the lower-right corner of the superimposed boundary of Lübtheen.\n",
|
||||
"\n",
|
||||
"Looking at these true-color image we can see that on June 29 and July 26 we get a very clear view of the area.\n",
|
||||
"We can also see that there is a lot of vegetation change that is likely not related to the fire, visible when comparing the top and bottom-left parts of the images.\n",
|
||||
"The true-color image on June 29 and July 26 show a very clear view of the area.\n",
|
||||
"There is a lot of vegetation change that is likely not related to the fire, visible when comparing the top and bottom-left parts of the images.\n",
|
||||
"\n",
|
||||
"This vegetation change is likely also reflected in the NBR and $\\Delta$NBR values.\n",
|
||||
"\n",
|
||||
|
|
@ -1255,7 +1255,7 @@
|
|||
"The boundary of the military site exceeds the area for which the $\\Delta$NBR was calculated to the right.\n",
|
||||
"This part is discarded in further calculations because it is several kilometers away from the apparent fire site.\n",
|
||||
"\n",
|
||||
"Following the method above, we isolate the burned pixels within the military site's boundaries and compare their area with the figure mentioned by official sources."
|
||||
"Following the method above, burned pixels within the military site's boundaries are isolated and counted. Their area is afterwards compared with the figure mentioned by official sources."
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue