Traitement et analyse de l’information spatialisée avec R


Hugues Pecout

UMR8504 Géographie-Cités




Master I Géomatique (USSEIN), 26 mars 2024

Le langage R et l’information spatiale

Historique du langage R

R se base sur le langage de programmation S, créé en 1988.
L’objectif était de créer le meilleur environnement d’analyse statistique.

  • 1992: R. Gentleman et R. Ihaka démarrent le développement (projet de recherche)
  • 1993: Première version binaire de R publiée sur Statlib
  • 1995: R est distribué en tant que logiciel open source, sous licence GPL2
  • 1997: Création du R core group. Création du CRAN (par K. Jornik et F. Leisch)
  • 1999: Création du site web de R (r-project.org) . Première réunion physique de la R core team
  • 2000: R 1.0.0 est publié. John Chambers (créateur du langage S), rejoint la R Core team
  • 2001: Création de R News (qui deviendra R Journal)
  • 2003: Création de la R Foundation
  • 2004: Première conférence UseR! (Vienne)
  • 2004: R 2.0.0 est publié
  • 2009: Première édition du R Journal
  • 2013: R 3.0.0 est plublié
  • 2015: Création du R Consortium (avec la participation de la R Foundation)
  • 2020: R 4.0.0 est plublié

R est aujourd’hui un langage très polyvalent, qui propose des fonctionnalités qui vont au delà de l’analyse statistique… Que propose R pour la manipulation de données spatiales ?

Croissance des fonctionnalités


Nombre de packages disponibles sur le CRAN

R et l’information géographique



Aujourd’hui, R est en capacité de se substituer aux logiciels SIG

Le socle de l’écosystème


Des bibliothèques géographiques largement utilisées :

Il s’agit de dépendances externes

  • Installation
  • Reproductibilité

Envisager la conteneurisation (Nüst et Pebesma, 2021).

Pebesma et Bivand (2023, chap. 1.7)

Manipulation de données vectorielles avec R

Le package sf

Publié fin 2016 par Edzer Pebesma.

© Allison Horst, 2018

Principales fonctionnalités

  • import / export
  • affichage
  • géotraitements
  • support des données non projetées (sur le globe)
  • utilisation du standard simple feature
  • compatibilité avec le pipe
    (|> ou %>%)
  • compatibilité avec les opérateurs du tidyverse.

L’objet sf



Les objets sf sont des data.frame dont l’une des colonnes contient des géométries. Format très pratique, les données et les géométries sont intrinsèquement liées dans un même objet.

Import de données vectorielles


library(sf)
Linking to GEOS 3.12.2, GDAL 3.9.3, PROJ 9.4.1; sf_use_s2() is TRUE


mtq <- st_read(dsn = "data/mtq.gpkg", layer = "mtq")
Reading layer `mtq' from data source 
  `/home/hugues/Bureau/M1_USSEIN_INTRO_GEO_R/data/mtq.gpkg' using driver `GPKG'
Simple feature collection with 34 features and 7 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 690574 ymin: 1592536 xmax: 735940.2 ymax: 1645660
Projected CRS: WGS 84 / UTM zone 20N


Les principaux formats de fichiers sont pris en charge.

Affichage des objets sf


plot(mtq)

plot(st_geometry(mtq))

# Avec le package mapsf
library(mapsf)

mf_map(mtq)

Manipulation et géotraitements avec sf

Le package sf propose toutes les fonctions classiques de manipulation de données géographiques et de géotraitements proposées par les SIG. Exemples :

  • Changement projection : st_transform()
  • Séléction attributaire : Similaire aux data.frame
  • Séléction spatiale : st_filter()
  • Jointure spatiale : st_join()
  • Calucl surface : st_area()
  • Calucl distance : st_distance()
  • Extraction centroïde : st_centroid()
  • Agrégation de géométrie : st_union()
  • Création de zone tampon : st_buffer()
  • Découpage d’une géométrie par une autre : st_intersection()
  • Création d’une grille régulière : st_make_grid()

Gestion de la projection


st_crs(mtq)
Coordinate Reference System:
  User input: WGS 84 / UTM zone 20N 
  wkt:
PROJCRS["WGS 84 / UTM zone 20N",
    BASEGEOGCRS["WGS 84",
        ENSEMBLE["World Geodetic System 1984 ensemble",
            MEMBER["World Geodetic System 1984 (Transit)"],
            MEMBER["World Geodetic System 1984 (G730)"],
            MEMBER["World Geodetic System 1984 (G873)"],
            MEMBER["World Geodetic System 1984 (G1150)"],
            MEMBER["World Geodetic System 1984 (G1674)"],
            MEMBER["World Geodetic System 1984 (G1762)"],
            MEMBER["World Geodetic System 1984 (G2139)"],
            MEMBER["World Geodetic System 1984 (G2296)"],
            ELLIPSOID["WGS 84",6378137,298.257223563,
                LENGTHUNIT["metre",1]],
            ENSEMBLEACCURACY[2.0]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433]],
        ID["EPSG",4326]],
    CONVERSION["UTM zone 20N",
        METHOD["Transverse Mercator",
            ID["EPSG",9807]],
        PARAMETER["Latitude of natural origin",0,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8801]],
        PARAMETER["Longitude of natural origin",-63,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8802]],
        PARAMETER["Scale factor at natural origin",0.9996,
            SCALEUNIT["unity",1],
            ID["EPSG",8805]],
        PARAMETER["False easting",500000,
            LENGTHUNIT["metre",1],
            ID["EPSG",8806]],
        PARAMETER["False northing",0,
            LENGTHUNIT["metre",1],
            ID["EPSG",8807]]],
    CS[Cartesian,2],
        AXIS["(E)",east,
            ORDER[1],
            LENGTHUNIT["metre",1]],
        AXIS["(N)",north,
            ORDER[2],
            LENGTHUNIT["metre",1]],
    USAGE[
        SCOPE["Navigation and medium accuracy spatial referencing."],
        AREA["Between 66°W and 60°W, northern hemisphere between equator and 84°N, onshore and offshore. Anguilla. Antigua and Barbuda. Bermuda. Brazil. British Virgin Islands. Canada - New Brunswick; Labrador; Nova Scotia; Nunavut; Prince Edward Island; Quebec. Dominica. Greenland. Grenada. Guadeloupe. Guyana. Martinique. Montserrat. Puerto Rico. St Kitts and Nevis. St Barthelemy. St Lucia. St Maarten, St Martin. St Vincent and the Grenadines. Trinidad and Tobago. Venezuela. US Virgin Islands."],
        BBOX[0,-66,84,-60]],
    ID["EPSG",32620]]


Transformation de la couche en projection RGF93 v1 / Lambert-93 :

mtq_2154 <- st_transform(mtq, crs = "EPSG:2154")


mtq (WGS 84 / UTM zone 20N)

mtq_2154 (RGF93 v1 / Lambert-93)

Séléction par attribut


# En R-base
mtq_sel <- mtq[mtq$POP < 20000, ]

mtq_sel <- subset(mtq, POP < 20000)

# En Tidyverse
library(dplyr)
mtq_sel <- filter(mtq, POP < 20000)
plot(st_geometry(mtq))
plot(st_geometry(mtq_sel), col = "red", add = TRUE)

Extraction centroïdes


mtq_centroid <- st_centroid(mtq)


Affichage :

plot(st_geometry(mtq))
plot(st_geometry(mtq_centroid), col = "red", pch = 20, add = TRUE)

Agrégation de géométrie


mtq_union <- st_union(mtq)


Affichage :

plot(st_geometry(mtq))
plot(st_geometry(mtq_union), lwd = 2, border = "red", add = TRUE)

Zone tampon


mtq_buffer <- st_buffer(x = mtq_union, dist = 5000)


Affichage :

plot(st_geometry(mtq_buffer), lwd = 2, border = "red")
plot(st_geometry(mtq_union), add = TRUE)

Découpage d’une géométrie


mtq_z <- st_intersection(x = mtq, y = p)






plot(st_geometry(mtq_z))

Séléction spatiale


SelSpa <- st_filter(x = mtq, 
                    y = p, 
                    .predicate = st_intersects)

plot(st_geometry(mtq))
plot(st_geometry(SelSpa), col = "red", add = TRUE)


SelSpa2 <- st_filter(x = mtq, 
                     y = p, 
                    .predicate = st_within)

plot(st_geometry(mtq))
plot(st_geometry(SelSpa2), col = "red", add = TRUE)

Mesures


mtq$surface <- st_area(mtq)
mtq$perimetre <- st_perimeter(mtq)


mat_dist <- st_distance(x = mtq_centroid, 
                        y = mtq_centroid)

rownames(mat_dist) <- mtq_centroid$INSEE_COM
colnames(mat_dist) <- mtq_centroid$INSEE_COM


mat_dist[1:4, 1:4]
Units: [m]
          97201    97202     97203    97204
97201     0.000 35316.29  3019.561 12247.13
97202 35316.293     0.00 38303.361 25478.40
97203  3019.561 38303.36     0.000 15099.12
97204 12247.132 25478.40 15099.121     0.00

Grille régulière

Construction d’une grille régulière

mtq_grid50 <- st_make_grid(x = mtq, 
                           cellsize = 2000, 
                           square = TRUE)

# Ajout d'un identifiant unique
mtq_grid50 <- st_sf(ID = 1:length(mtq_grid50), 
                    geom = mtq_grid50)

# Affichage
plot(st_geometry(mtq))
plot(st_geometry(mtq_centroid), add = TRUE)
plot(st_geometry(mtq_grid50), add = TRUE)

Compter des points dans des polygones

inter <- st_intersects(x = mtq_grid50,
                       y = mtq_centroid, 
                       sparse = TRUE)

mtq_grid50$nb_centroid <- lengths(inter)

# Affichage
plot(mtq_grid50["nb_centroid"])

Jointure spatiale


grid_centroid <-  st_join(x = mtq_grid50,
                          y = mtq_centroid,
                          join = st_intersects,
                          left = FALSE)

grid_centroid
Simple feature collection with 34 features and 9 fields
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: 692574 ymin: 1596536 xmax: 732574 ymax: 1644536
Projected CRS: WGS 84 / UTM zone 20N
First 10 features:
     ID nb_centroid INSEE_COM              STATUS            LIBGEO   POP   MED
67   67           1     97226 Simple municipality       Sainte-Anne  4264 15420
108 108           1     97227 Simple municipality       Sainte-Luce  9943 18397
113 113           1     97217      Sub-prefecture          Le Marin  8847 15158
124 124           1     97202 Simple municipality Les Anses-d'Arlet  3737 14558
127 127           1     97206 Simple municipality        Le Diamant  5976 19704
157 157           1     97220 Simple municipality    Rivière-Pilote 12120 15274
172 172           1     97231 Simple municipality   Les Trois-Îlets  7648 19638
176 176           1     97221 Simple municipality     Rivière-Salée 12407 16504
205 205           1     97232 Simple municipality        Le Vauclin  9159 14461
224 224           1     97223 Simple municipality      Saint-Esprit  9379 16417
    CHOM  ACT                           geom
67   490 1815 POLYGON ((730574 1596536, 7...
108  950 4725 POLYGON ((720574 1600536, 7...
113  945 3751 POLYGON ((730574 1600536, 7...
124  425 1659 POLYGON ((706574 1602536, 7...
127  430 2654 POLYGON ((712574 1602536, 7...
157 1858 5486 POLYGON ((726574 1604536, 7...
172  846 3828 POLYGON ((710574 1606536, 7...
176 1608 5653 POLYGON ((718574 1606536, 7...
205  971 3635 POLYGON ((730574 1608536, 7...
224 1033 4168 POLYGON ((722574 1610536, 7...


plot(grid_centroid["STATUS"])


Polygones de Voronoi


Les fonctions sf peuvent être utilisées avec le(s) pipe(s).

mtq_centroid |> 
  st_union() |> 
  st_voronoi() |> 
  st_collection_extract("POLYGON") |> 
  st_intersection(mtq_union) |> 
  st_sf() |> 
  st_join(mtq_centroid, st_intersects) |>
  st_cast("MULTIPOLYGON") |>
  st_geometry() |>
  plot(col = "ivory4") 

# Affichage des centroides
plot(st_geometry(mtq_centroid), 
     col = "red", 
     pch = 20, 
     add = TRUE)

Manipulation de données RASTER avec R

Le package terra

Le package terra permet de gérer des données vectorielles et surtout raster.

Il succède au package raster (Hijmans, 2023a) du même auteur.

Principales fonctionnalités :

  • Affichage
  • Modifications de la zone d’étude (projection, crop, mask, agrégation, fusion…)
  • Algèbre spatial (opérations locales, focales, globales, zonales)
  • Transformation et conversion (rasterisation, vectorisation)

Import de données

library(terra)
terra 1.8.21


Données RASTER (SpatRaster)

alt_raw <- rast("data/altitude.tif") 

alt_raw
class       : SpatRaster 
dimensions  : 86, 125, 1  (nrow, ncol, nlyr)
resolution  : 0.01, 0.01  (x, y)
extent      : 0.9716575, 2.221657, 44.19333, 45.05333  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (EPSG:4326) 
source      : altitude.tif 
name        :  altitude 
min value   :  61.27286 
max value   : 735.98517 

Données vectorielles (SpatVector)

com <- vect("data/com46.gpkg", layer="com")

com
 class       : SpatVector 
 geometry    : polygons 
 dimensions  : 313, 12  (geometries, attributes)
 extent      : 539668.5, 637380.9, 6346290, 6439668  (xmin, xmax, ymin, ymax)
 source      : com46.gpkg (com)
 coord. ref. : RGF93 v1 / Lambert-93 (EPSG:2154) 
 names       : INSEE_COM  NOM_COM         STATUT POPULATION AGR_H AGR_F IND_H
 type        :     <chr>    <chr>          <chr>      <num> <num> <num> <num>
 values      :     46001    Albas Commune simple        522 4.979     0 4.936
                   46002   Albiac Commune simple         67     0 9.589     0
                   46003 Alvignac Commune simple        706 10.42     0 10.42
 IND_F BTP_H BTP_F TER_H TER_F
 <num> <num> <num> <num> <num>
     0 9.958     0 44.92 34.68
     0 4.795     0 4.795 9.589
  5.21 10.42     0 57.31 78.15

Affichage


Données RASTER

alt_raw <- rast("data/altitude.tif") 

plot(alt_raw)

Données vectorielles

com <- vect("data/com46.gpkg", layer="com")

plot(com)

Reprojection


alt_2154 <- project(x = alt_raw, y = "EPSG:2154", method = "bilinear")


alt_raw (WGS 84)

plot(alt_raw)

alt_2154 (RGF93 v1 / Lambert-93)

plot(alt_2154)

Crop & mask

cahors <- subset(com, com$INSEE_COM == "46042") 

# Crop sur la commune de Cahors
crop_cahors <- crop(alt_2154, cahors)

# Affichage
plot(crop_cahors)
plot(cahors, add=TRUE)

# Mask sur la commune de Cahors
alt_mask <- mask(crop_cahors, cahors)

# Affichage
plot(alt_mask)
plot(cahors, add=TRUE)

Fusion de raster


Deux possibilités :


# merge_raster <- merge(crop_cahors, 
#                       crop_bellefont)

# plot(merge_raster)
# plot(bellefont, add = TRUE)
# plot(cahors, add = TRUE)
# mosaic_raster <- mosaic(crop_cahors, 
#                         crop_bellefont)

# plot(mosaic_raster)
# plot(bellefont, add = TRUE)
# plot(cahors, add = TRUE)

Extract

Extraction en fonction d’une couche vectorielle.

stat_by_com <- extract(alt_2154, 
                       com, 
                       fun = "mean")

head(stat_by_com)
  ID altitude
1  1 200.5672
2  2 378.6168
3  3 328.6657
4  4 410.9828
5  5 124.9809
6  6 201.8583

Cartographie des résultats.

com$alt_mean <- stat_by_com[,-1]

plot(com, "alt_mean", 
     col=terrain.colors(5))

Agrégation & désagrégation

Afficher la résolution d’un raster

res(alt_2154) 
[1] 907.4734 907.4734


Créer une grille de même étendue, puis en diminuer la résolution spatiale (plus grosses cellules)

alt_lower_model  <- alt_2154

# Tailles des cellules = 1000 mètres
res(alt_lower_model) <- 2000

alt_lower_model
class       : SpatRaster 
dimensions  : 49, 50, 1  (nrow, ncol, nlyr)
resolution  : 2000, 2000  (x, y)
extent      : 537884, 637884, 6344293, 6442293  (xmin, xmax, ymin, ymax)
coord. ref. : RGF93 v1 / Lambert-93 (EPSG:2154) 


La fonction resample() permet de ré-échantillonner les valeurs de départ dans la nouvelle résolution spatiale. Plusieurs méthodes de ré-échantillonnage sont disponibles

alt_lower <- resample(x = alt_2154,
                      y = alt_lower_model, 
                      method = "bilinear") 


plot(alt_lower, 
     main = "cellsize = 1000m - ré-échantillonnage bilinéaire")

Algèbre spatiale



Algèbre spatiale avec TerraGéomatique avec R

Pour aller plus loin…

Conversion d’un objet spatial

Pour profiter des fonctionnalités offertes par les différents packages de manipulation et d’analyse de données spatiales, il est fréquement nécessaire de convertir le type d’objet spatial utilisé.


Objet sf → objet SpatVector


mtq_terra <- vect(mtq)

plot(mtq_terra)

Objet SpatVector → objet sf


mtq_sf <- st_as_sf(mtq_terra)

plot(st_geometry(mtq_sf))

Analyse & statistique spatiale

Différents packages pour l’analyse ou la statistique spatiale :

  • spatstat : Analyse statistique de semis de points
  • gstat : Variogram et Krigeage
  • rgeoda : Geoda avec R
  • GWmodel, spgwr : Geographically Weighted Models
  • mapiso : Conversion Raster vers polygone
  • osrm : Calcul d’itinéraire (OpenStreetMap)
  • sfnetworks : Analyse des réseaux géospatiaux
  • stplanr : Planification et de modélisation des transports
  • ...


Semis de points


Exemple appliqué :


A. Densité d’un semis par la méthode de lissage par noyaux (KDE) :


library(spatstat)

# Conversion du semi de point en objet "ppp"
p <- as.ppp(X = st_coordinates(semis_points), 
            W = as.owin(st_bbox(semis_points)))

# Calcul de la densité (KDE)
ds <- density.ppp(x = p, 
                  sigma = 50, 
                  eps = 10, 
                  positive = TRUE)
plot(ds)


B. Conversion de l’objet crée (img, package spatstat) en objet SpatRaster (package terra) :


library(terra)

# densité en restaurants / hectares
r <- rast(ds) * 100 * 100

# Assignation de la projection
crs(r) <- st_crs(semis_points)$wkt
plot(r)


C. Transformation du Raster (SpatRaster) et polygone vectoriel (sf) :


library(mapiso)

# Limites des classes
bks <-  c(1, 2, 3, 4, 5, 6, 7, max(values(r)))

# Transformation du raster en polygones
iso_dens <- mapiso(r, breaks = bks)

# Suppression de la première classe ([0, 1[)
iso_dens <- iso_dens[-1, ]
library(mapsf)

mf_map(iso_dens, var="isomin", 
       type = "choro", nbreaks = 7)

Cartographie avec R

Cartographie thématique


Trois packages de référence.


ggplot2 + ggspatial (Dunnington, 2023)

mapsf (Giraud, 2022)


Le package mapsf

Le package mapsf (Giraud, 2022) remplace cartography (Giraud et Lambert, 2017).


Site Web

Fonctionnalités principales :

  • 9 types de cartes possibles
  • Tous les éléments d’habillage
  • Thèmes (personalisable)
  • Insets (carton et zoom)
  • Etiquettes

mf_map() est la fonction principale.

mf_map(x = mtq)

mf_map(x = mtq, 
       var = "STATUS", 
       type = "typo")

Utilisation simple

library(mapsf)

# Import données exemple
mtq <- mf_get_mtq()

# Affichage de l'objet sf
mf_map(x = mtq)

Utilisation simple

library(mapsf)

# Import données exemple
mtq <- mf_get_mtq()

# Affichage de l'objet sf
mf_map(x = mtq)

# Carte en symbols proportionnels
mf_map(
  x = mtq,
  var = "POP",
  type = "prop", 
  leg_title = "Population"
)

Utilisation simple

library(mapsf)
# Import données exemple
mtq <- mf_get_mtq()

# Affichage de l'objet sf
mf_map(x = mtq)

# Carte en symbols proportionnels
mf_map(
  x = mtq,
  var = "POP",
  type = "prop", 
  leg_title = "Population"
)

# Ajout éléments de mise en page
mf_layout(
  title = "Population in Martinique", 
  credits = 
    paste0("T. Giraud;",  
           "Sources: INSEE & IGN, 2018"
    )
)

Utilisation avancée

mf_theme("agolalight", bg = "ivory1")

mf_export(x = mtq, filename = "img/mtq.png",
          width = 600, res = 120,
          expandBB = c(0, 0, 0, .3))

mf_shadow(mtq, col = "grey90", add = TRUE)

mf_map(x = mtq, var = "MED", type = "choro",
       pal = "Dark Mint",
       breaks = "quantile",
       nbreaks = 6,
       leg_title = "Median Income\n(euros)",
       leg_val_rnd = -2,
       add = TRUE)

mf_inset_on(x = "worldmap", pos = "right")

mf_worldmap(mtq, col = "#0E3F5C")

mf_inset_off()

mf_title("Wealth in Martinique, 2015")

mf_credits("T. Giraud\nSources: INSEE & IGN, 2018")

mf_scale(size = 5)

mf_arrow("topleft")

dev.off()

Manuel d’utilisation du package mapsfCartographie avec R

Cartographie interactive


leaflet (Cheng et al., 2023), repose sur la bibliothèque JS leaflet



mapview (Appelhans et al., 2022), repose sur le package leaflet

tmap dispose d’un mode interactif (leaflet).



mapdeck (Cooley, 2020), repose sur les bibliothèques JS Mapbox GL et Deck.gl

mapview pour l’exploration

library(mapview)

mapview(mtq)


tmap pour la cartographie thématique

library(tmap)

tmap_mode("view")

tm_shape(mtq) +
tm_polygons(fill = "STATUS")

shiny pour les applications

rcarto.shinyapps.io/cityguess

Couleurs et palettes

De nombreuses palettes sont disponibles en R-base :

hcl.pals()

hcl.colors(7, "YlOrRd")
[1] "#7D0025" "#BE1D00" "#EB5500" "#F39300" "#F7C252" "#FCE7A0" "#FFFFC8"

Sinon, près de 70 packages proposent des palettes…

cols4all::c4a_gui()


Il est également possible de construire sa palette personnalisée avec les codes couleur héxadécimaux :

my_pal <- c("#7D0025", "#BE1D00", "#EB5500", "#F39300", "#F7C252", "#FCE7A0")


Certaines couleurs sont directement implementées dans R et peuvent être directement appelées par un nom :

my_pal <- c("red4", "red", "orange", "yellow", "#FFFFC8")


Liste des couleurs implementées : http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf



Acquisition de données

Télécharger des données spatiales

De nombreux packages API existent pour directement récupérer des données spatiales. Quelques exemples :

Maillages administratifs :
rnaturalearth pour les pays du monde
giscoR pour les régions européennes
tigris, mapSpain, geobr

Données d’élévation :
elevatr

Occurrences d’especes :
spocc

Données diverses :
geodata (climat, cultures, altitude, utilisation des terres, accessibilité, limites administratives, ect…)

Données eco / socio / démographique :
wbstats (World Bank)
eurostat
rdhs (santé)

Données satellitaires :
sen2r (Sentinel-2)
MODIStsp (MODIS)
rgee (Google Earth Engine)
nasapower (météo, climato)


Exemple rnaturalearth :
https://www.naturalearthdata.com/


library(rnaturalearth)

pays <- ne_download(scale = 10,
                    type = "countries",
                    category = "cultural",
                    destdir = tempdir(),
                    load = TRUE,
                    returnclass = "sf")
Reading layer `ne_10m_admin_0_countries' from data source 
  `C:\Users\HP\AppData\Local\Temp\Rtmp6xPm5q\ne_10m_admin_0_countries.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 258 features and 168 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -180 ymin: -90 xmax: 180 ymax: 83.6341
Geodetic CRS:  WGS 84


mf_map(pays) 


Exemple geodata - Données GADM :
https://github.com/rspatial/geodata
https://gadm.org/

library(geodata)

sen <- gadm(country="senegal", 
            level=3,
            version="latest", 
            resolution=2,
            path=tempdir())


plot(sen)


Récupérer des tuiles (fond de carte Raster)

Le package maptiles (Giraud, 2023) permet de télécharger des fonds de carte (raster).

library(maptiles)

bbox <- terra::ext(c(xmin = 4.795, xmax = 4.825,
                     ymin = 43.94, ymax = 43.955))

tiles <- get_tiles(x = bbox, 
                   provider = "OpenStreetMap",
                   project = FALSE, 
                   crop = TRUE, 
                   zoom = 15, 
                   cachedir = "cache")

plot(tiles)

Alternatives :

  • ceramic
  • ggmap (pour ggplot2)
  • ggspatial (pour ggplot2, utilise rosm)
  • mapboxapi (mapbox)
  • mapsapi (google, utilise RgoogleMaps)
  • OpenStreetMap (nécessite Java)
  • RgoogleMaps (google)
  • rosm

Géocoder des adresses

Le package tidygeocoder (Cambon et al., 2021) permet d’utiliser un grand nombre de services de géocodage en ligne.

library(tidygeocoder)
EHESS <- geo("54 boulevard Raspail, 75006 Paris, FRANCE")

EHESS
# A tibble: 1 × 3
  address                                     lat  long
  <chr>                                     <dbl> <dbl>
1 54 boulevard Raspail, 75006 Paris, FRANCE  48.9  2.33


EHESS_sf <- st_as_sf(EHESS, 
                     coords = c("long", "lat"), 
                     crs = "EPSG:4326") 

library(mapview)  
mapview(EHESS_sf)

Digitalisation

Le package mapedit (Appelhans et al., 2020) permet de digitaliser des données vectorielles directement dans R.

Privilégier les logiciels SIG classiques pour faire de la digitalisation !

OpenStreetMap

Une base de données cartographique libre et contributive.

Conditions d’utilisation

OpenStreetMap est en données libres : vous êtes libre de l’utiliser dans n’importe quel but tant que vous créditez OpenStreetMap et ses contributeurs. Si vous modifiez ou vous appuyez sur les données d’une façon quelconque, vous pouvez distribuer le résultat seulement sous la même licence. (…)

Contributions

(…) Nos contributeurs incluent des cartographes enthousiastes, des professionnels du SIG, des ingénieurs qui font fonctionner les serveurs d’OSM, des humanitaires cartographiant les zones dévastées par une catastrophe et beaucoup d’autres. (…)

Couverture/complétude

  • Données France : 4,2 GB
  • Données Chine : 1,1 GB
  • Données Afrique : 6,4 GB

Acquisition données OSM

Le package osmdata (Padgham et al., 2017) utilise l’API du service Overpass turbo pour extraire des données de la BD OpenStreetMap.
Nous utilisons le système de clef/valeur d’OSM pour construire la requête.

library(osmdata)

bbox_avignon <- getbb("Avignon, Quartier Centre")

bbox_avignon 
        min       max
x  4.797571  4.819687
y 43.942354 43.953799


# Emprise et type de données à extraire
q <- opq(bbox = bbox_avignon, osm_types = "node")

# Extraction des restaurants
req <- add_osm_feature(opq = q, key = 'amenity', value = "restaurant")
res <- osmdata_sf(req)

resto <- res$osm_points

# Affichage des points extraits
mf_map(resto)

Ressources

Geocomputation with R


Robin Lovelace, Jakub Nowosad, Jannes Muenchow (2019)

r.geocompx.org

Première partie traduite en français

Spatial Data Science with applications in R


Edzer Pebesma, Roger Bivand (2020)

r-spatial.org/book

Spatial Data Science with R and terra


Robert J. Hijmans (2023)

rspatial.org

Cartographie et Géomatique avec R

Rzine.fr

Revue d’article de méthodes mises en application avec R


rzine.fr

Liste de ressources

“Encourager la production et favoriser la diffusion de documentation sur la pratique de R en SHS”

Groupe ElementR

https://elementr.netlify.app/


ElementR est un groupe d’autoformation qui fédère trois unités de recherche en géographie : l’UMR Géographie-Cités, l’UMR PRODIG et l’UAR RIATE.

Ses activités sont accessibles à l’ensemble des membres du Campus Condorcet.

“Pour le traitement de l’information géographique avec R”

Démonstration


Merci de votre attention





Diaporama en ligne


Code source




Bibliographie

Appelhans, T., Detsch, F., Reudenbach, C. et Woellauer, S. (2022). mapview: Interactive Viewing of Spatial Data in R. https://CRAN.R-project.org/package=mapview
Bivand, R., Keitt, T. et Rowlingson, B. (2023). rgdal: Bindings for the ’Geospatial’ Data Abstraction Library. https://CRAN.R-project.org/package=rgdal
Bivand, R. et Rundel, C. (2023). rgeos: Interface to Geometry Engine - Open Source (’GEOS’). https://CRAN.R-project.org/package=rgeos
Cambon, J., Hernangómez, D., Belanger, C. et Possenriede, D. (2021). tidygeocoder: An R package for geocoding. Journal of Open Source Software, 6(65), 3544. https://doi.org/10.21105/joss.03544
Cheng, J., Karambelkar, B. et Xie, Y. (2023). leaflet: Create Interactive Web Maps with the JavaScript ’Leaflet’ Library. https://CRAN.R-project.org/package=leaflet
Cooley, D. (2020). mapdeck: Interactive Maps Using ’Mapbox GL JS’ and ’Deck.gl’. https://CRAN.R-project.org/package=mapdeck
Dunnington, D. (2023). ggspatial: Spatial Data Framework for ggplot2. https://CRAN.R-project.org/package=ggspatial
GDAL/OGR contributors. (2022). GDAL/OGR Geospatial Data Abstraction software Library. Open Source Geospatial Foundation. https://doi.org/10.5281/zenodo.5884351
GEOS contributors. (2021). GEOS coordinate transformation software library. Open Source Geospatial Foundation. https://libgeos.org/
Giraud, T. (2022). mapsf: Thematic Cartography. https://CRAN.R-project.org/package=mapsf
Giraud, T. (2023). maptiles: Download and Display Map Tiles. https://CRAN.R-project.org/package=maptiles
Giraud, T. et Lambert, N. (2017). Reproducible Cartography. M. Peterson (dir.), Cham, Switzerland (p. 173‑183). https://doi.org/10.1007/978-3-319-57336-6_13
Hijmans, R. J. (2023a). raster: Geographic Data Analysis and Modeling. https://CRAN.R-project.org/package=raster
Hijmans, R. J. (2023b). terra: Spatial Data Analysis. https://CRAN.R-project.org/package=terra
Hvitfeldt, E. (2021). paletteer: Comprehensive Collection of Color Palettes. https://github.com/EmilHvitfeldt/paletteer
Nüst, D. et Pebesma, E. (2021). Practical Reproducibility in Geography and Geosciences. Annals of the American Association of Geographers, 111(5), 1300‑1310. https://doi.org/10.1080/24694452.2020.1806028
Padgham, M., Rudis, B., Lovelace, R. et Salmon, M. (2017). osmdata. Journal of Open Source Software, 2(14), 305. https://doi.org/10.21105/joss.00305
Pebesma, E. (2018). Simple Features for R: Standardized Support for Spatial Vector Data. The R Journal, 10(1), 439‑446. https://doi.org/10.32614/RJ-2018-009
Pebesma, E. et Bivand, R. (2023). Spatial Data Science: With applications in R (p. 352). Chapman and Hall/CRC. https://r-spatial.org/book/
PROJ contributors. (2021). PROJ coordinate transformation software library. Open Source Geospatial Foundation. https://proj.org/
Tennekes, M. (2018). tmap: Thematic Maps in R. Journal of Statistical Software, 84(6), 1‑39. https://doi.org/10.18637/jss.v084.i06
Tennekes, M. (2023). cols4all: Colors for all. https://CRAN.R-project.org/package=cols4all