diff --git a/source/part2/chapter-05/md/01-introduction-to-geographic-data-in-python.md b/source/part2/chapter-05/md/01-introduction-to-geographic-data-in-python.md index 22e8c76b..02bb2051 100644 --- a/source/part2/chapter-05/md/01-introduction-to-geographic-data-in-python.md +++ b/source/part2/chapter-05/md/01-introduction-to-geographic-data-in-python.md @@ -37,7 +37,7 @@ The most fundamental geometric objects when working with spatial data in vector All of these geometries are defined in *Simple Features Access Specification* ({cite}`Herring_2011`), which is a standard (ISO 19125-1) formalized by the *Open Geospatial Consortium* and *International Organization for Standardization*. Most (if not all) programming languages follow this same standard to represent spatial data. The text underneath each geometry (e.g. `Point (25 60.5)`) shows how each of these geometries can be represented as text (Figure 5.3). The way the text is formatted follows a specification called *{term}`Well-known text` (WKT)* which is also defined in the Simple Features Access Specification. The geometries can also be represented in binary format, which is called *{term}`Well-known binary` (WKB)*. WKB is useful for storing the geometries in a more compact form, but it is not human-readable. Most often, you don't need to worry about these technical details when working with spatial data in Python, but it is useful to know the foundations underlying most (if not all) GIS libraries. -![_**Figure 5.3.** Vector data model following the Simple Features Access Specification._](../img/vector_data_model.jpg) +![_**Figure 5.3.** Vector data model following the Simple Features Access Specification._](../img/vector_data_model.png) _**Figure 5.3.** Vector data model following the Simple Features Access Specification._ @@ -95,14 +95,14 @@ In raster data model the data is represented as arrays of cells, also called as Each cell in the raster dataset typically contains a value as shown on the left in Figure 5.4 (although the cell value can also be `NoData`). This is different compared to vector data, in which the geometries (observations) can be unevenly distributed across space, although it is possible to also represent a regular grid with polygons, it is just much less efficient computationally. Each cell value also has an index (i.e. position) that can be accessed based on row and column numbers. For instance, the value (*11*) from the bottom-left corner cell can be accessed at index `(3,0)` in which the first number is the row number and the second is the column number. Cell values can be plotted by given a color according a specific *{term}`colormap`* (see the legend on the right) which turns the data into more understandable format, making it possible to detect patterns or trends from the data. For example in Figure 5.4, it is easy to detect that there is a cluster of high values on the bottom right corner. Detecting this pattern just by looking at cell values on the left is much more difficult task, especially if you would have much bigger raster than what we have here (4x4 grid). Also a basic feature of raster data is that the cell size of the grid can vary. For example, the Figure 5.4 and the top-right subplot in Figure 5.2 represents the data with 10 meter *{term}`spatial resolution`*, i.e. the size of an individual cell is 10 by 10 meters. However, the bottom-right subplot in Figure 5.2 represents the buildings with 1 meter spatial resolution. This is an important aspect when working with raster data, because the spatial resolution determines how accurately the real-world entities, such as buildings or topographic features, can be represented or identified from the data. Raster data is commonly used to represent e.g. satellite imagery, digital elevation models and other type of data, in which the spatial extent of the data is large (covering e.g. whole countries, continents or the world) with continuous measurements across the space. It is good to be awere though, that it is also possible to store discrete or categorical data to a raster, such as landuse classification data. Raster data is commonly used e.g. for environmental monitoring, meteorology and cartography. -![_**Figure 5.4.** Raster data model._](../img/raster_data_model.jpg) +![_**Figure 5.4.** Raster data model._](../img/raster_data_model.png) _**Figure 5.4.** Raster data model._ One fundamental way to characterize a raster dataset is based on their *{term}`bit depth`* (also called as *{term}`pixel depth`*). The bit depth defines the range of distinct values that the raster can store. For example, a 1-bit raster can only store 2 distinct values: 0 and 1, whereas 8-bit raster can have 256 different values that range between 0 to 255, as shown in Figure 5.5. -![_**Figure 5.5**. Examples of raster bit depths._](../img/raster_bit_depths.jpg) +![_**Figure 5.5**. Examples of raster bit depths._](../img/raster_bit_depths.png) _**Figure 5.5**. Examples of raster bit depths._ diff --git a/source/part2/chapter-05/md/02-introduction-to-coordinate-reference-systems.md b/source/part2/chapter-05/md/02-introduction-to-coordinate-reference-systems.md index 04a64ff9..3c4e615b 100644 --- a/source/part2/chapter-05/md/02-introduction-to-coordinate-reference-systems.md +++ b/source/part2/chapter-05/md/02-introduction-to-coordinate-reference-systems.md @@ -65,7 +65,7 @@ When using map projections, we always make approximations and hence lose somethi Figure 5.11 illustrates nine different map projections, where the latitude and longitude coordinates representing the land areas of the earth have been systematically transformated into a plain surface. As you can see, there are numerous ways to represent the world in "flattened" state, and all the projections have their unique characteristics, strengths and weaknesses. In other words, there is no perfect or "correct" projection (but they are still useful), and one needs to choose a projection depending on what is the purpose of the map and the best one for your needs. Choosing an appropriate projection for your map is not always straightforward because it depends on what you actually want to represent with your map, and what is the spatial scale of your data. -![_**Figure 5.11**. Different map projections that can be used to represent the geographic data on a two-dimensional plane._](../img/projections.jpg) +![_**Figure 5.11**. Different map projections that can be used to represent the geographic data on a two-dimensional plane._](../img/projections.png) _**Figure 5.11**. Different map projections that can be used to represent the geographic data on a two-dimensional plane._ diff --git a/source/part2/chapter-05/nb/00-motivation-to-use-python-for-gis.ipynb b/source/part2/chapter-05/nb/00-motivation-to-use-python-for-gis.ipynb index 7e1c3997..17db4a7c 100644 --- a/source/part2/chapter-05/nb/00-motivation-to-use-python-for-gis.ipynb +++ b/source/part2/chapter-05/nb/00-motivation-to-use-python-for-gis.ipynb @@ -101,7 +101,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.5" + "version": "3.11.7" } }, "nbformat": 4, diff --git a/source/part2/chapter-05/nb/01-introduction-to-geographic-data-in-python.ipynb b/source/part2/chapter-05/nb/01-introduction-to-geographic-data-in-python.ipynb index 1d43413f..2d4db8c0 100644 --- a/source/part2/chapter-05/nb/01-introduction-to-geographic-data-in-python.ipynb +++ b/source/part2/chapter-05/nb/01-introduction-to-geographic-data-in-python.ipynb @@ -45,7 +45,7 @@ "\n", "All of these geometries are defined in *Simple Features Access Specification* ({cite}`Herring_2011`), which is a standard (ISO 19125-1) formalized by the *Open Geospatial Consortium* and *International Organization for Standardization*. Most (if not all) programming languages follow this same standard to represent spatial data. The text underneath each geometry (e.g. `Point (25 60.5)`) shows how each of these geometries can be represented as text (Figure 5.3). The way the text is formatted follows a specification called *{term}`Well-known text` (WKT)* which is also defined in the Simple Features Access Specification. The geometries can also be represented in binary format, which is called *{term}`Well-known binary` (WKB)*. WKB is useful for storing the geometries in a more compact form, but it is not human-readable. Most often, you don't need to worry about these technical details when working with spatial data in Python, but it is useful to know the foundations underlying most (if not all) GIS libraries.\n", "\n", - "![_**Figure 5.3.** Vector data model following the Simple Features Access Specification._](../img/vector_data_model.jpg)\n", + "![_**Figure 5.3.** Vector data model following the Simple Features Access Specification._](../img/vector_data_model.png)\n", "\n", "_**Figure 5.3.** Vector data model following the Simple Features Access Specification._" ] @@ -143,7 +143,7 @@ "\n", "Each cell in the raster dataset typically contains a value as shown on the left in Figure 5.4 (although the cell value can also be `NoData`). This is different compared to vector data, in which the geometries (observations) can be unevenly distributed across space, although it is possible to also represent a regular grid with polygons, it is just much less efficient computationally. Each cell value also has an index (i.e. position) that can be accessed based on row and column numbers. For instance, the value (*11*) from the bottom-left corner cell can be accessed at index `(3,0)` in which the first number is the row number and the second is the column number. Cell values can be plotted by given a color according a specific *{term}`colormap`* (see the legend on the right) which turns the data into more understandable format, making it possible to detect patterns or trends from the data. For example in Figure 5.4, it is easy to detect that there is a cluster of high values on the bottom right corner. Detecting this pattern just by looking at cell values on the left is much more difficult task, especially if you would have much bigger raster than what we have here (4x4 grid). Also a basic feature of raster data is that the cell size of the grid can vary. For example, the Figure 5.4 and the top-right subplot in Figure 5.2 represents the data with 10 meter *{term}`spatial resolution`*, i.e. the size of an individual cell is 10 by 10 meters. However, the bottom-right subplot in Figure 5.2 represents the buildings with 1 meter spatial resolution. This is an important aspect when working with raster data, because the spatial resolution determines how accurately the real-world entities, such as buildings or topographic features, can be represented or identified from the data. Raster data is commonly used to represent e.g. satellite imagery, digital elevation models and other type of data, in which the spatial extent of the data is large (covering e.g. whole countries, continents or the world) with continuous measurements across the space. It is good to be awere though, that it is also possible to store discrete or categorical data to a raster, such as landuse classification data. Raster data is commonly used e.g. for environmental monitoring, meteorology and cartography. \n", "\n", - "![_**Figure 5.4.** Raster data model._](../img/raster_data_model.jpg)\n", + "![_**Figure 5.4.** Raster data model._](../img/raster_data_model.png)\n", "\n", "_**Figure 5.4.** Raster data model._" ] @@ -155,7 +155,7 @@ "source": [ "One fundamental way to characterize a raster dataset is based on their *{term}`bit depth`* (also called as *{term}`pixel depth`*). The bit depth defines the range of distinct values that the raster can store. For example, a 1-bit raster can only store 2 distinct values: 0 and 1, whereas 8-bit raster can have 256 different values that range between 0 to 255, as shown in Figure 5.5. \n", "\n", - "![_**Figure 5.5**. Examples of raster bit depths._](../img/raster_bit_depths.jpg)\n", + "![_**Figure 5.5**. Examples of raster bit depths._](../img/raster_bit_depths.png)\n", "\n", "_**Figure 5.5**. Examples of raster bit depths._" ] diff --git a/source/part2/chapter-05/nb/02-introduction-to-coordinate-reference-systems.ipynb b/source/part2/chapter-05/nb/02-introduction-to-coordinate-reference-systems.ipynb index d3efcbac..d63fe653 100644 --- a/source/part2/chapter-05/nb/02-introduction-to-coordinate-reference-systems.ipynb +++ b/source/part2/chapter-05/nb/02-introduction-to-coordinate-reference-systems.ipynb @@ -98,7 +98,7 @@ "id": "89ddcce0-b427-412a-addc-eec4cf5e9fc5", "metadata": {}, "source": [ - "![_**Figure 5.11**. Different map projections that can be used to represent the geographic data on a two-dimensional plane._](../img/projections.jpg)\n", + "![_**Figure 5.11**. Different map projections that can be used to represent the geographic data on a two-dimensional plane._](../img/projections.png)\n", "\n", "_**Figure 5.11**. Different map projections that can be used to represent the geographic data on a two-dimensional plane._" ] @@ -190,7 +190,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.5" + "version": "3.11.7" } }, "nbformat": 4,