<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> <meta charset="utf-8"> <meta name="generator" content="quarto-1.1.251"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> <title>Mapping and spatial analyses in R for One Health studies - 4 Using raster data</title> <style> code{white-space: pre-wrap;} span.smallcaps{font-variant: small-caps;} div.columns{display: flex; gap: min(4vw, 1.5em);} div.column{flex: auto; overflow-x: auto;} div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} ul.task-list{list-style: none;} ul.task-list li input[type="checkbox"] { width: 0.8em; margin: 0 0.8em 0.2em -1.6em; vertical-align: middle; } pre > code.sourceCode { white-space: pre; position: relative; } pre > code.sourceCode > span { display: inline-block; line-height: 1.25; } pre > code.sourceCode > span:empty { height: 1.2em; } .sourceCode { overflow: visible; } code.sourceCode > span { color: inherit; text-decoration: inherit; } div.sourceCode { margin: 1em 0; } pre.sourceCode { margin: 0; } @media screen { div.sourceCode { overflow: auto; } } @media print { pre > code.sourceCode { white-space: pre-wrap; } pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; } } pre.numberSource code { counter-reset: source-line 0; } pre.numberSource code > span { position: relative; left: -4em; counter-increment: source-line; } pre.numberSource code > span > a:first-child::before { content: counter(source-line); position: relative; left: -1em; text-align: right; vertical-align: baseline; border: none; display: inline-block; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; padding: 0 4px; width: 4em; color: #aaaaaa; } pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; } div.sourceCode { } @media screen { pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; } } code span.al { color: #ff0000; font-weight: bold; } /* Alert */ code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */ code span.at { color: #7d9029; } /* Attribute */ code span.bn { color: #40a070; } /* BaseN */ code span.bu { color: #008000; } /* BuiltIn */ code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */ code span.ch { color: #4070a0; } /* Char */ code span.cn { color: #880000; } /* Constant */ code span.co { color: #60a0b0; font-style: italic; } /* Comment */ code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */ code span.do { color: #ba2121; font-style: italic; } /* Documentation */ code span.dt { color: #902000; } /* DataType */ code span.dv { color: #40a070; } /* DecVal */ code span.er { color: #ff0000; font-weight: bold; } /* Error */ code span.ex { } /* Extension */ code span.fl { color: #40a070; } /* Float */ code span.fu { color: #06287e; } /* Function */ code span.im { color: #008000; font-weight: bold; } /* Import */ code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */ code span.kw { color: #007020; font-weight: bold; } /* Keyword */ code span.op { color: #666666; } /* Operator */ code span.ot { color: #007020; } /* Other */ code span.pp { color: #bc7a00; } /* Preprocessor */ code span.sc { color: #4070a0; } /* SpecialChar */ code span.ss { color: #bb6688; } /* SpecialString */ code span.st { color: #4070a0; } /* String */ code span.va { color: #19177c; } /* Variable */ code span.vs { color: #4070a0; } /* VerbatimString */ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */ div.csl-bib-body { } div.csl-entry { clear: both; } .hanging div.csl-entry { margin-left:2em; text-indent:-2em; } div.csl-left-margin { min-width:2em; float:left; } div.csl-right-inline { margin-left:2em; padding-left:1em; } div.csl-indent { margin-left: 2em; } </style> <script src="site_libs/quarto-nav/quarto-nav.js"></script> <script src="site_libs/quarto-nav/headroom.min.js"></script> <script src="site_libs/clipboard/clipboard.min.js"></script> <script src="site_libs/quarto-search/autocomplete.umd.js"></script> <script src="site_libs/quarto-search/fuse.min.js"></script> <script src="site_libs/quarto-search/quarto-search.js"></script> <meta name="quarto:offset" content="./"> <link href="./05-mapping_with_r.html" rel="next"> <link href="./03-vector_data.html" rel="prev"> <script src="site_libs/quarto-html/quarto.js"></script> <script src="site_libs/quarto-html/popper.min.js"></script> <script src="site_libs/quarto-html/tippy.umd.min.js"></script> <script src="site_libs/quarto-html/anchor.min.js"></script> <link href="site_libs/quarto-html/tippy.css" rel="stylesheet"> <link href="site_libs/quarto-html/quarto-syntax-highlighting.css" rel="stylesheet" id="quarto-text-highlighting-styles"> <script src="site_libs/bootstrap/bootstrap.min.js"></script> <link href="site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet"> <link href="site_libs/bootstrap/bootstrap.min.css" rel="stylesheet" id="quarto-bootstrap" data-mode="light"> <script id="quarto-search-options" type="application/json">{ "location": "sidebar", "copy-button": false, "collapse-after": 3, "panel-placement": "start", "type": "textbox", "limit": 20, "language": { "search-no-results-text": "No results", "search-matching-documents-text": "matching documents", "search-copy-link-title": "Copy link to search", "search-hide-matches-text": "Hide additional matches", "search-more-match-text": "more match in this document", "search-more-matches-text": "more matches in this document", "search-clear-button-title": "Clear", "search-detached-cancel-button-title": "Cancel", "search-submit-button-title": "Submit" } }</script> <style>html{ scroll-behavior: smooth; }</style> <script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js" type="text/javascript"></script> <link rel="stylesheet" href="styles.css"> </head> <body class="nav-sidebar floating"> <div id="quarto-search-results"></div> <header id="quarto-header" class="headroom fixed-top"> <nav class="quarto-secondary-nav" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar" aria-controls="quarto-sidebar" aria-expanded="false" aria-label="Toggle sidebar navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }"> <div class="container-fluid d-flex justify-content-between"> <h1 class="quarto-secondary-nav-title"><span class="chapter-number">4</span> <span class="chapter-title">Using raster data</span></h1> <button type="button" class="quarto-btn-toggle btn" aria-label="Show secondary navigation"> <i class="bi bi-chevron-right"></i> </button> </div> </nav> </header> <!-- content --> <div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article"> <!-- sidebar --> <nav id="quarto-sidebar" class="sidebar collapse sidebar-navigation floating overflow-auto"> <div class="pt-lg-2 mt-2 text-left sidebar-header"> <div class="sidebar-title mb-0 py-0"> <a href="./">Mapping and spatial analyses in R for One Health studies</a> <div class="sidebar-tools-main"> <a href="https://forge.ird.fr/espace-dev/personnels/longour/geohealth/documentation/rspatial-for-onehealth" title="Source Code" class="sidebar-tool px-1"><i class="bi bi-git"></i></a> </div> </div> </div> <div class="mt-2 flex-shrink-0 align-items-center"> <div class="sidebar-search"> <div id="quarto-search" class="" title="Search"></div> </div> </div> <div class="sidebar-menu-container"> <ul class="list-unstyled mt-1"> <li class="sidebar-item"> <div class="sidebar-item-container"> <a href="./index.html" class="sidebar-item-text sidebar-link">Preface</a> </div> </li> <li class="sidebar-item"> <div class="sidebar-item-container"> <a href="./01-introduction.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">1</span> <span class="chapter-title">Introduction</span></a> </div> </li> <li class="sidebar-item"> <div class="sidebar-item-container"> <a href="./02-data_acquisition.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">2</span> <span class="chapter-title">Data Acquisition</span></a> </div> </li> <li class="sidebar-item"> <div class="sidebar-item-container"> <a href="./03-vector_data.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">3</span> <span class="chapter-title">Using vector data</span></a> </div> </li> <li class="sidebar-item"> <div class="sidebar-item-container"> <a href="./04-raster_data.html" class="sidebar-item-text sidebar-link active"><span class="chapter-number">4</span> <span class="chapter-title">Using raster data</span></a> </div> </li> <li class="sidebar-item"> <div class="sidebar-item-container"> <a href="./05-mapping_with_r.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">5</span> <span class="chapter-title">Mapping With R</span></a> </div> </li> <li class="sidebar-item"> <div class="sidebar-item-container"> <a href="./07-basic_statistics.html" class="sidebar-item-text sidebar-link"><span class="chapter-number">6</span> <span class="chapter-title">Basic statistics for spatial analysis</span></a> </div> </li> <li class="sidebar-item"> <div class="sidebar-item-container"> <a href="./references.html" class="sidebar-item-text sidebar-link">References</a> </div> </li> </ul> </div> </nav> <!-- margin-sidebar --> <div id="quarto-margin-sidebar" class="sidebar margin-sidebar"> <nav id="TOC" role="doc-toc" class="toc-active"> <h2 id="toc-title">Table of contents</h2> <ul> <li><a href="#format-of-objects-spatraster" id="toc-format-of-objects-spatraster" class="nav-link active" data-scroll-target="#format-of-objects-spatraster"><span class="toc-section-number">4.1</span> Format of objects <code>SpatRaster</code></a></li> <li><a href="#importing-and-exporting-data" id="toc-importing-and-exporting-data" class="nav-link" data-scroll-target="#importing-and-exporting-data"><span class="toc-section-number">4.2</span> Importing and exporting data</a></li> <li><a href="#displaying-a-spatraster-object" id="toc-displaying-a-spatraster-object" class="nav-link" data-scroll-target="#displaying-a-spatraster-object"><span class="toc-section-number">4.3</span> Displaying a SpatRaster object</a></li> <li><a href="#change-to-the-study-area" id="toc-change-to-the-study-area" class="nav-link" data-scroll-target="#change-to-the-study-area"><span class="toc-section-number">4.4</span> Change to the study area</a> <ul> <li><a href="#reprojections" id="toc-reprojections" class="nav-link" data-scroll-target="#reprojections"><span class="toc-section-number">4.4.1</span> (Re)projections</a></li> <li><a href="#crop" id="toc-crop" class="nav-link" data-scroll-target="#crop"><span class="toc-section-number">4.4.2</span> Crop</a></li> <li><a href="#mask" id="toc-mask" class="nav-link" data-scroll-target="#mask"><span class="toc-section-number">4.4.3</span> Mask</a></li> <li><a href="#aggregation-and-disaggregation" id="toc-aggregation-and-disaggregation" class="nav-link" data-scroll-target="#aggregation-and-disaggregation"><span class="toc-section-number">4.4.4</span> Aggregation and disaggregation</a></li> <li><a href="#raster-fusion" id="toc-raster-fusion" class="nav-link" data-scroll-target="#raster-fusion"><span class="toc-section-number">4.4.5</span> Raster fusion</a></li> <li><a href="#segregate" id="toc-segregate" class="nav-link" data-scroll-target="#segregate"><span class="toc-section-number">4.4.6</span> Segregate</a></li> </ul></li> <li><a href="#map-algebra" id="toc-map-algebra" class="nav-link" data-scroll-target="#map-algebra"><span class="toc-section-number">4.5</span> Map Algebra</a> <ul> <li><a href="#local-operations" id="toc-local-operations" class="nav-link" data-scroll-target="#local-operations"><span class="toc-section-number">4.5.1</span> Local operations</a> <ul class="collapse"> <li><a href="#value-replacement" id="toc-value-replacement" class="nav-link" data-scroll-target="#value-replacement"><span class="toc-section-number">4.5.1.1</span> Value replacement</a></li> <li><a href="#operation-on-each-cell" id="toc-operation-on-each-cell" class="nav-link" data-scroll-target="#operation-on-each-cell"><span class="toc-section-number">4.5.1.2</span> Operation on each cell</a></li> <li><a href="#reclassification" id="toc-reclassification" class="nav-link" data-scroll-target="#reclassification"><span class="toc-section-number">4.5.1.3</span> Reclassification</a></li> <li><a href="#operation-on-several-layers-ex-ndvi" id="toc-operation-on-several-layers-ex-ndvi" class="nav-link" data-scroll-target="#operation-on-several-layers-ex-ndvi"><span class="toc-section-number">4.5.1.4</span> Operation on several layers (ex: NDVI)</a></li> </ul></li> <li><a href="#focal-operations" id="toc-focal-operations" class="nav-link" data-scroll-target="#focal-operations"><span class="toc-section-number">4.5.2</span> Focal operations</a> <ul class="collapse"> <li><a href="#focal-operations-for-elevation-rasters" id="toc-focal-operations-for-elevation-rasters" class="nav-link" data-scroll-target="#focal-operations-for-elevation-rasters"><span class="toc-section-number">4.5.2.1</span> Focal operations for elevation rasters</a></li> </ul></li> <li><a href="#global-operations" id="toc-global-operations" class="nav-link" data-scroll-target="#global-operations"><span class="toc-section-number">4.5.3</span> Global operations</a></li> <li><a href="#zonal-operation" id="toc-zonal-operation" class="nav-link" data-scroll-target="#zonal-operation"><span class="toc-section-number">4.5.4</span> Zonal operation</a> <ul class="collapse"> <li><a href="#zonal-operation-on-an-extraction" id="toc-zonal-operation-on-an-extraction" class="nav-link" data-scroll-target="#zonal-operation-on-an-extraction"><span class="toc-section-number">4.5.4.1</span> Zonal operation on an extraction</a></li> <li><a href="#zonal-operation-from-a-vector-layer" id="toc-zonal-operation-from-a-vector-layer" class="nav-link" data-scroll-target="#zonal-operation-from-a-vector-layer"><span class="toc-section-number">4.5.4.2</span> Zonal operation from a vector layer</a></li> <li><a href="#zonal-operation-from-raster" id="toc-zonal-operation-from-raster" class="nav-link" data-scroll-target="#zonal-operation-from-raster"><span class="toc-section-number">4.5.4.3</span> Zonal operation from raster</a></li> </ul></li> </ul></li> <li><a href="#transformation-and-conversion" id="toc-transformation-and-conversion" class="nav-link" data-scroll-target="#transformation-and-conversion"><span class="toc-section-number">4.6</span> Transformation and conversion</a> <ul> <li><a href="#rasterization" id="toc-rasterization" class="nav-link" data-scroll-target="#rasterization"><span class="toc-section-number">4.6.1</span> Rasterization</a></li> <li><a href="#vectorisation" id="toc-vectorisation" class="nav-link" data-scroll-target="#vectorisation"><span class="toc-section-number">4.6.2</span> Vectorisation</a></li> <li><a href="#terra-raster-sf-stars" id="toc-terra-raster-sf-stars" class="nav-link" data-scroll-target="#terra-raster-sf-stars"><span class="toc-section-number">4.6.3</span> terra, raster, sf, stars…</a></li> </ul></li> </ul> </nav> </div> <!-- main --> <main class="content" id="quarto-document-content"> <header id="title-block-header" class="quarto-title-block default"> <div class="quarto-title"> <h1 class="title d-none d-lg-block"><span class="chapter-number">4</span> <span class="chapter-title">Using raster data</span></h1> </div> <div class="quarto-title-meta"> </div> </header> <p>This chapter is largely inspired by two presentation; <span class="citation" data-cites="MmadelinSIGR">Madelin (<a href="references.html#ref-MmadelinSIGR" role="doc-biblioref">2021</a>)</span> and <span class="citation" data-cites="JNowosadSIGR">Nowosad (<a href="references.html#ref-JNowosadSIGR" role="doc-biblioref">2021</a>)</span>; carried out as part of the <a href="https://sigr2021.github.io/site/index.html">SIGR2021</a> thematic school.</p> <section id="format-of-objects-spatraster" class="level2" data-number="4.1"> <h2 data-number="4.1" class="anchored" data-anchor-id="format-of-objects-spatraster"><span class="header-section-number">4.1</span> Format of objects <code>SpatRaster</code></h2> <p>The package <code>terra</code> <span class="citation" data-cites="terra">(<a href="references.html#ref-terra" role="doc-biblioref">Hijmans 2022</a>)</span> allows to handle vector and raster data. To manipulate this spatial data, <code>terra</code> store it in object of type <code>SpatVector</code> and <code>SpatRaster</code>. In this chapter, we focus on the manipulation of raster data (<code>SpatRaster</code>) from functions offered by this package.</p> <p>An object <code>SpatRaster</code> allows to handle vector and raster data, in one or more layers (variables). This object also stores a number of fundamental parameters that describe it (number of columns, rows, spatial extent, coordinate reference system, etc.).</p> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="img/raster.png" class="img-fluid figure-img" width="350"></p> <p></p><figcaption class="figure-caption">Source : <span class="citation" data-cites="RasterCheatSheet">(<a href="references.html#ref-RasterCheatSheet" role="doc-biblioref">Racine 2016</a>)</span></figcaption><p></p> </figure> </div> </section> <section id="importing-and-exporting-data" class="level2" data-number="4.2"> <h2 data-number="4.2" class="anchored" data-anchor-id="importing-and-exporting-data"><span class="header-section-number">4.2</span> Importing and exporting data</h2> <p>The package <code>terra</code> allows importing and exporting raster files. It is based on the <a href="https://gdal.org/">GDAL</a> library which makes it possible to read and process a very large number of geographic image formats.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb1"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">library</span>(terra)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <p>The function <code>rast()</code> allows you to create and/or import raster data. The following lines import the raster file <strong>elevation.tif</strong> (<a href="https://fr.wikipedia.org/wiki/Tagged_Image_File_Format"><em>Tagged Image File Format</em></a>) into an object of type <code>SpatRaster</code> (default).</p> <div class="cell"> <div class="sourceCode cell-code" id="cb2"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a>elevation <span class="ot"><-</span> <span class="fu">rast</span>(<span class="st">"data_cambodia/elevation.tif"</span>) </span> <span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a>elevation</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output cell-output-stdout"> <pre><code>class : SpatRaster dimensions : 5235, 6458, 1 (nrow, ncol, nlyr) resolution : 0.0008333394, 0.0008332568 (x, y) extent : 102.2935, 107.6752, 10.33984, 14.70194 (xmin, xmax, ymin, ymax) coord. ref. : lon/lat WGS 84 (EPSG:4326) source : elevation.tif name : elevation </code></pre> </div> </div> <p>Modifying the name of the stored variable (altitude).</p> <div class="cell"> <div class="sourceCode cell-code" id="cb4"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="fu">names</span>(elevation) <span class="ot"><-</span> <span class="st">"Altitude"</span> </span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <p>The function <code>writeRaster()</code> allow you to save an object <code>SpatRaster</code> on your machine, in the format of your choice.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb5"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="fu">writeRaster</span>(<span class="at">x =</span> elevation, <span class="at">filename =</span> <span class="st">"data_cambodia/new_elevation.tif"</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> </section> <section id="displaying-a-spatraster-object" class="level2" data-number="4.3"> <h2 data-number="4.3" class="anchored" data-anchor-id="displaying-a-spatraster-object"><span class="header-section-number">4.3</span> Displaying a SpatRaster object</h2> <p>The function <code>plot()</code> is use to display an object <code>SpatRaster</code>.</p> <div class="cell" data-layout-align="center"> <div class="sourceCode cell-code" id="cb6"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(elevation)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/affichage_1_raster-1.png" class="img-fluid figure-img" width="576"></p> </figure> </div> </div> </div> <p>A raster always contains numerical data, but it can be both quantitative data and numerically coded qualitative (categorical) data (ex: type of land cover).</p> <p>Specify the type of data stored with the augment <code>type</code> (<code>type = "continuous"</code> default), to display them correctly.</p> <p>Import and display of raster containing categorical data: Phnom Penh Land Cover 2019 (land cover types) with a resolution of 1.5 meters:</p> <div class="cell"> <div class="sourceCode cell-code" id="cb7"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>lulc_2019 <span class="ot"><-</span> <span class="fu">rast</span>(<span class="st">"data_cambodia/lulc_2019.tif"</span>) <span class="co">#Import Phnom Penh landcover 2019, landcover types</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <p>The landcover data was produced from SPOT7 satellite image with 1.5 meter spatial resolution. An extraction centered on the municipality of Phnom Penh was then carried out.</p> <div class="cell" data-layout-align="center"> <div class="sourceCode cell-code" id="cb8"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(lulc_2019, <span class="at">type =</span> <span class="st">"classes"</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/affichage_raster_2-1.png" class="img-fluid figure-img" width="576"></p> </figure> </div> </div> </div> <p>To display the actual tiles of landcover types you can proceed as follows.</p> <div class="cell" data-layout-align="center"> <div class="sourceCode cell-code" id="cb9"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a>class_name <span class="ot"><-</span> <span class="fu">c</span>(</span> <span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a> <span class="st">"Roads"</span>,</span> <span id="cb9-3"><a href="#cb9-3" aria-hidden="true" tabindex="-1"></a> <span class="st">"Built-up areas"</span>,</span> <span id="cb9-4"><a href="#cb9-4" aria-hidden="true" tabindex="-1"></a> <span class="st">"Water Bodies and rivers"</span>,</span> <span id="cb9-5"><a href="#cb9-5" aria-hidden="true" tabindex="-1"></a> <span class="st">"Wetlands"</span>,</span> <span id="cb9-6"><a href="#cb9-6" aria-hidden="true" tabindex="-1"></a> <span class="st">"Dry bare area"</span>,</span> <span id="cb9-7"><a href="#cb9-7" aria-hidden="true" tabindex="-1"></a> <span class="st">"Bare crop fields"</span>,</span> <span id="cb9-8"><a href="#cb9-8" aria-hidden="true" tabindex="-1"></a> <span class="st">"Low vegetation areas"</span>,</span> <span id="cb9-9"><a href="#cb9-9" aria-hidden="true" tabindex="-1"></a> <span class="st">"High vegetation areas"</span>,</span> <span id="cb9-10"><a href="#cb9-10" aria-hidden="true" tabindex="-1"></a> <span class="st">"Forested areas"</span>)</span> <span id="cb9-11"><a href="#cb9-11" aria-hidden="true" tabindex="-1"></a></span> <span id="cb9-12"><a href="#cb9-12" aria-hidden="true" tabindex="-1"></a>class_color <span class="ot"><-</span> <span class="fu">c</span>(<span class="st">"#070401"</span>, <span class="st">"#c84639"</span>, <span class="st">"#1398eb"</span>,<span class="st">"#8bc2c2"</span>,</span> <span id="cb9-13"><a href="#cb9-13" aria-hidden="true" tabindex="-1"></a> <span class="st">"#dc7b34"</span>, <span class="st">"#a6bd5f"</span>,<span class="st">"#e8e8e8"</span>, <span class="st">"#4fb040"</span>, <span class="st">"#35741f"</span>)</span> <span id="cb9-14"><a href="#cb9-14" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(lulc_2019,</span> <span id="cb9-15"><a href="#cb9-15" aria-hidden="true" tabindex="-1"></a> <span class="at">type =</span> <span class="st">"classes"</span>,</span> <span id="cb9-16"><a href="#cb9-16" aria-hidden="true" tabindex="-1"></a> <span class="at">levels =</span> class_name,</span> <span id="cb9-17"><a href="#cb9-17" aria-hidden="true" tabindex="-1"></a> <span class="at">col =</span> class_color,</span> <span id="cb9-18"><a href="#cb9-18" aria-hidden="true" tabindex="-1"></a> <span class="at">plg =</span> <span class="fu">list</span>(<span class="at">cex =</span> <span class="fl">0.7</span>),</span> <span id="cb9-19"><a href="#cb9-19" aria-hidden="true" tabindex="-1"></a> <span class="at">mar =</span> <span class="fu">c</span>(<span class="fl">3.1</span>, <span class="fl">3.1</span>, <span class="fl">2.1</span>, <span class="dv">10</span>) <span class="co">#The margin are (bottom, left, top, right) respectively</span></span> <span id="cb9-20"><a href="#cb9-20" aria-hidden="true" tabindex="-1"></a> )</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/affichage_raster_3-1.png" class="img-fluid figure-img" width="1152"></p> </figure> </div> </div> </div> </section> <section id="change-to-the-study-area" class="level2" data-number="4.4"> <h2 data-number="4.4" class="anchored" data-anchor-id="change-to-the-study-area"><span class="header-section-number">4.4</span> Change to the study area</h2> <section id="reprojections" class="level3" data-number="4.4.1"> <h3 data-number="4.4.1" class="anchored" data-anchor-id="reprojections"><span class="header-section-number">4.4.1</span> (Re)projections</h3> <p>To modify the projection system of a raster, use the function <code>project()</code>. It is then necessary to indicate the method for estimating the new cell values.</p> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="img/project_raster.png" class="img-fluid figure-img"></p> <p></p><figcaption class="figure-caption">Source : Centre Canadien de Télédétection</figcaption><p></p> </figure> </div> <p>Four interpolation methods are available:</p> <ul> <li><strong><em>near</em></strong> : nearest neighbor, fast and default method for qualitative data;<br> </li> <li><strong><em>bilinear</em></strong> : bilinear interpolation. Default method for quantitative data;<br> </li> <li><strong><em>cubic</em></strong> : cubic interpolation;<br> </li> <li><strong><em>cubicspline</em></strong> : cubic spline interpolation.</li> </ul> <div class="cell" data-layout-align="center"> <div class="sourceCode cell-code" id="cb10"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Re-project data </span></span> <span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a></span> <span id="cb10-3"><a href="#cb10-3" aria-hidden="true" tabindex="-1"></a>elevation_utm <span class="ot">=</span> <span class="fu">project</span>(<span class="at">x =</span> elevation, <span class="at">y =</span> <span class="st">"EPSG:32648"</span>, <span class="at">method =</span> <span class="st">"bilinear"</span>) <span class="co">#from WGS84(EPSG:4326) to UTM zone48N(EPSG:32648) </span></span> <span id="cb10-4"><a href="#cb10-4" aria-hidden="true" tabindex="-1"></a>lulc_2019_utm <span class="ot">=</span> <span class="fu">project</span>(<span class="at">x =</span> lulc_2019, <span class="at">y =</span> <span class="st">"EPSG:32648"</span>, <span class="at">method =</span> <span class="st">"near"</span>) <span class="co">#keep original projection: UTM zone48N(EPSG:32648)</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <div class="cell" data-layout-align="center"> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/reproj_raster_2-1.png" class="img-fluid figure-img" width="672"></p> </figure> </div> </div> </div> </section> <section id="crop" class="level3" data-number="4.4.2"> <h3 data-number="4.4.2" class="anchored" data-anchor-id="crop"><span class="header-section-number">4.4.2</span> Crop</h3> <p>Clipping a raster to the extent of another object <code>SpatVector</code> or <code>SpatRaster</code> is achievable with the <code>crop()</code>.</p> <div class="quarto-layout-panel"> <div class="quarto-layout-row quarto-layout-valign-top"> <div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: center;"> <p><img src="img/crop.png" class="img-fluid"></p> </div> <div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: center;"> <p><img src="img/crop2.png" class="img-fluid"></p> </div> </div> <div class="quarto-layout-row quarto-layout-valign-top"> <div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: center;"> <p>Source : <span class="citation" data-cites="RasterCheatSheet">(<a href="references.html#ref-RasterCheatSheet" role="doc-biblioref">Racine 2016</a>)</span></p> </div> </div> </div> <p>Import vector data of (municipal divisions) using function <code>vect</code>. This data will be stored in an <code>SpatVector</code> object.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb11"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a>district <span class="ot"><-</span> <span class="fu">vect</span>(<span class="st">"data_cambodia/cambodia.gpkg"</span>, <span class="at">layer=</span><span class="st">"district"</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <p>Extraction of district boundaries of Thma Bang district (ADM2_PCODE : KH0907).</p> <div class="cell"> <div class="sourceCode cell-code" id="cb12"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a>thma_bang <span class="ot"><-</span> <span class="fu">subset</span>(district, district<span class="sc">$</span>ADM2_PCODE <span class="sc">==</span> <span class="st">"KH0907"</span>) </span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <p>Using the function <code>crop()</code>, Both data layers must be in the same projection.</p> <div class="cell" data-layout-align="center"> <div class="sourceCode cell-code" id="cb13"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a>crop_thma_bang <span class="ot"><-</span> <span class="fu">crop</span>(elevation_utm, thma_bang)</span> <span id="cb13-2"><a href="#cb13-2" aria-hidden="true" tabindex="-1"></a></span> <span id="cb13-3"><a href="#cb13-3" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(crop_thma_bang)</span> <span id="cb13-4"><a href="#cb13-4" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(thma_bang, <span class="at">add=</span><span class="cn">TRUE</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/crop_raster_3-1.png" class="img-fluid figure-img" width="576"></p> </figure> </div> </div> </div> </section> <section id="mask" class="level3" data-number="4.4.3"> <h3 data-number="4.4.3" class="anchored" data-anchor-id="mask"><span class="header-section-number">4.4.3</span> Mask</h3> <p>To display only the values of a raster contained in a polygon, use the function <code>mask()</code>.</p> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="img/mask.png" class="img-fluid figure-img" width="350"></p> <p></p><figcaption class="figure-caption">Source : <span class="citation" data-cites="RasterCheatSheet">(<a href="references.html#ref-RasterCheatSheet" role="doc-biblioref">Racine 2016</a>)</span></figcaption><p></p> </figure> </div> <p>Creation of a mask on the <strong>crop_thma_bang</strong> raster to the municipal limits (polygon) of <strong>Thma Bang district</strong>.</p> <div class="cell" data-layout-align="center"> <div class="sourceCode cell-code" id="cb14"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a>mask_thma_bang <span class="ot"><-</span> <span class="fu">mask</span>(crop_thma_bang, thma_bang)</span> <span id="cb14-2"><a href="#cb14-2" aria-hidden="true" tabindex="-1"></a></span> <span id="cb14-3"><a href="#cb14-3" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(mask_thma_bang)</span> <span id="cb14-4"><a href="#cb14-4" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(thma_bang, <span class="at">add =</span> <span class="cn">TRUE</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/mask_raster-1.png" class="img-fluid figure-img" width="576"></p> </figure> </div> </div> </div> </section> <section id="aggregation-and-disaggregation" class="level3" data-number="4.4.4"> <h3 data-number="4.4.4" class="anchored" data-anchor-id="aggregation-and-disaggregation"><span class="header-section-number">4.4.4</span> Aggregation and disaggregation</h3> <p>Resampling a raster to a different resolution is done in two steps.</p> <div class="quarto-layout-panel"> <div class="quarto-layout-row quarto-layout-valign-top"> <div class="quarto-layout-cell" style="flex-basis: 33.3%;justify-content: center;"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="img/raster.png" class="img-fluid figure-img"></p> <p></p><figcaption class="figure-caption">1</figcaption><p></p> </figure> </div> </div> <div class="quarto-layout-cell" style="flex-basis: 33.3%;justify-content: center;"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="img/agr_raster.png" class="img-fluid figure-img"></p> <p></p><figcaption class="figure-caption">2</figcaption><p></p> </figure> </div> </div> <div class="quarto-layout-cell" style="flex-basis: 33.3%;justify-content: center;"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="img/agr_raster_2.png" class="img-fluid figure-img"></p> <p></p><figcaption class="figure-caption">3</figcaption><p></p> </figure> </div> </div> </div> <div class="quarto-layout-row quarto-layout-valign-top"> <div class="quarto-layout-cell" style="flex-basis: 33.3%;justify-content: center;"> <p>Source : <span class="citation" data-cites="RasterCheatSheet">(<a href="references.html#ref-RasterCheatSheet" role="doc-biblioref">Racine 2016</a>)</span></p> </div> </div> </div> <p>Display the resolution of a raster with the function <code>res()</code>.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb15"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a><span class="fu">res</span>(elevation_utm) <span class="co">#check cell size</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output cell-output-stdout"> <pre><code>[1] 91.19475 91.19475</code></pre> </div> </div> <p>Create a grid with the same extent, then decrease the spatial resolution (larger cells).</p> <div class="cell"> <div class="sourceCode cell-code" id="cb17"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a>elevation_LowerGrid <span class="ot"><-</span> elevation_utm</span> <span id="cb17-2"><a href="#cb17-2" aria-hidden="true" tabindex="-1"></a><span class="co"># elevation_HigherGrid <- elevation_utm</span></span> <span id="cb17-3"><a href="#cb17-3" aria-hidden="true" tabindex="-1"></a></span> <span id="cb17-4"><a href="#cb17-4" aria-hidden="true" tabindex="-1"></a><span class="fu">res</span>(elevation_LowerGrid) <span class="ot"><-</span> <span class="dv">1000</span> <span class="co">#cells size = 1000 meter</span></span> <span id="cb17-5"><a href="#cb17-5" aria-hidden="true" tabindex="-1"></a><span class="co"># res(elevation_HigherGrid) <- 10 #cells size = 10 meter</span></span> <span id="cb17-6"><a href="#cb17-6" aria-hidden="true" tabindex="-1"></a></span> <span id="cb17-7"><a href="#cb17-7" aria-hidden="true" tabindex="-1"></a>elevation_LowerGrid</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output cell-output-stdout"> <pre><code>class : SpatRaster dimensions : 484, 589, 1 (nrow, ncol, nlyr) resolution : 1000, 1000 (x, y) extent : 203586.3, 792586.3, 1142954, 1626954 (xmin, xmax, ymin, ymax) coord. ref. : WGS 84 / UTM zone 48N (EPSG:32648) </code></pre> </div> </div> <p>The function <code>resample()</code> allows to resample the atarting values in the new spatial resolution. Several resampling methods are available (cf. <a href="#reprojections">partie 5.4.1</a>).</p> <div class="cell" data-layout-align="center"> <div class="sourceCode cell-code" id="cb19"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a>elevation_LowerGrid <span class="ot"><-</span> <span class="fu">resample</span>(elevation_utm, </span> <span id="cb19-2"><a href="#cb19-2" aria-hidden="true" tabindex="-1"></a> elevation_LowerGrid, </span> <span id="cb19-3"><a href="#cb19-3" aria-hidden="true" tabindex="-1"></a> <span class="at">method =</span> <span class="st">"bilinear"</span>) </span> <span id="cb19-4"><a href="#cb19-4" aria-hidden="true" tabindex="-1"></a></span> <span id="cb19-5"><a href="#cb19-5" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(elevation_LowerGrid, </span> <span id="cb19-6"><a href="#cb19-6" aria-hidden="true" tabindex="-1"></a> <span class="at">main=</span><span class="st">"Cell size = 1000m</span><span class="sc">\n</span><span class="st">Bilinear resampling method"</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/agr_raster_2-1.png" class="img-fluid figure-img" width="576"></p> </figure> </div> </div> </div> </section> <section id="raster-fusion" class="level3" data-number="4.4.5"> <h3 data-number="4.4.5" class="anchored" data-anchor-id="raster-fusion"><span class="header-section-number">4.4.5</span> Raster fusion</h3> <p>Merge multiple objects <code>SpatRaster</code> into one with <code>merge()</code> or <code>mosaic()</code>.</p> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="img/mosaic.png" class="img-fluid figure-img"></p> <p></p><figcaption class="figure-caption">Source : <a href="https://desktop.arcgis.com/fr/arcmap/10.3/manage-data/raster-and-images/what-is-a-mosaic.htm" class="uri">https://desktop.arcgis.com/fr/arcmap/10.3/manage-data/raster-and-images/what-is-a-mosaic.htm</a></figcaption><p></p> </figure> </div> <p>After cutting the elevation raster by the municipal boundary of Thma Bang district (cf <a href="#crop">partie 5.4.2</a>), we do the same thing for the neighboring municipality of Phnum Kravanh district.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb20"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb20-1"><a href="#cb20-1" aria-hidden="true" tabindex="-1"></a>phnum_kravanh <span class="ot"><-</span> <span class="fu">subset</span>(district, district<span class="sc">$</span>ADM2_PCODE <span class="sc">==</span> <span class="st">"KH1504"</span>) <span class="co"># Extraction of the municipal boundaries of Phnum Kravanh district</span></span> <span id="cb20-2"><a href="#cb20-2" aria-hidden="true" tabindex="-1"></a></span> <span id="cb20-3"><a href="#cb20-3" aria-hidden="true" tabindex="-1"></a>crop_phnum_kravanh <span class="ot"><-</span> <span class="fu">crop</span>(elevation_utm, phnum_kravanh) <span class="co">#clipping the elevation raster according to district boundaries</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <p>The <strong>crop_thma_bang</strong> and <strong>crop_phnum_kravanh</strong> elevation raster overlap spatially:</p> <div class="cell" data-layout-align="center"> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/merge_raster_1-1.png" class="img-fluid figure-img" width="768"></p> </figure> </div> </div> </div> <p>The difference between the functions <code>merge()</code> and <code>mosiac()</code> relates to values of the overlapping cells. The function <code>mosaic()</code> calculate the average value while <code>merge()</code> holding the value of the object <code>SpaRaster</code> called n the function.</p> <div class="cell" data-layout-align="center"> <div class="sourceCode cell-code" id="cb21"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb21-1"><a href="#cb21-1" aria-hidden="true" tabindex="-1"></a><span class="co">#in this example, merge() and mosaic() give the same result</span></span> <span id="cb21-2"><a href="#cb21-2" aria-hidden="true" tabindex="-1"></a>merge_raster <span class="ot"><-</span> <span class="fu">merge</span>(crop_thma_bang, crop_phnum_kravanh) </span> <span id="cb21-3"><a href="#cb21-3" aria-hidden="true" tabindex="-1"></a>mosaic_raster <span class="ot"><-</span> <span class="fu">mosaic</span>(crop_thma_bang, crop_phnum_kravanh)</span> <span id="cb21-4"><a href="#cb21-4" aria-hidden="true" tabindex="-1"></a></span> <span id="cb21-5"><a href="#cb21-5" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(merge_raster)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/merge_raster_2-1.png" class="img-fluid figure-img" width="576"></p> </figure> </div> </div> <div class="sourceCode cell-code" id="cb22"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb22-1"><a href="#cb22-1" aria-hidden="true" tabindex="-1"></a><span class="co"># plot(mosaic_raster)</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> </section> <section id="segregate" class="level3" data-number="4.4.6"> <h3 data-number="4.4.6" class="anchored" data-anchor-id="segregate"><span class="header-section-number">4.4.6</span> Segregate</h3> <p>Decompose a raster by value (or modality) into different rasterlayers with the function <code>segregate</code>.</p> <div class="cell" data-layout-align="center"> <div class="sourceCode cell-code" id="cb23"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb23-1"><a href="#cb23-1" aria-hidden="true" tabindex="-1"></a>lulc_2019_class <span class="ot"><-</span> <span class="fu">segregate</span>(lulc_2019, <span class="at">keep=</span><span class="cn">TRUE</span>, <span class="at">other=</span><span class="cn">NA</span>) <span class="co">#creating a raster layer by modality</span></span> <span id="cb23-2"><a href="#cb23-2" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(lulc_2019_class)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/segregate-1.png" class="img-fluid figure-img" width="576"></p> </figure> </div> </div> </div> </section> </section> <section id="map-algebra" class="level2" data-number="4.5"> <h2 data-number="4.5" class="anchored" data-anchor-id="map-algebra"><span class="header-section-number">4.5</span> Map Algebra</h2> <p>Map algebra is classified into four groups of operation <span class="citation" data-cites="Tomlin_1990">(<a href="references.html#ref-Tomlin_1990" role="doc-biblioref">Tomlin 1990</a>)</span>:</p> <ul> <li><strong><em>Local</em></strong> : operation by cell, on one or more layers;<br> </li> <li><strong><em>Focal</em></strong> : neighborhood operation (surrounding cells);<br> </li> <li><strong><em>Zonal</em></strong> : to summarize the matrix values for certain zones, usually irregular;</li> <li><strong><em>Global</em></strong> : to summarize the matrix values of one or more matrices.</li> </ul> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="img/lo_fo_zo_glo.png" class="img-fluid figure-img"></p> <p></p><figcaption class="figure-caption">Source : <span class="citation" data-cites="XingongLi2009">(<a href="references.html#ref-XingongLi2009" role="doc-biblioref">Li 2009</a>)</span></figcaption><p></p> </figure> </div> <section id="local-operations" class="level3" data-number="4.5.1"> <h3 data-number="4.5.1" class="anchored" data-anchor-id="local-operations"><span class="header-section-number">4.5.1</span> Local operations</h3> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="img/op_local_2.png" class="img-fluid figure-img" width="452"></p> <p></p><figcaption class="figure-caption">Source : <span class="citation" data-cites="JMennis2015">(<a href="references.html#ref-JMennis2015" role="doc-biblioref">Mennis 2015</a>)</span></figcaption><p></p> </figure> </div> <section id="value-replacement" class="level4" data-number="4.5.1.1"> <h4 data-number="4.5.1.1" class="anchored" data-anchor-id="value-replacement"><span class="header-section-number">4.5.1.1</span> Value replacement</h4> <div class="cell"> <div class="sourceCode cell-code" id="cb24"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb24-1"><a href="#cb24-1" aria-hidden="true" tabindex="-1"></a>elevation_utm[elevation_utm[[<span class="dv">1</span>]]<span class="sc">==</span> <span class="sc">-</span><span class="dv">9999</span>] <span class="ot"><-</span> <span class="cn">NA</span> <span class="co">#replaces -9999 values with NA</span></span> <span id="cb24-2"><a href="#cb24-2" aria-hidden="true" tabindex="-1"></a></span> <span id="cb24-3"><a href="#cb24-3" aria-hidden="true" tabindex="-1"></a>elevation_utm[elevation_utm <span class="sc"><</span> <span class="dv">1500</span>] <span class="ot"><-</span> <span class="cn">NA</span> <span class="co">#Replace values < 1500 with NA</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <div class="cell"> <div class="sourceCode cell-code" id="cb25"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb25-1"><a href="#cb25-1" aria-hidden="true" tabindex="-1"></a>elevation_utm[<span class="fu">is.na</span>(elevation_utm)] <span class="ot"><-</span> <span class="dv">0</span> <span class="co">#replace NA values with 0</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> </section> <section id="operation-on-each-cell" class="level4" data-number="4.5.1.2"> <h4 data-number="4.5.1.2" class="anchored" data-anchor-id="operation-on-each-cell"><span class="header-section-number">4.5.1.2</span> Operation on each cell</h4> <div class="cell"> <div class="sourceCode cell-code" id="cb26"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb26-1"><a href="#cb26-1" aria-hidden="true" tabindex="-1"></a>elevation_1000 <span class="ot"><-</span> elevation_utm <span class="sc">+</span> <span class="dv">1000</span> <span class="co"># Adding 1000 to the value of each cell</span></span> <span id="cb26-2"><a href="#cb26-2" aria-hidden="true" tabindex="-1"></a></span> <span id="cb26-3"><a href="#cb26-3" aria-hidden="true" tabindex="-1"></a>elevation_median <span class="ot"><-</span> elevation_utm <span class="sc">-</span> <span class="fu">global</span>(elevation_utm, median)[[<span class="dv">1</span>]] <span class="co"># Removed median elevation to each cell's value</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <div class="cell" data-layout-align="center"> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/op_local_2-1.png" class="img-fluid figure-img" width="768"></p> </figure> </div> </div> </div> </section> <section id="reclassification" class="level4" data-number="4.5.1.3"> <h4 data-number="4.5.1.3" class="anchored" data-anchor-id="reclassification"><span class="header-section-number">4.5.1.3</span> Reclassification</h4> <p>Reclassifying raster values can be used to discretize quantitative data as well as to categorize qualitative categories.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb27"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb27-1"><a href="#cb27-1" aria-hidden="true" tabindex="-1"></a>reclassif <span class="ot"><-</span> <span class="fu">matrix</span>(<span class="fu">c</span>(<span class="dv">1</span>, <span class="dv">2</span>, <span class="dv">1</span>, </span> <span id="cb27-2"><a href="#cb27-2" aria-hidden="true" tabindex="-1"></a> <span class="dv">2</span>, <span class="dv">4</span>, <span class="dv">2</span>,</span> <span id="cb27-3"><a href="#cb27-3" aria-hidden="true" tabindex="-1"></a> <span class="dv">4</span>, <span class="dv">6</span>, <span class="dv">3</span>,</span> <span id="cb27-4"><a href="#cb27-4" aria-hidden="true" tabindex="-1"></a> <span class="dv">6</span>, <span class="dv">9</span>, <span class="dv">4</span>), </span> <span id="cb27-5"><a href="#cb27-5" aria-hidden="true" tabindex="-1"></a> <span class="at">ncol =</span> <span class="dv">3</span>, <span class="at">byrow =</span> <span class="cn">TRUE</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <p>Values between 1 and 2 will be replaced by the value 1.<br> Values between 3 and 4 will be replaced by the value 2.<br> Values between 5 and 6 will be replaced by the value 3. Values between 7 and 9 will be replaced by the value 4.</p> <p>…</p> <div class="cell"> <div class="sourceCode cell-code" id="cb28"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb28-1"><a href="#cb28-1" aria-hidden="true" tabindex="-1"></a>reclassif</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output cell-output-stdout"> <pre><code> [,1] [,2] [,3] [1,] 1 2 1 [2,] 2 4 2 [3,] 4 6 3 [4,] 6 9 4</code></pre> </div> </div> <p>The function <code>classify()</code> allows you to perform the reclassification.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb30"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb30-1"><a href="#cb30-1" aria-hidden="true" tabindex="-1"></a>lulc_2019_reclass <span class="ot"><-</span> <span class="fu">classify</span>(lulc_2019, <span class="at">rcl =</span> reclassif)</span> <span id="cb30-2"><a href="#cb30-2" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(lulc_2019_reclass, <span class="at">type =</span><span class="st">"classes"</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <p><img src="04-raster_data_files/figure-html/reclass_4-1.png" class="img-fluid" width="672"></p> </div> </div> <p>Display with the official titles and colors of the different categories.</p> <div class="cell" data-layout-align="center"> <div class="sourceCode cell-code" id="cb31"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb31-1"><a href="#cb31-1" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(lulc_2019_reclass, </span> <span id="cb31-2"><a href="#cb31-2" aria-hidden="true" tabindex="-1"></a> <span class="at">type =</span><span class="st">"classes"</span>, </span> <span id="cb31-3"><a href="#cb31-3" aria-hidden="true" tabindex="-1"></a> <span class="at">levels=</span><span class="fu">c</span>(<span class="st">"Urban areas"</span>,</span> <span id="cb31-4"><a href="#cb31-4" aria-hidden="true" tabindex="-1"></a> <span class="st">"Water body"</span>,</span> <span id="cb31-5"><a href="#cb31-5" aria-hidden="true" tabindex="-1"></a> <span class="st">"Bare areas"</span>,</span> <span id="cb31-6"><a href="#cb31-6" aria-hidden="true" tabindex="-1"></a> <span class="st">"Vegetation areas"</span>),</span> <span id="cb31-7"><a href="#cb31-7" aria-hidden="true" tabindex="-1"></a> <span class="at">col=</span><span class="fu">c</span>(<span class="st">"#E6004D"</span>,</span> <span id="cb31-8"><a href="#cb31-8" aria-hidden="true" tabindex="-1"></a> <span class="st">"#00BFFF"</span>,</span> <span id="cb31-9"><a href="#cb31-9" aria-hidden="true" tabindex="-1"></a> <span class="st">"#D3D3D3"</span>, </span> <span id="cb31-10"><a href="#cb31-10" aria-hidden="true" tabindex="-1"></a> <span class="st">"#32CD32"</span>),</span> <span id="cb31-11"><a href="#cb31-11" aria-hidden="true" tabindex="-1"></a> <span class="at">mar=</span><span class="fu">c</span>(<span class="dv">3</span>, <span class="fl">1.5</span>, <span class="dv">1</span>, <span class="dv">11</span>))</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/reclass_6-1.png" class="img-fluid figure-img" style="width:80.0%"></p> </figure> </div> </div> </div> </section> <section id="operation-on-several-layers-ex-ndvi" class="level4" data-number="4.5.1.4"> <h4 data-number="4.5.1.4" class="anchored" data-anchor-id="operation-on-several-layers-ex-ndvi"><span class="header-section-number">4.5.1.4</span> Operation on several layers (ex: NDVI)</h4> <p>It is possible to calculate the value of a cell from its values stored in different layers of an object <code>SpatRaster</code>.</p> <p>Perhaps the most common example is the calculation of the <a href="http://www.trameverteetbleue.fr/outils-methodes/donnees-mobilisables/indice-vegetation-modis">Normalized Vegetation Index (<em>NDVI</em>)</a>. For each cell, a value is calculated from two layers of raster from a multispectral satellite image.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb32"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb32-1"><a href="#cb32-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Import d'une image satellite multispectrale</span></span> <span id="cb32-2"><a href="#cb32-2" aria-hidden="true" tabindex="-1"></a>sentinel2a <span class="ot"><-</span> <span class="fu">rast</span>(<span class="st">"data_cambodia/Sentinel2A.tif"</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <p>This multispectral satellite image (10m resolution) dated 25/02/2020, was produced by Sentinel-2 satellite and was retrieved from <a href="https://scihub.copernicus.eu/dhus/#/home">plateforme Copernicus Open Access Hub</a>. An extraction of Red and near infrared spectral bands, centered on the Phnom Penh city, was then carried out.</p> <div class="cell" data-layout-align="center"> <div class="sourceCode cell-code" id="cb33"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb33-1"><a href="#cb33-1" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(sentinel2a)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/NDVI_1-1.png" class="img-fluid figure-img" width="672"></p> </figure> </div> </div> </div> <p>To lighten the code, we assign the two matrix layers in different <code>SpatRaster</code> objects.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb34"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb34-1"><a href="#cb34-1" aria-hidden="true" tabindex="-1"></a>B04_Red <span class="ot"><-</span> sentinel2a[[<span class="dv">1</span>]] <span class="co">#spectral band Red</span></span> <span id="cb34-2"><a href="#cb34-2" aria-hidden="true" tabindex="-1"></a></span> <span id="cb34-3"><a href="#cb34-3" aria-hidden="true" tabindex="-1"></a>B08_NIR <span class="ot"><-</span>sentinel2a[[<span class="dv">2</span>]] <span class="co">#spectral band near infrared</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <p>From these two raster objects , we can calculate the normalized vegetation index:</p> <p><span class="math display">\[{NDVI}=\frac{\mathrm{NIR} - \mathrm{Red}} {\mathrm{NIR} + \mathrm{Red}}\]</span></p> <div class="cell" data-layout-align="center"> <div class="sourceCode cell-code" id="cb35"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb35-1"><a href="#cb35-1" aria-hidden="true" tabindex="-1"></a>raster_NDVI <span class="ot"><-</span> (B08_NIR <span class="sc">-</span> B04_Red ) <span class="sc">/</span> (B08_NIR <span class="sc">+</span> B04_Red )</span> <span id="cb35-2"><a href="#cb35-2" aria-hidden="true" tabindex="-1"></a></span> <span id="cb35-3"><a href="#cb35-3" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(raster_NDVI)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/NDVI_3-1.png" class="img-fluid figure-img" style="width:90.0%"></p> </figure> </div> </div> </div> <p>The higher the values (close to 1), the denser the vegetation.</p> </section> </section> <section id="focal-operations" class="level3" data-number="4.5.2"> <h3 data-number="4.5.2" class="anchored" data-anchor-id="focal-operations"><span class="header-section-number">4.5.2</span> Focal operations</h3> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="img/op_focal_2.png" class="img-fluid figure-img" width="415"></p> <p></p><figcaption class="figure-caption">Source : <span class="citation" data-cites="JMennis2015">(<a href="references.html#ref-JMennis2015" role="doc-biblioref">Mennis 2015</a>)</span></figcaption><p></p> </figure> </div> <p>Focal analysis conisders a cell plus its direct neighbors in contiguous and symmetrical (neighborhood operations). Most often, the value of the output cell is the result of a block of 3 x 3 (odd number) input cells.</p> <p>The first step is to build a matrix that determines the block of cells that will be considered around each cell.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb36"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb36-1"><a href="#cb36-1" aria-hidden="true" tabindex="-1"></a><span class="co"># 5 x 5 matrix, where each cell has the same weight</span></span> <span id="cb36-2"><a href="#cb36-2" aria-hidden="true" tabindex="-1"></a>mon_focal <span class="ot"><-</span> <span class="fu">matrix</span>(<span class="dv">1</span>, <span class="at">nrow =</span> <span class="dv">5</span>, <span class="at">ncol =</span> <span class="dv">5</span>)</span> <span id="cb36-3"><a href="#cb36-3" aria-hidden="true" tabindex="-1"></a>mon_focal</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output cell-output-stdout"> <pre><code> [,1] [,2] [,3] [,4] [,5] [1,] 1 1 1 1 1 [2,] 1 1 1 1 1 [3,] 1 1 1 1 1 [4,] 1 1 1 1 1 [5,] 1 1 1 1 1</code></pre> </div> </div> <p>The function <code>focal()</code> Then allows you to perform the desired analysis. For example: calculating the average of the values of all contiguous cells, for each cell in the raster.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb38"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb38-1"><a href="#cb38-1" aria-hidden="true" tabindex="-1"></a>elevation_LowerGrid_mean <span class="ot"><-</span> <span class="fu">focal</span>(elevation_LowerGrid, </span> <span id="cb38-2"><a href="#cb38-2" aria-hidden="true" tabindex="-1"></a> <span class="at">w =</span> mon_focal, </span> <span id="cb38-3"><a href="#cb38-3" aria-hidden="true" tabindex="-1"></a> <span class="at">fun =</span> mean)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <div class="cell" data-layout-align="center"> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/op_focal_5-1.png" class="img-fluid figure-img" width="768"></p> </figure> </div> </div> </div> <section id="focal-operations-for-elevation-rasters" class="level4" data-number="4.5.2.1"> <h4 data-number="4.5.2.1" class="anchored" data-anchor-id="focal-operations-for-elevation-rasters"><span class="header-section-number">4.5.2.1</span> Focal operations for elevation rasters</h4> <p>The function <code>terrain()</code> allows to perform focal analyzes specific to elevation rasters. Six operations are available:</p> <ul> <li><strong><em>slope</em></strong> = calculation of the slope or degree of inclination of the surface;<br> </li> <li><strong><em>aspect</em></strong> = calculate slope orientation;<br> </li> <li><strong><em>roughness</em></strong> = calculate of the variability or irregularity of the elevation;<br> </li> <li><strong><em>TPI</em></strong> = calculation of the index of topgraphic positions;<br> </li> <li><strong><em>TRI</em></strong> = elevation variability index calculation;<br> </li> <li><strong><em>flowdir</em></strong> = calculation of the water flow direction.</li> </ul> <p>Example with calculation of slopes(<em>slope</em>).</p> <div class="cell" data-layout-align="center"> <div class="sourceCode cell-code" id="cb39"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb39-1"><a href="#cb39-1" aria-hidden="true" tabindex="-1"></a><span class="co">#slope calculation</span></span> <span id="cb39-2"><a href="#cb39-2" aria-hidden="true" tabindex="-1"></a>slope <span class="ot"><-</span> <span class="fu">terrain</span>(elevation_utm, <span class="st">"slope"</span>, </span> <span id="cb39-3"><a href="#cb39-3" aria-hidden="true" tabindex="-1"></a> <span class="at">neighbors =</span> <span class="dv">8</span>, <span class="co">#8 (or 4) cells around taken into account</span></span> <span id="cb39-4"><a href="#cb39-4" aria-hidden="true" tabindex="-1"></a> <span class="at">unit =</span> <span class="st">"degrees"</span>) <span class="co">#Output unit</span></span> <span id="cb39-5"><a href="#cb39-5" aria-hidden="true" tabindex="-1"></a></span> <span id="cb39-6"><a href="#cb39-6" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(slope) <span class="co">#Inclination of the slopes, in degrees</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/op_focal_6-1.png" class="img-fluid figure-img" width="576"></p> </figure> </div> </div> </div> </section> </section> <section id="global-operations" class="level3" data-number="4.5.3"> <h3 data-number="4.5.3" class="anchored" data-anchor-id="global-operations"><span class="header-section-number">4.5.3</span> Global operations</h3> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="img/op_global.png" class="img-fluid figure-img" width="297"></p> <p></p><figcaption class="figure-caption">Source : <a href="https://gisgeography.com/map-algebra-global-zonal-focal-local" class="uri">https://gisgeography.com/map-algebra-global-zonal-focal-local</a></figcaption><p></p> </figure> </div> <p>Global operation are used to summarize the matrix values of one or more matrices.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb40"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb40-1"><a href="#cb40-1" aria-hidden="true" tabindex="-1"></a><span class="fu">global</span>(elevation_utm, <span class="at">fun =</span> <span class="st">"mean"</span>) <span class="co">#average values</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output cell-output-stdout"> <pre><code> mean Altitude 80.01082</code></pre> </div> </div> <div class="cell"> <div class="sourceCode cell-code" id="cb42"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb42-1"><a href="#cb42-1" aria-hidden="true" tabindex="-1"></a><span class="fu">global</span>(elevation_utm, <span class="at">fun =</span> <span class="st">"sd"</span>) <span class="co">#standard deviation</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output cell-output-stdout"> <pre><code> sd Altitude 155.885</code></pre> </div> </div> <div class="cell"> <div class="sourceCode cell-code" id="cb44"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb44-1"><a href="#cb44-1" aria-hidden="true" tabindex="-1"></a><span class="fu">freq</span>(lulc_2019_reclass) <span class="co">#frequency</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output cell-output-stdout"> <pre><code> layer value count 1 1 1 47485325 2 1 2 13656289 3 1 3 14880961 4 1 4 37194979</code></pre> </div> <div class="sourceCode cell-code" id="cb46"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb46-1"><a href="#cb46-1" aria-hidden="true" tabindex="-1"></a><span class="fu">table</span>(lulc_2019_reclass[]) <span class="co">#contingency table</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output cell-output-stdout"> <pre><code> 1 2 3 4 47485325 13656289 14880961 37194979 </code></pre> </div> </div> <p>Statistical representations that summarize matrix information.</p> <div class="cell" data-layout-align="center"> <div class="sourceCode cell-code" id="cb48"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb48-1"><a href="#cb48-1" aria-hidden="true" tabindex="-1"></a><span class="fu">hist</span>(elevation_utm) <span class="co">#histogram</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output cell-output-stderr"> <pre><code>Warning: [hist] a sample of3% of the cells was used</code></pre> </div> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/op_global_4-1.png" class="img-fluid figure-img" width="576"></p> </figure> </div> </div> <div class="sourceCode cell-code" id="cb50"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb50-1"><a href="#cb50-1" aria-hidden="true" tabindex="-1"></a><span class="fu">density</span>(elevation_utm) <span class="co">#density</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/op_global_4-2.png" class="img-fluid figure-img" width="576"></p> </figure> </div> </div> </div> </section> <section id="zonal-operation" class="level3" data-number="4.5.4"> <h3 data-number="4.5.4" class="anchored" data-anchor-id="zonal-operation"><span class="header-section-number">4.5.4</span> Zonal operation</h3> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="img/op_zonal_2.png" class="img-fluid figure-img" width="342"></p> <p></p><figcaption class="figure-caption">Source : <span class="citation" data-cites="JMennis2015">(<a href="references.html#ref-JMennis2015" role="doc-biblioref">Mennis 2015</a>)</span></figcaption><p></p> </figure> </div> <p>The zonal operation make it possible to summarize the matrix values of certain zones (group of contiguous cells in space or in value).</p> <section id="zonal-operation-on-an-extraction" class="level4" data-number="4.5.4.1"> <h4 data-number="4.5.4.1" class="anchored" data-anchor-id="zonal-operation-on-an-extraction"><span class="header-section-number">4.5.4.1</span> Zonal operation on an extraction</h4> <p><strong>All global operations can be performed on an extraction of cells resulting from the functions <code>crop()</code>, <code>mask()</code>, <code>segregate()</code>…</strong></p> <p>Example: average elevation for the city of Thma Bang district (cf <a href="#mask">partie 5.4.3</a>).</p> <div class="cell"> <div class="sourceCode cell-code" id="cb51"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb51-1"><a href="#cb51-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Average value of the "mask" raster over Thma Bang district</span></span> <span id="cb51-2"><a href="#cb51-2" aria-hidden="true" tabindex="-1"></a><span class="fu">global</span>(mask_thma_bang, <span class="at">fun =</span> <span class="st">"mean"</span>, <span class="at">na.rm=</span><span class="cn">TRUE</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output cell-output-stdout"> <pre><code> mean Altitude 584.7703</code></pre> </div> </div> </section> <section id="zonal-operation-from-a-vector-layer" class="level4" data-number="4.5.4.2"> <h4 data-number="4.5.4.2" class="anchored" data-anchor-id="zonal-operation-from-a-vector-layer"><span class="header-section-number">4.5.4.2</span> Zonal operation from a vector layer</h4> <p>The function <code>extract()</code> allows you to extract and manipulate the values of cells that intersect vector data.</p> <p>Example from polygons:</p> <div class="cell"> <div class="sourceCode cell-code" id="cb53"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb53-1"><a href="#cb53-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Average elevation for each polygon (district)?</span></span> <span id="cb53-2"><a href="#cb53-2" aria-hidden="true" tabindex="-1"></a>elevation_by_dist <span class="ot"><-</span> <span class="fu">extract</span>(elevation_LowerGrid, district, <span class="at">fun=</span>mean)</span> <span id="cb53-3"><a href="#cb53-3" aria-hidden="true" tabindex="-1"></a><span class="fu">head</span>(elevation_by_dist, <span class="dv">10</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output cell-output-stdout"> <pre><code> ID Altitude 1 1 8.953352 2 2 196.422240 3 3 23.453937 4 4 3.973118 5 5 29.545801 6 6 41.579593 7 7 50.162749 8 8 85.128777 9 9 269.068091 10 10 8.439041</code></pre> </div> </div> </section> <section id="zonal-operation-from-raster" class="level4" data-number="4.5.4.3"> <h4 data-number="4.5.4.3" class="anchored" data-anchor-id="zonal-operation-from-raster"><span class="header-section-number">4.5.4.3</span> Zonal operation from raster</h4> <p>Zonal operation can be performed by area bounded by the categorical values of a second raster. For this, the two raster must have exaclty the same extent and the same resolution.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb55"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb55-1"><a href="#cb55-1" aria-hidden="true" tabindex="-1"></a><span class="co">#create a second raster with same resolution and extent as "elevation_clip"</span></span> <span id="cb55-2"><a href="#cb55-2" aria-hidden="true" tabindex="-1"></a>elevation_clip <span class="ot"><-</span> <span class="fu">rast</span>(<span class="st">"data_cambodia/elevation_clip.tif"</span>)</span> <span id="cb55-3"><a href="#cb55-3" aria-hidden="true" tabindex="-1"></a>elevation_clip_utm <span class="ot"><-</span> <span class="fu">project</span>(<span class="at">x =</span> elevation_clip, <span class="at">y =</span> <span class="st">"EPSG:32648"</span>, <span class="at">method =</span> <span class="st">"bilinear"</span>)</span> <span id="cb55-4"><a href="#cb55-4" aria-hidden="true" tabindex="-1"></a>second_raster_CLC <span class="ot"><-</span> <span class="fu">rast</span>(elevation_clip_utm)</span> <span id="cb55-5"><a href="#cb55-5" aria-hidden="true" tabindex="-1"></a></span> <span id="cb55-6"><a href="#cb55-6" aria-hidden="true" tabindex="-1"></a><span class="co">#resampling of lulc_2019_reclass </span></span> <span id="cb55-7"><a href="#cb55-7" aria-hidden="true" tabindex="-1"></a>second_raster_CLC <span class="ot"><-</span> <span class="fu">resample</span>(lulc_2019_reclass, second_raster_CLC, <span class="at">method =</span> <span class="st">"near"</span>) </span> <span id="cb55-8"><a href="#cb55-8" aria-hidden="true" tabindex="-1"></a> </span> <span id="cb55-9"><a href="#cb55-9" aria-hidden="true" tabindex="-1"></a><span class="co">#added a variable name for the second raster</span></span> <span id="cb55-10"><a href="#cb55-10" aria-hidden="true" tabindex="-1"></a><span class="fu">names</span>(second_raster_CLC) <span class="ot"><-</span> <span class="st">"lulc_2019_reclass_resample"</span></span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <div class="cell" data-layout-align="center"> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/op_zonal_2-1.png" class="img-fluid figure-img" width="768"></p> </figure> </div> </div> </div> <p>Calculation of the average elevation for the different areas of the second raster.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb56"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb56-1"><a href="#cb56-1" aria-hidden="true" tabindex="-1"></a><span class="co">#average elevation for each area of the "second_raster"</span></span> <span id="cb56-2"><a href="#cb56-2" aria-hidden="true" tabindex="-1"></a><span class="fu">zonal</span>(elevation_clip_utm, second_raster_CLC , <span class="st">"mean"</span>, <span class="at">na.rm=</span><span class="cn">TRUE</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output cell-output-stdout"> <pre><code> lulc_2019_reclass_resample elevation_clip 1 1 12.83846 2 2 8.31809 3 3 11.41178 4 4 11.93546</code></pre> </div> </div> </section> </section> </section> <section id="transformation-and-conversion" class="level2" data-number="4.6"> <h2 data-number="4.6" class="anchored" data-anchor-id="transformation-and-conversion"><span class="header-section-number">4.6</span> Transformation and conversion</h2> <section id="rasterization" class="level3" data-number="4.6.1"> <h3 data-number="4.6.1" class="anchored" data-anchor-id="rasterization"><span class="header-section-number">4.6.1</span> Rasterization</h3> <p>Convert polygons to raster format.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb58"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb58-1"><a href="#cb58-1" aria-hidden="true" tabindex="-1"></a>chamkarmon <span class="ot">=</span> <span class="fu">subset</span>(district, district<span class="sc">$</span>ADM2_PCODE <span class="sc">==</span><span class="st">"KH1201"</span>) </span> <span id="cb58-2"><a href="#cb58-2" aria-hidden="true" tabindex="-1"></a>raster_district <span class="ot"><-</span> <span class="fu">rasterize</span>(<span class="at">x =</span> chamkarmon, <span class="at">y =</span> elevation_clip_utm)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <div class="cell" data-layout-align="center"> <div class="sourceCode cell-code" id="cb59"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb59-1"><a href="#cb59-1" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(raster_district)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <div class="quarto-figure quarto-figure-center"> <figure class="figure"> <p><img src="04-raster_data_files/figure-html/Raster_vec11-1.png" class="img-fluid figure-img" width="576"></p> </figure> </div> </div> </div> <p>Convert points to raster format</p> <div class="cell"> <div class="sourceCode cell-code" id="cb60"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb60-1"><a href="#cb60-1" aria-hidden="true" tabindex="-1"></a><span class="co">#rasterization of the centroids of the municipalities</span></span> <span id="cb60-2"><a href="#cb60-2" aria-hidden="true" tabindex="-1"></a>raster_dist_centroid <span class="ot"><-</span> <span class="fu">rasterize</span>(<span class="at">x =</span> <span class="fu">centroids</span>(district), </span> <span id="cb60-3"><a href="#cb60-3" aria-hidden="true" tabindex="-1"></a> <span class="at">y =</span> elevation_clip_utm, <span class="at">fun=</span>sum)</span> <span id="cb60-4"><a href="#cb60-4" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(raster_dist_centroid, <span class="at">col =</span> <span class="st">"red"</span>)</span> <span id="cb60-5"><a href="#cb60-5" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(district, <span class="at">add =</span><span class="cn">TRUE</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <p><img src="04-raster_data_files/figure-html/Raster_vec2-1.png" class="img-fluid" width="672"></p> </div> </div> <p>Convert lines in raster format</p> <div class="cell"> <div class="sourceCode cell-code" id="cb61"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb61-1"><a href="#cb61-1" aria-hidden="true" tabindex="-1"></a><span class="co">#rasterization of municipal boundaries</span></span> <span id="cb61-2"><a href="#cb61-2" aria-hidden="true" tabindex="-1"></a>raster_dist_line <span class="ot"><-</span> <span class="fu">rasterize</span>(<span class="at">x =</span> <span class="fu">as.lines</span>(district), <span class="at">y =</span> elevation_clip_utm, <span class="at">fun=</span>sum)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <div class="cell"> <div class="sourceCode cell-code" id="cb62"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb62-1"><a href="#cb62-1" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(raster_dist_line)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <p><img src="04-raster_data_files/figure-html/Raster_vec33-1.png" class="img-fluid" width="672"></p> </div> </div> </section> <section id="vectorisation" class="level3" data-number="4.6.2"> <h3 data-number="4.6.2" class="anchored" data-anchor-id="vectorisation"><span class="header-section-number">4.6.2</span> Vectorisation</h3> <p>Transform a raster to vector polygons.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb63"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb63-1"><a href="#cb63-1" aria-hidden="true" tabindex="-1"></a>polygon_elevation <span class="ot"><-</span> <span class="fu">as.polygons</span>(elevation_clip_utm)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <div class="cell"> <div class="sourceCode cell-code" id="cb64"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb64-1"><a href="#cb64-1" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(polygon_elevation, <span class="at">y =</span> <span class="dv">1</span>, <span class="at">border=</span><span class="st">"white"</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <p><img src="04-raster_data_files/figure-html/Raster_vec44-1.png" class="img-fluid" width="672"></p> </div> </div> <p>Transform a raster to vector points.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb65"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb65-1"><a href="#cb65-1" aria-hidden="true" tabindex="-1"></a>points_elevation <span class="ot"><-</span> <span class="fu">as.points</span>(elevation_clip_utm)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <div class="cell"> <div class="sourceCode cell-code" id="cb66"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb66-1"><a href="#cb66-1" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(points_elevation, <span class="at">y =</span> <span class="dv">1</span>, <span class="at">cex =</span> <span class="fl">0.3</span>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <p><img src="04-raster_data_files/figure-html/Raster_vec55-1.png" class="img-fluid" width="672"></p> </div> </div> <p>Transform a raster into vector lines.</p> <div class="cell"> <div class="sourceCode cell-code" id="cb67"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb67-1"><a href="#cb67-1" aria-hidden="true" tabindex="-1"></a>lines_elevation <span class="ot"><-</span> <span class="fu">as.lines</span>(elevation_clip_utm)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <div class="cell"> <div class="sourceCode cell-code" id="cb68"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb68-1"><a href="#cb68-1" aria-hidden="true" tabindex="-1"></a><span class="fu">plot</span>(lines_elevation)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> <div class="cell-output-display"> <p><img src="04-raster_data_files/figure-html/Raster_vec66-1.png" class="img-fluid" width="672"></p> </div> </div> </section> <section id="terra-raster-sf-stars" class="level3" data-number="4.6.3"> <h3 data-number="4.6.3" class="anchored" data-anchor-id="terra-raster-sf-stars"><span class="header-section-number">4.6.3</span> terra, raster, sf, stars…</h3> <p>Reference packages for manipulating spatial data all rely o their own object class. It is sometimes necessary to convert these objects from one class to another class to take advance of all the features offered by these different packages.</p> <p>Conversion functions for raster data:</p> <table class="table"> <thead> <tr class="header"> <th>FROM/TO</th> <th>raster</th> <th>terra</th> <th>stars</th> </tr> </thead> <tbody> <tr class="odd"> <td>raster</td> <td></td> <td>rast()</td> <td>st_as_stars()</td> </tr> <tr class="even"> <td>terra</td> <td>raster()</td> <td></td> <td>st_as_stars()</td> </tr> <tr class="odd"> <td>stars</td> <td>raster()</td> <td>as(x, ‘Raster’) + rast()</td> <td></td> </tr> </tbody> </table> <p>Conversion functions for vector data:</p> <table class="table"> <thead> <tr class="header"> <th>FROM/TO</th> <th>sf</th> <th>sp</th> <th>terra</th> </tr> </thead> <tbody> <tr class="odd"> <td>sf</td> <td></td> <td>as(x, ‘Spatial’)</td> <td>vect()</td> </tr> <tr class="even"> <td>sp</td> <td>st_as_sf()</td> <td></td> <td>vect()</td> </tr> <tr class="odd"> <td>terra</td> <td>st_as_sf()</td> <td>as(x, ‘Spatial’)</td> <td></td> </tr> </tbody> </table> <div id="refs" class="references csl-bib-body hanging-indent" role="doc-bibliography" style="display: none"> <div id="ref-terra" class="csl-entry" role="doc-biblioentry"> Hijmans, Robert J. 2022. <span>“Terra: Spatial Data Analysis.”</span> <a href="https://CRAN.R-project.org/package=terra">https://CRAN.R-project.org/package=terra</a>. </div> <div id="ref-XingongLi2009" class="csl-entry" role="doc-biblioentry"> Li, Xingong. 2009. <span>“Map Algebra and Beyond : 1. Map Algebra for Scalar Fields.”</span> <a href="https://slideplayer.com/slide/5822638/" class="uri">https://slideplayer.com/slide/5822638/</a>. </div> <div id="ref-MmadelinSIGR" class="csl-entry" role="doc-biblioentry"> Madelin, Malika. 2021. <span>“Analyse d’images Raster (Et Télédétection).”</span> <a href="https://mmadelin.github.io/sigr2021/SIGR2021_raster_MM.html" class="uri">https://mmadelin.github.io/sigr2021/SIGR2021_raster_MM.html</a>. </div> <div id="ref-JMennis2015" class="csl-entry" role="doc-biblioentry"> Mennis, Jeremy. 2015. <span>“Fundamentals of GIS : Raster Operations.”</span> <a href="https://cupdf.com/document/gus-0262-fundamentals-of-gis-lecture-presentation-7-raster-operations-jeremy.html" class="uri">https://cupdf.com/document/gus-0262-fundamentals-of-gis-lecture-presentation-7-raster-operations-jeremy.html</a>. </div> <div id="ref-JNowosadSIGR" class="csl-entry" role="doc-biblioentry"> Nowosad, Jakub. 2021. <span>“Image Processing and All Things Raster.”</span> <a href="https://nowosad.github.io/SIGR2021/workshop2/workshop2.html" class="uri">https://nowosad.github.io/SIGR2021/workshop2/workshop2.html</a>. </div> <div id="ref-RasterCheatSheet" class="csl-entry" role="doc-biblioentry"> Racine, Etienne B. 2016. <span>“The Visual Raster Cheat Sheet.”</span> <a href="https://rpubs.com/etiennebr/visualraster" class="uri">https://rpubs.com/etiennebr/visualraster</a>. </div> <div id="ref-Tomlin_1990" class="csl-entry" role="doc-biblioentry"> Tomlin, C. Dana. 1990. <em>Geographic Information Systems and Cartographic Modeling</em>. Prentice Hall. </div> </div> </section> </section> </main> <!-- /main --> <script id="quarto-html-after-body" type="application/javascript"> window.document.addEventListener("DOMContentLoaded", function (event) { const toggleBodyColorMode = (bsSheetEl) => { const mode = bsSheetEl.getAttribute("data-mode"); const bodyEl = window.document.querySelector("body"); if (mode === "dark") { bodyEl.classList.add("quarto-dark"); bodyEl.classList.remove("quarto-light"); } else { bodyEl.classList.add("quarto-light"); bodyEl.classList.remove("quarto-dark"); } } const toggleBodyColorPrimary = () => { const bsSheetEl = window.document.querySelector("link#quarto-bootstrap"); if (bsSheetEl) { toggleBodyColorMode(bsSheetEl); } } toggleBodyColorPrimary(); const icon = ""; const anchorJS = new window.AnchorJS(); anchorJS.options = { placement: 'right', icon: icon }; anchorJS.add('.anchored'); const clipboard = new window.ClipboardJS('.code-copy-button', { target: function(trigger) { return trigger.previousElementSibling; } }); clipboard.on('success', function(e) { // button target const button = e.trigger; // don't keep focus button.blur(); // flash "checked" button.classList.add('code-copy-button-checked'); var currentTitle = button.getAttribute("title"); button.setAttribute("title", "Copied!"); setTimeout(function() { button.setAttribute("title", currentTitle); button.classList.remove('code-copy-button-checked'); }, 1000); // clear code selection e.clearSelection(); }); function tippyHover(el, contentFn) { const config = { allowHTML: true, content: contentFn, maxWidth: 500, delay: 100, arrow: false, appendTo: function(el) { return el.parentElement; }, interactive: true, interactiveBorder: 10, theme: 'quarto', placement: 'bottom-start' }; window.tippy(el, config); } const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]'); for (var i=0; i<noterefs.length; i++) { const ref = noterefs[i]; tippyHover(ref, function() { // use id or data attribute instead here let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href'); try { href = new URL(href).hash; } catch {} const id = href.replace(/^#\/?/, ""); const note = window.document.getElementById(id); return note.innerHTML; }); } var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]'); for (var i=0; i<bibliorefs.length; i++) { const ref = bibliorefs[i]; const cites = ref.parentNode.getAttribute('data-cites').split(' '); tippyHover(ref, function() { var popup = window.document.createElement('div'); cites.forEach(function(cite) { var citeDiv = window.document.createElement('div'); citeDiv.classList.add('hanging-indent'); citeDiv.classList.add('csl-entry'); var biblioDiv = window.document.getElementById('ref-' + cite); if (biblioDiv) { citeDiv.innerHTML = biblioDiv.innerHTML; } popup.appendChild(citeDiv); }); return popup.innerHTML; }); } var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//); var filterRegex = new RegExp('/' + window.location.host + '/'); var isInternal = (href) => { return filterRegex.test(href) || localhostRegex.test(href); } // Inspect non-navigation links and adorn them if external var links = window.document.querySelectorAll('a:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external)'); for (var i=0; i<links.length; i++) { const link = links[i]; if (!isInternal(link.href)) { // target, if specified link.setAttribute("target", "_blank"); } } }); </script> <nav class="page-navigation"> <div class="nav-page nav-page-previous"> <a href="./03-vector_data.html" class="pagination-link"> <i class="bi bi-arrow-left-short"></i> <span class="nav-page-text"><span class="chapter-number">3</span> <span class="chapter-title">Using vector data</span></span> </a> </div> <div class="nav-page nav-page-next"> <a href="./05-mapping_with_r.html" class="pagination-link"> <span class="nav-page-text"><span class="chapter-number">5</span> <span class="chapter-title">Mapping With R</span></span> <i class="bi bi-arrow-right-short"></i> </a> </div> </nav> </div> <!-- /content --> <footer class="footer"> <div class="nav-footer"> <div class="nav-footer-left">UMR 228 ESPACE-DEV</div> <div class="nav-footer-right"><img src="img/ird_footer.png" height="50"></div> </div> </footer> <script src="site_libs/quarto-html/zenscroll-min.js"></script> </body></html>