TIG’R
  • Introduction
  • Modules
  • Données
  • Ressources
  • Crédits
  1. Géomatique
  2. Données vectorielles
  • Introduction

  • Import de données
    • Toutes les leçons
    • Import & export
    • Web Scraping
  • Manipulation
    • Toutes les leçons
    • Manipulation de tableau
    • L’écosystème tidyverse
  • Statistique
    • Toutes les leçons
    • Statistique Descriptive
    • Classif. Asc. Hiérarch.
  • Graphique
    • Toutes les leçons
    • Graphique R-base
    • Le package ggplot2
    • ggplot2 et la grammaire graphique
  • Réseau
    • Réseau avec igraph
  • Géomatique
    • Toutes les leçons
    • Données vectorielles
    • Données Raster
    • OpenStreetMap & R
  • Cartographie
    • Cartographie mapsf
  • Reproductibilité
    • Toutes les leçons
    • Le package miniCRAN
    • PL et Notebook (Rmd)
    • PL et Notebook (Quarto)

  • Données utilisées
  • Ressources annexes

Sur cette page

  • Introduction
  • Manuel
  • Exercice

Géomatique avec R - vecteur

  • Montrer tout le code
  • Cacher tout le code

  • Voir les sources

Le package sf pour manipuler les données géographiques vectorielles

Auteur·rice·s

Timothée Giraud

Hugues pecout

Date de publication

27 juillet 2023

Introduction

Cette leçon vise à initier à la gestion, l’analyse et la représentation de données géographiques vectorielles avec le package sf. Les différentes manipulations de données vectorielles abordées sont :

  • Import et export de données
  • Gestion de la projection cartographique
  • Affichage graphique des données
  • Sélection par attribut
  • Sélection spatiale
  • Opération sur les géométries


Manuel


Consulter en plein écran


Note

Ce support de ce cours est très largement inspiré du manuel “Géomatique avec R”, plus complet et initialement conçu pour accompagner le cours ‘Cartographie avec R’ du Master 2 Géomatique, géodécisionnel, géomarketing et multimédia (G2M) de l’Université Paris 8 Vincennes - Saint-Denis (France). Vous pouvez envoyer vos remarques et suggestions aux auteurs en postant une issue sur le dépôt GitHub de ce document.


Exercice

1. Créez un projet Rstudio

File/New Project/New Directory…

2. Téléchargez les données suivantes :

Intitulé Téléchargement
Emprise des agglomérations urbaines (AFRICAPOLIS 2020) Download

3. Placez les données (décompressées) dans le répertoire de votre projet, de la façon suivante :

4. Importez le fichier africapolis_extract.shp

Un peu d’aide ?
# Pour importer des données géographiques 
library(sf)
... <- st_read()

5. Vérifiez quelle est la projection cartographique utilisée. Re-projetez la couche dans la projection UTM zone 31N (EPSG : 32631 ).

Un peu d’aide ?
# Pour connaitre le système de référence et de projection d'une couche
st_crs(...)

# Transformer le crs d'un objet sf
... <- st_transform(...)

5. Affichez les géométries des agglomérations urbaines.

Astuce : Vous pouvez utiliser la package mapview qui permet d’afficher la couche sur différents fonds de carte dynamiques. Cela permet de contrôler le niveau de précision de vos données.

Un peu d’aide ?
# Affichez les géométries d'un objet sf
plot(st_geometry(...))

# Afficher sur un fond de carte dynamique
library(mapview)
mapview(...)

6. Calculez les surfaces de chaque agglomération urbaine. Enregistrez ces valeurs dans une nouvelle colonne.

Un peu d’aide ?
# st_area() permet de calculer la surface des polygones d'un objet sf
...$... <- st_area(...)

7. Calculez le nombre et la superficie totale des agglomérations urbaines, par pays.

Un peu d’aide ?
library(dplyr)

... <- ... %>% 
          group_by(...) %>% 
          summarise(... = sum(...),
                    ... = n())

8. Créez une quatrième couche géographique (point) à partir des coordonnées de l’Institut Régional de Santé Publique, à Ouidah (Bénin) :

  • Latitude = 6.349223507626634
  • Longitude = 2.0879482065861783
  • CRS = WGS84 (4326)
Un peu d’aide ?
# Création d'un data.frame avec les colonnes "name", "lat" et "long"
IRSP <- data.frame(name = "...", 
                   lat = ..., 
                   long = ...)


# Création d'une couche géographique à partir de ces cordonnées
IRSP_geo <- st_as_sf(IRSP, 
                     coords = c("...", "..."), 
                     crs = ...)

9. Créez une zone tampon de 50km autour de l’Institut Régional de Santé Publique

Un peu d’aide ?
# Créer un zone tampon
... <- st_buffer(..., dist = ...)

10. Détectez les agglomérations urbaines situées à moins de 50 km de l’IRSP

Un peu d’aide ?
# Quelles agglomérations intersectent la zone tampon ?
...$... <- st_intersects(..., ..., sparse = ...)

11. Affichez correctement les différentes couches. Utilisez la couleur pour indiquer les agglomérations urbaines qui intersectent la zone tampon. Exemple :


Code
# Utilisez l'argument "add" pour superposer les couches

plot(st_geometry(...))
plot(...["..."], add = TRUE)
plot(st_geometry(...), add = TRUE)
plot(st_geometry(...), add = TRUE)

12. Combien d’habitants résident dans les agglomérations urbaines qui intersectent la zone tampon ?

Code
# Sélectionnez les agglomérations qui intersectent la zone tampon
... <- ...[...$... == TRUE, ]

# Calcul de la population totale de ces agglomérations
sum(...$...)


Corrigé


Toutes les leçons
Données Raster
Code source
---
title: "Géomatique avec R - vecteur"
subtitle: "Le package `sf` pour manipuler les données géographiques vectorielles"
author: 
- Timothée Giraud
- Hugues pecout
date: last-modified
ordre: 01
code-fold: true
code-tools: true
format:
  html:
    theme: cosmo
    code-copy: true
---

## Introduction

Cette leçon vise à initier à la gestion, l'analyse et la représentation de données géographiques vectorielles avec le package `sf`. Les différentes manipulations de données vectorielles abordées sont :

-   Import et export de données
-   Gestion de la projection cartographique
-   Affichage graphique des données
-   Sélection par attribut
-   Sélection spatiale
-   Opération sur les géométries

\

## <i class="bi bi-book"></i> Manuel {.title}

<iframe class="slide" src="https://elementr.gitpages.huma-num.fr/session_geomatique/tutoriel/">

</iframe>

\

::: center
<a href="https://elementr.gitpages.huma-num.fr/session_geomatique/tutoriel/" class="btn btn-info" role="button" aria-disabled="true"><i class="bi bi-eye"></i> Consulter en plein écran</a>
:::

\

::: callout-note

Ce support de ce cours est très largement inspiré du manuel “[*Géomatique avec R*](https://rcarto.github.io/geomatique_avec_r/)”, plus complet et initialement conçu pour accompagner le cours *'Cartographie avec R'* du Master 2 Géomatique, géodécisionnel, géomarketing et multimédia (G2M) de l'Université Paris 8 Vincennes - Saint-Denis (France). Vous pouvez envoyer vos remarques et suggestions aux auteurs en [postant une issue](https://github.com/rCarto/geomatique_avec_r/issues) sur le [dépôt GitHub](https://github.com/rCarto/geomatique_avec_r) de ce document.

:::

\

## <i class="bi bi-person-workspace"></i> Exercice {.title .exo-title}

::: {#exo}
[1. Créez un projet Rstudio]{.question}

*File/New Project/New Directory...*

[2. Téléchargez les données suivantes :]{.question}

|                        Intitulé                        |                                                                     Téléchargement                                                                      |
|:----------------------:|:----------------------------------------------:|
| Emprise des agglomérations urbaines (AFRICAPOLIS 2020) | <a href="https://bit.ly/3wnQKeG" class="btn btn-outline-warning" role="button" aria-disabled="true"><i class="bi bi-cloud-arrow-down"></i> Download</a> |

[3. Placez les données (décompressées) dans le répertoire de votre projet, de la façon suivante :]{.question}

```{r, echo=FALSE, out.width="60%", fig.align='center'}
knitr::include_graphics("../img/folder5.png")
```

[4. Importez le fichier *africapolis_extract.shp*]{.question}

```{r warning = FALSE, message = FALSE , eval = FALSE}
#| code-summary: "Un peu d'aide ?"

# Pour importer des données géographiques 
library(sf)
... <- st_read()


```

[5. Vérifiez quelle est la projection cartographique utilisée. Re-projetez la couche dans la projection *UTM zone 31N* (EPSG : 32631 ).]{.question}

```{r warning = FALSE, message = FALSE , eval = FALSE}
#| code-summary: "Un peu d'aide ?"
  
# Pour connaitre le système de référence et de projection d'une couche
st_crs(...)

# Transformer le crs d'un objet sf
... <- st_transform(...)

```

[5. Affichez les géométries des agglomérations urbaines.]{.question}

Astuce : Vous pouvez utiliser la package `mapview` qui permet d'afficher la couche sur différents fonds de carte dynamiques. Cela permet de contrôler le niveau de précision de vos données.

```{r warning = FALSE, message = FALSE , eval = FALSE}
#| code-summary: "Un peu d'aide ?"


# Affichez les géométries d'un objet sf
plot(st_geometry(...))

# Afficher sur un fond de carte dynamique
library(mapview)
mapview(...)


```

[6. Calculez les surfaces de chaque agglomération urbaine. Enregistrez ces valeurs dans une nouvelle colonne.]{.question}

```{r warning = FALSE, message = FALSE , eval = FALSE}
#| code-summary: "Un peu d'aide ?"


# st_area() permet de calculer la surface des polygones d'un objet sf
...$... <- st_area(...)

```

[7. Calculez le nombre et la superficie totale des agglomérations urbaines, par pays.]{.question}

```{r warning = FALSE, message = FALSE , eval = FALSE}
#| code-summary: "Un peu d'aide ?"

library(dplyr)

... <- ... %>% 
          group_by(...) %>% 
          summarise(... = sum(...),
                    ... = n())

```

[8. Créez une quatrième couche géographique (point) à partir des coordonnées de l'Institut Régional de Santé Publique, à Ouidah (Bénin) :]{.question}

-   Latitude = **6.349223507626634**
-   Longitude = **2.0879482065861783**
-   CRS = **WGS84** (4326)

```{r warning = FALSE, message = FALSE , eval = FALSE}
#| code-summary: "Un peu d'aide ?"
  

# Création d'un data.frame avec les colonnes "name", "lat" et "long"
IRSP <- data.frame(name = "...", 
                   lat = ..., 
                   long = ...)


# Création d'une couche géographique à partir de ces cordonnées
IRSP_geo <- st_as_sf(IRSP, 
                     coords = c("...", "..."), 
                     crs = ...)

```

[9. Créez une zone tampon de 50km autour de l'Institut Régional de Santé Publique]{.question}

```{r warning = FALSE, message = FALSE , eval = FALSE}
#| code-summary: "Un peu d'aide ?"
  

# Créer un zone tampon
... <- st_buffer(..., dist = ...)


```

[10. Détectez les agglomérations urbaines situées à moins de 50 km de l'IRSP]{.question}

```{r warning = FALSE, message = FALSE , eval = FALSE}
#| code-summary: "Un peu d'aide ?"
 

# Quelles agglomérations intersectent la zone tampon ?
...$... <- st_intersects(..., ..., sparse = ...)

```

[11. Affichez correctement les différentes couches. Utilisez la couleur pour indiquer les agglomérations urbaines qui intersectent la zone tampon. Exemple :]{.question}

\

```{r, echo=FALSE, out.width="70%", fig.align='center'}
knitr::include_graphics("../img/Ex_plot_buff.png")
```

```{r warning = FALSE, message = FALSE , eval = FALSE}

# Utilisez l'argument "add" pour superposer les couches

plot(st_geometry(...))
plot(...["..."], add = TRUE)
plot(st_geometry(...), add = TRUE)
plot(st_geometry(...), add = TRUE)


```

[12. Combien d'habitants résident dans les agglomérations urbaines qui intersectent la zone tampon ?]{.question}

```{r warning = FALSE, message = FALSE , eval = FALSE}


# Sélectionnez les agglomérations qui intersectent la zone tampon
... <- ...[...$... == TRUE, ]

# Calcul de la population totale de ces agglomérations
sum(...$...)


```

------------------------------------------------------------------------

\

::: center
<a href="/correction/geomatic_vector.zip" class="btn btn-outline-warning" role="button" aria-disabled="true"><i class="bi bi-cloud-arrow-down"></i> Corrigé</a>
:::
:::

\
 
Ecole d’été CIST·2023 - licensebuttons by-sa - Ouidah, Bénin