library(sf)Linking to GEOS 3.12.2, GDAL 3.9.3, PROJ 9.4.1; sf_use_s2() is TRUE
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
R se base sur le langage de programmation S, créé en 1988.
L’objectif était de créer le meilleur environnement d’analyse statistique.
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 ?
Nombre de packages disponibles sur le CRAN
spatial, sgeostat, splancs, akima, geoR, spatstat, spdep, maptools.rgdal (Bivand et al., 2023), interface entre R et GDAL/PROJ4sp (Pebesma, 2018), classes et méthodes dédiées aux objets spatiaux, adoption rapidesp par ggplot2rgeos (Bivand et Rundel, 2023), interface entre R et GEOS.raster (Hijmans, 2023a), support des données rastersf (Pebesma, 2018), remplace sp, rgdal et rgeosstars (Pebesma et Bivand, 2023), remplace rasterterra (Hijmans, 2023b), remplace aussi raster
Aujourd’hui, R est en capacité de se substituer aux logiciels SIG
Des bibliothèques géographiques largement utilisées :
Il s’agit de dépendances externes
Envisager la conteneurisation (Nüst et Pebesma, 2021).

sfPublié fin 2016 par Edzer Pebesma.


Principales fonctionnalités
|> ou %>%)tidyverse.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.
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.
sf
sfLe package sf propose toutes les fonctions classiques de manipulation de données géographiques et de géotraitements proposées par les SIG. Exemples :
st_transform()st_filter()st_join()st_area()st_distance()st_centroid()st_union()st_buffer()st_intersection()st_make_grid()
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 (WGS 84 / UTM zone 20N)

mtq_2154 (RGF93 v1 / Lambert-93)

Affichage :
Affichage :
Affichage :
Construction d’une grille régulière
grid_centroid <- st_join(x = mtq_grid50,
y = mtq_centroid,
join = st_intersects,
left = FALSE)
grid_centroidSimple 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...
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)
terraLe 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 :
Données RASTER (SpatRaster)
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)
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
Extraction en fonction d’une couche vectorielle.
Afficher la résolution d’un raster
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_modelclass : 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
Terra → Géomatique avec R
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é.
Différents packages pour l’analyse ou la statistique spatiale :
spatstat : Analyse statistique de semis de pointsgstat : Variogram et Krigeagergeoda : Geoda avec RGWmodel, spgwr : Geographically Weighted Modelsmapiso : Conversion Raster vers polygoneosrm : Calcul d’itinéraire (OpenStreetMap)sfnetworks : Analyse des réseaux géospatiauxstplanr : Planification et de modélisation des transports...

Exemple appliqué :
A. Densité d’un semis par la méthode de lissage par noyaux (KDE) :
img, package spatstat) en objet SpatRaster (package terra) :
SpatRaster) et polygone vectoriel (sf) :
Trois packages de référence.
mapsfFonctionnalités principales :
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"
)
)
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()
mapsf → Cartographie avec R

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
tmap pour la cartographie thématiqueshiny pour les applications
De nombreuses palettes sont disponibles en R-base :
Sinon, près de 70 packages proposent des palettes…
paletteer (Hvitfeldt, 2021) combine 2587 palettescols4all (Tennekes, 2023) propose une app shiny :
Il est également possible de construire sa palette personnalisée avec les codes couleur héxadécimaux :
Certaines couleurs sont directement implementées dans R et peuvent être directement appelées par un nom :
Liste des couleurs implementées : http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf
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
Exemple geodata - Données GADM :
https://github.com/rspatial/geodata
https://gadm.org/
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 :
ceramicggmap (pour ggplot2)ggspatial (pour ggplot2, utilise rosm)mapboxapi (mapbox)mapsapi (google, utilise RgoogleMaps)OpenStreetMap (nécessite Java)RgoogleMaps (google)rosm
Le package tidygeocoder (Cambon et al., 2021) permet d’utiliser un grand nombre de services de géocodage en ligne.
# A tibble: 1 × 3
address lat long
<chr> <dbl> <dbl>
1 54 boulevard Raspail, 75006 Paris, FRANCE 48.9 2.33
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 !
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

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.
min max
x 4.797571 4.819687
y 43.942354 43.953799

Robin Lovelace, Jakub Nowosad, Jannes Muenchow (2019)

terra


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.




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