Objets spatiaux simples avec le paquet sf
Lisez, écrivez et manipulez des géométries spatiales selon le standard sf.
Objets spatiaux simples avec le paquet sf est une leçon R Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage R Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours R Academy comprend 4 leçons au total.
Qu’est-ce que le package sf ?
Le package sf (entités simples) est le principal outil de R pour les données vectorielles géospatiales. Il stocke les géométries (points, lignes, polygones) dans une colonne spéciale de type liste au sein d’une trame de données ordinaire, ce qui le rend entièrement compatible avec dplyr et ggplot2.
library(sf)
# sf data frames look like regular data frames
# but have a special 'geometry' column
cat('sf version:', packageVersion('sf'), '\n')
# Supported geometry types
cat('Geometry types: POINT, LINESTRING, POLYGON,\n')
cat(' MULTIPOINT, MULTILINESTRING, MULTIPOLYGON,\n')
cat(' GEOMETRYCOLLECTION\n')read_sf : chargement des fichiers Shapefile
read_sf("file.shp") lit tout format pris en charge par OGR (Shapefile, GeoJSON, GeoPackage, KML, etc.) et le convertit en objet sf. La fonction lit automatiquement le CRS et la table attributaire associés aux géométries.
library(sf)
# Read a GeoJSON file from a URL
url <- 'https://raw.githubusercontent.com/datasets/geo-countries/master/data/countries.geojson'
# For demonstration, use the system example data
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
cat('Class:', class(nc), '\n')
cat('Dimensions:', nrow(nc), 'rows x', ncol(nc), 'cols\n')
cat('CRS:', st_crs(nc)$epsg, '\n')
cat('Geometry type:', unique(st_geometry_type(nc)), '\n')
cat('Column names:', paste(names(nc)[1:5], collapse = ', '), '...\n')st_geometry_type et structure
st_geometry_type() renvoie le type de géométrie de chaque entité. La colonne geometry est une colonne de listes contenant des objets sfc. Vous pouvez l’inspecter, en extraire des sous-ensembles et la manipuler comme n’importe quelle autre colonne.
library(sf)
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
# Geometry type for each feature
types <- st_geometry_type(nc)
cat('Unique types:', unique(as.character(types)), '\n')
# The geometry column
geom_col <- st_geometry(nc)
cat('Geometry class:', class(geom_col), '\n')
cat('First geometry:\n')
print(geom_col[[1]]) # MULTIPOLYGON coordinates
# Access as a normal column
nc$area_est <- st_area(nc) # adds an area column
cat('\nArea column class:', class(nc$area_est), '\n')st_coordinates : extraction de XY
st_coordinates() extrait les matrices de coordonnées brutes de toute géométrie. Pour les points, la fonction renvoie une matrice à 2 colonnes (X, Y). Pour les polygones, elle renvoie tous les sommets des anneaux, avec des colonnes indiquant la partie et l’indice du polygone.
library(sf)
# Create simple point features
pts <- st_sfc(
st_point(c(-80.0, 35.0)),
st_point(c(-79.5, 35.5)),
st_point(c(-79.0, 34.8))
)
pts_sf <- st_sf(id = 1:3, geometry = pts)
# Extract coordinates
coords <- st_coordinates(pts_sf)
cat('Coordinates:\n')
print(coords)
# For polygons: includes part (L1) and polygon (L2) columns
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
ring_coords <- st_coordinates(nc[1, ])
cat('Polygon ring vertices:', nrow(ring_coords), '\n')
cat('Column names:', colnames(ring_coords), '\n')Créer un objet sf à partir d’un tableau de données
st_as_sf(df, coords = c('lon', 'lat'), crs = 4326) convertit un tableau de données standard contenant des colonnes de coordonnées en objet ponctuel sf. L’argument coords indique les colonnes x (longitude) et y (latitude).
library(sf)
# Typical scenario: CSV with lon/lat columns
cities <- data.frame(
name = c('New York', 'Los Angeles', 'Chicago', 'Houston'),
lon = c(-74.006, -118.244, -87.629, -95.369),
lat = c(40.713, 34.052, 41.878, 29.760),
pop = c(8336817, 3979576, 2693976, 2304580)
)
# Convert to sf
cities_sf <- st_as_sf(
cities,
coords = c('lon', 'lat'),
crs = 4326
)
print(cities_sf)
cat('\nCRS:', st_crs(cities_sf)$epsg, '(WGS84)\n')st_point, st_linestring, st_polygon
Vous pouvez construire des géométries par programmation à l’aide de fonctions constructrices. st_point(c(x,y)) crée un point, st_linestring(matrix) crée une ligne à partir de paires de coordonnées et st_polygon(list(matrix)) crée un polygone à partir des coordonnées d’un anneau.
library(sf)
# POINT
p <- st_point(c(-74.006, 40.713))
cat('Point:', class(p), '\n')
# LINESTRING: a route with 4 waypoints
route_coords <- matrix(
c(-74.0, 40.7,
-75.0, 41.0,
-76.0, 41.5,
-77.0, 42.0),
ncol = 2, byrow = TRUE
)
line <- st_linestring(route_coords)
cat('Linestring length:', st_length(line), '\n') # in degrees (no CRS yet)
# POLYGON: a simple bounding box
bbox_ring <- matrix(
c(0,0, 1,0, 1,1, 0,1, 0,0),
ncol = 2, byrow = TRUE
)
poly <- st_polygon(list(bbox_ring))
cat('Polygon area:', st_area(poly), '\n')Représenter des objets sf
La méthode plot() appliquée aux objets sf crée rapidement une carte pour chaque colonne attributaire. Utilisez plot(st_geometry(sf_obj)) pour représenter uniquement la géométrie, sans les panneaux attributaires.
library(sf)
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
# Plot all attributes (creates a panel per column)
# plot(nc) # too many panels
# Plot a single attribute
plot(nc['BIR74'],
main = 'North Carolina: Births 1974',
border = 'white',
lwd = 0.5)
# Plot geometry only
plot(st_geometry(nc),
col = 'lightblue',
border = 'gray40',
main = 'NC Counties')Extraire un sous-ensemble d’objets sf
Les objets sf se comportent comme des tableaux de données : vous pouvez filtrer les lignes avec [, subset() ou dplyr::filter(). La colonne de géométrie est automatiquement conservée lors de toutes les opérations d’extraction de lignes.
library(sf)
library(dplyr)
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
# Base R subsetting
western_nc <- nc[nc$CNTY_ID < 1830, ]
cat('Western counties:', nrow(western_nc), '\n')
# dplyr filter works identically
high_birth <- nc |>
filter(BIR74 > 3000) |>
select(NAME, BIR74, geometry)
cat('High-birth counties:', nrow(high_birth), '\n')
cat('Names:', paste(high_birth$NAME[1:3], collapse = ', '), '...\n')Intégration de sf et ggplot2
ggplot2 prend nativement en charge les objets sf via geom_sf(). La fonction gère automatiquement le système de coordonnées et représente le type de géométrie approprié — points, lignes ou polygones — sans préparation supplémentaire.
library(sf)
library(ggplot2)
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
# Choropleth map with ggplot2
ggplot(nc) +
geom_sf(aes(fill = BIR74), color = 'white', lwd = 0.2) +
scale_fill_viridis_c(
option = 'plasma',
name = 'Births (1974)'
) +
labs(
title = 'North Carolina Birth Counts, 1974',
subtitle = 'County-level data'
) +
theme_minimal()Écrire un objet sf sur le disque
write_sf(sf_obj, 'output.gpkg') (ou st_write()) enregistre les géométries et les attributs sur le disque. Le GeoPackage (.gpkg) est préférable au Shapefile, car il accepte les noms de colonnes longs, UTF-8 et stocke tout dans un seul fichier.
library(sf)
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
# Write to GeoPackage
out_path <- tempfile(fileext = '.gpkg')
write_sf(nc, out_path)
cat('Written to:', out_path, '\n')
cat('File size:', file.info(out_path)$size / 1024, 'KB\n')
# Round-trip: read back
nc_rt <- read_sf(out_path)
cat('Round-trip features:', nrow(nc_rt), '\n')
cat('Round-trip CRS match:', identical(st_crs(nc), st_crs(nc_rt)), '\n')Résumé et inspection d’un objet sf
Utilisez print(), st_bbox(), st_crs() et summary() pour inspecter rapidement un objet sf. st_bbox() renvoie la boîte englobante sous forme de vecteur nommé (xmin, ymin, xmax, ymax), dans les unités du CRS de l’objet.
library(sf)
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
# Bounding box
bbox <- st_bbox(nc)
cat('Bounding box:\n')
cat(' xmin:', bbox['xmin'], ' xmax:', bbox['xmax'], '\n')
cat(' ymin:', bbox['ymin'], ' ymax:', bbox['ymax'], '\n')
# CRS
crs_info <- st_crs(nc)
cat('\nEPSG:', crs_info$epsg, '\n')
cat('Proj4:', crs_info$proj4string, '\n')
# Attribute summary
cat('\nBIR74 range:',
range(nc$BIR74)[1], 'to',
range(nc$BIR74)[2], '\n')Vérification rapide
Vous disposez d’un tableau de données contenant les colonnes longitude et latitude (WGS84). Quel appel de fonction le convertit en objet ponctuel sf ?
Récapitulatif : package sf
Points essentiels :
read_sf()charge les fichiers Shapefile, GeoJSON, GeoPackage et d’autres formatsst_geometry_type()renvoie POINT, LINESTRING, POLYGON, etc. pour chaque entitést_coordinates()extrait les matrices de coordonnées XY brutesst_as_sf(df, coords = c('x','y'), crs = 4326)crée un objet sf à partir d’un tableau de données- Constructeurs programmatiques :
st_point(),st_linestring(),st_polygon() plot(sf_obj)ougeom_sf()dans ggplot2 pour la visualisationwrite_sf()enregistre les données au format GeoPackage, Shapefile, GeoJSON, etc.
library(sf)
# Quick sf workflow
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
cat('Features:', nrow(nc), '\n')
cat('CRS EPSG:', st_crs(nc)$epsg, '\n')
cat('Geom type:', unique(as.character(st_geometry_type(nc))), '\n')
cat('Bbox xmin:', st_bbox(nc)['xmin'], '\n')Apprends R avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 43
- Leçons
- 159
Questions Fréquemment Posées
La leçon « Objets spatiaux simples avec le paquet sf » est-elle gratuite ?
Oui — le texte complet de « Objets spatiaux simples avec le paquet sf » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours R Academy, passe à CoddyKit PRO. Le cours R Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Objets spatiaux simples avec le paquet sf » ?
Lisez, écrivez et manipulez des géométries spatiales selon le standard sf. Tu pratiques R Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer R Academy ?
Aucune expérience préalable n'est requise. R Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Objets spatiaux simples avec le paquet sf » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon R Academy ?
Oui. Chaque leçon R Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Objets spatiaux simples avec le paquet sf
- Systèmes de coordonnées et projections
- Jointures et opérations spatiales
- Cartes interactives avec leaflet