diff --git a/02_import_sf.qmd b/02_import_sf.qmd index 2fc1ae1..448932f 100644 --- a/02_import_sf.qmd +++ b/02_import_sf.qmd @@ -19,7 +19,7 @@ com <- st_read("data/lot.gpkg", layer = "communes") class(com) ``` -Une couche géographique assignée dans un un objet avec la fonction `st_read()` est automatiquement stockée dans un objet `sf`. +La fonction `st_read()` importe les couches géographiques au format `sf`. ::: {.callout-note} ## Geopackage diff --git a/04_projection_sf.qmd b/04_projection_sf.qmd index 164c70e..e4ac9aa 100644 --- a/04_projection_sf.qmd +++ b/04_projection_sf.qmd @@ -24,17 +24,17 @@ st_crs(com) La fonction `st_transform()` permet de changer le système de coordonnées d'un objet `sf`, de le reprojeter. -```{r, proj2} +```{r proj2} #| layout-ncol: 2 #| fig-width: 4 #| fig-height: 4 - mf_map(com, expandBB = c(0, .12, 0, 0)) mf_graticule(x = com) -mf_title("RGF93 / Lambert-93") - +mf_title("RGF93 / Lambert-93") + +# changement de projection com_reproj <- st_transform(com, "EPSG:3035") - + mf_map(com_reproj, expandBB = c(0, .12, .0, 0)) mf_graticule(x = com_reproj) mf_title("ETRS89-extended / LAEA Europe") diff --git a/07_operation_geom_sf.qmd b/07_operation_geom_sf.qmd index adcd3ef..c4deeb9 100644 --- a/07_operation_geom_sf.qmd +++ b/07_operation_geom_sf.qmd @@ -30,29 +30,50 @@ mf_map(dep_46, col = NA, border = "red", lwd = 2, add = TRUE) ## Agréger des polygones en fonction d'une variable -* Avec la librairie `dplyr` +* Avec la bibliothèque `dplyr` ```{r aggreg2, nm=TRUE, message = FALSE} library(dplyr) com_u <- com |> - group_by(STATUT) |> - summarise(POPULATION = sum(POPULATION)) + group_by(STATUT) |> + summarise(POPULATION = sum(POPULATION)) ``` * Sans `dplyr` ```{r aggreg3, nm=TRUE} +# variable servant à agréger les polygones i <- com$STATUT com_u <- st_sf( - STATUT = tapply(X = i , INDEX = i, FUN = head, 1), - POPULATION = tapply(X = com$POPULATION , INDEX = i, FUN = sum), - geometry = tapply(X = st_geometry(com), INDEX = i, FUN = st_union), + STATUT = tapply(X = com$STATUT , INDEX = i, FUN = head, 1), + POPULATION = tapply(X = com$POPULATION , INDEX = i, FUN = sum), + geometry = tapply(X = com , INDEX = i, FUN = st_union), crs = st_crs(com) ) ``` +:::{.callout-note} +## Explication de la méthode d'agrégation + +`tapply(X, INDEX, FUN)` permet d'aggréger une variable en fonction d'une autre. +Il faut indiquer la variable à agréger **X**, la variable servant à agréger **INDEX** et la manière d'agréger (une fonction) **FUN**. + +Ici par exemple nous calculons la somme des population des communes en fonction de leur statut : +```{r tapply1} +tapply(X = com$POPULATION, INDEX = com$STATUT, FUN = sum) +``` + +`tapply()` fonctionne également avec les objets `sf` et `sfc`: +```{r} +st_sfc(tapply(com, com$STATUT, st_union)) +``` + +Nous pouvons ensuite combiner plusieurs appels `tapply()` à l'interieur d'un appel à `st_sf()` en ajoutant également les informations sur le système de coordonnées. +::: + + ## Construire une zone tampon @@ -72,9 +93,7 @@ En utilisant la fonction `st_intersection()`, on peut découper une couche par u ```{r intersect2} # création d'une zone tampon autour du centroid de la commune de Gramat # en utilisant le pipe -zone <- st_geometry(gramat) |> - st_centroid() |> - st_buffer(10000) +zone <- st_geometry(gramat) |> st_centroid() |> st_buffer(10000) mf_map(com) mf_map(zone, border = "red", col = NA, lwd = 2, add = TRUE) @@ -174,12 +193,15 @@ Nous pouvons ensuite utiliser la fonction `aggregate()` pour agréger les altitu ```{r agval2} -alti_min <- aggregate(x = list(alt_min = inter$elevation), - by = list(INSEE_COM = inter$INSEE_COM), +# x : la variable que l'on veut agréger +# by : la variable qui servira à agréger +# FUN : la fonction à utiliser lors de l'agrégation +alti_min <- aggregate(x = list(alt_min = inter$elevation), + by = list(INSEE_COM = inter$INSEE_COM), FUN = "min") -alti_max <- aggregate(x = list(alt_max = inter$elevation), - by = list(INSEE_COM = inter$INSEE_COM), +alti_max <- aggregate(x = list(alt_max = inter$elevation), + by = list(INSEE_COM = inter$INSEE_COM), FUN = "max") head(alti_max, n = 3) diff --git a/08_mesures_sf.qmd b/08_mesures_sf.qmd index bd922d2..7be4b13 100644 --- a/08_mesures_sf.qmd +++ b/08_mesures_sf.qmd @@ -2,16 +2,13 @@ ## Créer une matrice de distances +La fonction `st_distance()` permet de calculer une matrice de distance entre deux couches de points. Si le système de projection du jeu de données est renseigné, les distances sont exprimées dans l'unité de mesure de la projection (le plus souvent en mètres). -```{r distance, nm=TRUE} +```{r distance} library(sf) -com <- st_read("data/lot.gpkg", layer = "communes", quiet = TRUE) +com <- st_read("data/lot.gpkg", layer = "communes", quiet = TRUE, agr = "constant") +# transformation de la couche com en couche de points com_c <- st_centroid(com) -``` - -La fonction `st_distance()` permet de calculer une matrice de distance entre deux couches de points. - -```{r distance2, nm=TRUE} mat <- st_distance(x = com_c, y = com_c) mat[1:5,1:5] ``` diff --git a/14_modif_zone_terra.qmd b/14_modif_zone_terra.qmd index 5e69367..5a20a2f 100644 --- a/14_modif_zone_terra.qmd +++ b/14_modif_zone_terra.qmd @@ -132,7 +132,7 @@ elev_lower <- resample(x = elev, method = "bilinear") plot(elev_lower, - main = "Taille des cellules = 1000m\nMéthode de ré-échantillonnage bilinéaire") + main = "cellsize = 1000m - ré-échantillonnage bilinéaire") ``` diff --git a/15_algebre_spatial_terra.qmd b/15_algebre_spatial_terra.qmd index 9b1d5d3..8fcd80b 100644 --- a/15_algebre_spatial_terra.qmd +++ b/15_algebre_spatial_terra.qmd @@ -67,7 +67,8 @@ plot(elev_med, main = "Elevation - median value") La reclassification des valeurs d'un raster peut aussi bien être utilisée pour discrétiser des données quantitatives que pour catégoriser des modalités qualitatives. -Cela permet par exemple de répartir les [44 postes de la nomenclature CLC](https://www.statistiques.developpement-durable.gouv.fr/corine-land-cover-0) selon les 5 grands types d'occupation du territoire : territoires artificialisés, agricoles, forêts et milieux semi-naturels, zones humides et surfaces en eau. Pour cela, il est d'abord nécessaire de construire la table (matrice) de correspondance avec la fonction `matrix()`. +Cela permet par exemple de répartir les [44 postes de la nomenclature CLC](https://www.statistiques.developpement-durable.gouv.fr/corine-land-cover-0) selon les 5 grands types d'occupation du territoire : territoires artificialisés, agricoles, forêts et milieux semi-naturels, zones humides et surfaces en eau. Pour cela, il est d'abord nécessaire de construire une table de correspondance avec la fonction `matrix()`. + ```{r reclass_2} reclassif <- matrix(c(100, 199, 1, 200, 299, 2, @@ -161,7 +162,7 @@ mon_focal <- matrix(1, nrow = 9, ncol = 9) mon_focal ``` -La fonction `focal()` permet de ensuite de réaliser l'analyse souhaitée. Par exemple : le calcul de la moyenne des valeurs de fenêtre spatiale determinée, pour chaque cellule du raster. +La fonction `focal()` permet ensuite de réaliser l'analyse souhaitée. Par exemple : le calcul de la moyenne des valeurs dans une fenêtre spatiale determinée, pour chaque cellule du raster. ```{r op_focal_3} elev_focal_mean <- focal(elev, w = mon_focal, fun = mean) @@ -170,7 +171,7 @@ elev_focal_mean <- focal(elev, w = mon_focal, fun = mean) ```{r op_focal_5} #| layout-ncol: 2 plot(elev, main = "raster de départ") -plot(elev_focal_mean, main="résultat : focal 9 x 9, sans pondération particulière") +plot(elev_focal_mean, main="résultat : focal 9 x 9, pondération uniforme") ``` @@ -187,7 +188,7 @@ La fonction `terrain()` permet de réaliser des analyses focales spécifiques au - ***TRI*** = calcul de l'indice de la variabilité de l'élévation; - ***flowdir*** = calcul du sens d'écoulement de l'eau. -Exemples avec le calcul des pentes (*slope*), c'est à dire leur inclinaison en degré. +Exemples avec le calcul des pentes (*slope*), c'est à dire leur inclinaison en degrés. ```{r op_focal_6} slope <- terrain(elev, "slope", @@ -201,7 +202,7 @@ plot(slope) ## Opérations globales -![source : [https://gisgeography.com/map-algebra-global-zonal-focal-local/](https://gisgeography.com/map-algebra-global-zonal-focal-local/)](img/op_global.png) +![[gisgeography.com](https://gisgeography.com/map-algebra-global-zonal-focal-local/)](img/op_global.png) Les opérations globales permettent de résumer les valeurs matricielles d'une ou plusieurs matrices. diff --git a/18_OSM_interactif.qmd b/18_OSM_interactif.qmd index 0aaac3f..105371d 100644 --- a/18_OSM_interactif.qmd +++ b/18_OSM_interactif.qmd @@ -40,7 +40,7 @@ m ### `mapview` -`mapview` s'appuie sur `leaflet` pour créer des carte interactive, sont utilisation est plus simple et sa documentation est un peu dense. +`mapview` s'appuie sur `leaflet` pour créer des carte interactive, sont utilisation basique est plus simple bien que sa documentation ne soit pas vraiment facile à aborder. ```{r} #| cache: false diff --git a/1999_georeferencement.qmd b/1999_georeferencement.qmd index e001c30..2533bab 100644 --- a/1999_georeferencement.qmd +++ b/1999_georeferencement.qmd @@ -1,4 +1,4 @@ -# Géoréferencement +# Géoréferencement et digitalisation ## Géocoder des adresses @@ -69,6 +69,6 @@ mf_map(place_sf, pch = 4, cex = 2, ## Digitalisation Le package `mapedit` [@R-mapedit] permet de digitaliser des fonds de carte directement dans R. -Bien que pouvant se révéler pratique dans certains cas, ce package ne saurait se substituer aux fonctionnalités d'un SIG pour les tâches de digitalisation importantes. +Mais disons le franchement, bien que pouvant se révéler pratique dans certains cas, ce package ne saurait se substituer aux fonctionnalités d'un SIG pour les tâches de digitalisation importantes. ![From [`mapedit` website](https://r-spatial.org/r/2019/03/31/mapedit_leafpm.html)](img/mapedit-leafpm-1.gif) diff --git a/README.md b/README.md index 070483e..ec7e97d 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,12 @@ # [Géomatique avec R](https://rcarto.github.io/geomatique_avec_r/) -Ce manuel est destiné tant aux utilisateurs de R souhaitant mettre en place traitements de l'information géographique qu'aux utilisateurs souhaitant utiliser R pour réaliser les taches qu'ils réalisent habituellement avec un SIG. +Ce manuel est destiné tant aux utilisateurs de R souhaitant mettre en place des traitements de données spatiales qu'aux utilisateurs souhaitant utiliser R pour réaliser les taches qu'ils réalisent habituellement avec un SIG. Les principales étapes du traitement de l'information géographiques y sont abordées. L'accent est porté sur le traitement des données vectorielles mais une partie est tout de même dédiée aux données raster. -**Comment utiliser le manuel** -Les données utilisées dans ce document sont stockées dans un projet RStudio ([ici](https://github.com/rCarto/geomatique_avec_r/raw/main/docs/geodata.zip). -Vous devez le télécharger puis le décompresser sur votre machine. Il vous sera ensuite possible de tester l'ensemble des manipulations proposées dans ce document au sein du projet **geodata**. - **Contribution et feedback** Vous pouvez nous envoyer vos remarques et suggestions 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. - **Contexte** Ce manuel a été 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 @@ -20,6 +15,7 @@ Un deuxième manuel centré sur la cartographie est disponible ici : [Cartographie avec R](https://rcarto.github.io/cartographie_avec_r/). + ![](img/by-nc-sa.png) La version en ligne de ce document est sous licence [Creative Commons Attribution-NonCommercial-ShareAlike 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/). @@ -30,12 +26,5 @@ La version en ligne de ce document est sous licence [Creative Commons Attributio Giraud, T. et Pecout, H. (2023). Géomatique avec R. https://doi.org/10.5281/zenodo.5906212 -``` -@misc{ - author = {Giraud, Timothée and Pecout, Hugues}, - doi = {10.5281/zenodo.5906212}, - title = {{Géomatique avec R}}, - url = {https://rcarto.github.io/geomatique_avec_r/}, - year = {2023} -} -``` + + diff --git a/docs/01_package_sf.html b/docs/01_package_sf.html index d470e6b..19ba644 100644 --- a/docs/01_package_sf.html +++ b/docs/01_package_sf.html @@ -2,7 +2,7 @@ - + @@ -299,7 +299,7 @@