Skip to content
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ support_m7_files
support_m7.Rmd
support_m7.knit.md
*cache

*.png
2 changes: 2 additions & 0 deletions 01-get-started.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ library(lubridate)
# remotes::install_gitlab('dreal-pdl/csd/mapfactory', host = "gitlab-forge.din.developpement-durable.gouv.fr")
library(mapfactory)
library(mapview)
# remotes::install_github("InseeFrLab/melodi")
library(melodi)
library(osmdata)
library(osmextract)
library(osrm)
Expand Down
2 changes: 1 addition & 1 deletion 02-modelisation.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Les données "raster" sont en générale plus utilisées dans les science enviro

Le packages `{sf}` permet de gérer les données vecteur dans R.

Avant `{sf}` existait le package `{sp}`, que vous pourrez rencontrer suivant les packages plus spécifiques que vous utiliserez ou en cherchant de l'aide.
Avant `{sf}` existait le package `{sp}`, que vous pourrez encore rencontrer suivant les packages plus spécifiques que vous utiliserez ou en cherchant de l'aide.

Les avantages de `{sf}` sont multiples :

Expand Down
2 changes: 1 addition & 1 deletion 03-crs.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Le *datum* ou *système géodésique* va correspondre aux paramètres de forme d

On va distinguer deux types de datum : les datum *locaux* et les datum *globaux*.

Historiquement n'existait que des datum locaux, c'est à dire qui définissait une ellipse optimale pour correspondre à une partie déterminée de la surface de la terre. Cette contrainte était liée à la façon de définir le géoïde : avant les techniques spatiales, on utilisait des mesures de triangulation à partir d'un point défini par mesure astronomique.
Historiquement n'existaient que des datum locaux, c'est à dire qui définissait une ellipse optimale pour correspondre à une partie déterminée de la surface de la terre. Cette contrainte était liée à la façon de définir le géoïde : avant les techniques spatiales, on utilisait des mesures de triangulation à partir d'un point défini par mesure astronomique.

Depuis l'avènement des techniques spatiales, on est capable de définir un *datum global* grâce aux mesures satellitaires. Le système mondial de référence est aujourd'hui le WGS 84, associé au GPS (code EPSG 4326).

Expand Down
49 changes: 32 additions & 17 deletions 04-lire-des-donnees-spatiales.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ Exemple de lecture d'une donnée au format `GeoPackage`: les données sur la Leu

```{r, eval=FALSE}
geo_fichier <- system.file("shapes/NY8_bna_utm18.gpkg", package = "spData")
geo_fichier # contient l'adresse vers le jeu de données
NY_leukemia <- st_read(dsn = geo_fichier)
```

Expand Down Expand Up @@ -97,7 +98,7 @@ A noter que `st_write()` peut exporter des tables géographiques au format csv :

```{r, eval=FALSE}
st_write(
obj = NY_leukemia,
obj = NY_leukemia %>% st_centroid(),
dsn = "extdata/NY_leukemia.csv",
layer_options = "GEOMETRY=AS_XY",
delete_layer = TRUE
Expand All @@ -118,7 +119,7 @@ Le paramètre `layer_option` permet d'inclure des options propres à chaque driv

#### Exemple 1 (geojson classique):

```{r eval = FALSE, message = TRUE, warning = FALSE}
```{r eval = TRUE, message = TRUE, warning = FALSE}
st_read("https://france-geojson.gregoiredavid.fr/repo/regions.geojson") %>%
filter(code > "10") %>%
select(code) %>%
Expand All @@ -127,43 +128,55 @@ st_read("https://france-geojson.gregoiredavid.fr/repo/regions.geojson") %>%

#### Exemple 2 (api)

L'[api de découpage administratif](https://geo.api.gouv.fr/decoupage-administratif/) permet de charger des contours administratifs.
Dans l'exemple suivant, nous chargeons les contours des epci du département 44.
L'[api de découpage administratif](https://geo.api.gouv.fr/decoupage-administratif) permet de charger des contours administratifs.
Dans l'exemple suivant, nous chargeons les contours des epci du département 44 en complétant l'URL de base avec des paramètre de requête.

```{r eval = FALSE, message = TRUE, warning = FALSE}
```{r eval = TRUE, message = TRUE, warning = FALSE}
url <- 'https://geo.api.gouv.fr/epcis?codeDepartement=44&format=geojson&geometry=contour'
st_read(url) %>%
select(code) %>%
plot()
```

### Exemple 3 (geojson compressé)
#### Exemple 3 (geojson compressé)

`sf` repose sur `GDAL` et permet également de lire des geojsons compressés. On pourrait faire de même avec un shapefile compressé en .zip. Cela évite de télécharger le fichier et de le décompresser. Voici un exemple pour récupérer les bâtiments de la commune de Nantes provenant du PCI redistribué par Etalab.

```{r eval = FALSE, message = TRUE, warning = FALSE}
```{r eval = TRUE, message = TRUE, warning = FALSE}
dsn <- '/vsigzip//vsicurl/https://cadastre.data.gouv.fr/data/etalab-cadastre/latest/geojson/communes/44/44109/cadastre-44109-batiments.json.gz'
batiment_nantes <- st_read(dsn = dsn, layer = "cadastre-44109-batiments.json")
mapview(batiment_nantes %>% head(1000))
```

Pour aller plus loin sur les `Virtual File Systems` : [https://gdal.org/user/virtual_file_systems.html](https://gdal.org/user/virtual_file_systems.html)


### Lire des données WFS

`sf` permet aussi de lire des données WFS.
`sf` permet aussi de lire des données en flux WFS.

```{r wfs, eval = FALSE}
```{r wfs, eval = TRUE}
crte <- sf::st_read(dsn = 'https://datacarto.sigloire.fr/wfs?REQUEST=getCapabilities&service=WFS&VERSION=2.0.0', layer = "ms:r_portrait_crte_r52")
crte %>% select(nom_territ) %>% plot()
```


Autres exemple avec la géoplateforme de l'IGN :
```{r}
pref_dep <- st_read("https://data.geopf.fr/wfs/ows?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetCapabilities", layer = "LIMITES_ADMINISTRATIVES_EXPRESS.LATEST:chef_lieu_de_departement") %>%
select(nom_du_chef_lieu)


mapview(pref_dep, legend = FALSE)
```


On indique au niveau du paramètre `dsn` l'url du webservice WFS de la plateforme et au niveau du parametre `layer` le nom de la couche.
Pour aller plus loin dans l'exploitation des flux WFS dans R : https://inbo.github.io/tutorials/tutorials/spatial_wfs_services/.

## Lire/écrire des données spatiales sur PostGIS

`PostGIS`, c'est l'extension géomatique de `PostgreSQL` permettant de stocker des données géo sur un serveur de données et de les manipuler.
`PostGIS`, c'est l'extension géomatique de `PostgreSQL` permettant de stocker des données géo sur un serveur de données et de les exploiter.

R vous permet de vous connecter simplement à une base PostGIS.
Pour cela vous aurez besoin du package `{DBI}` (package permettant de s'interfacer à des bases de données) et du package `{RPostgres}` (interface à PostgreSQL en particulier).
Expand All @@ -186,13 +199,13 @@ con <- dbConnect(drv,
```


Pour lire des données sur le serveur, on va utiliser encore la fonction `st_read()` en lui définissant 2 paramètres : le connecteur et la requête que l'on veut réaliser.
Pour lire des données géographique sur le serveur, il faut utiliser encore `{sf}` et sa fonction `st_read()` en lui définissant 2 paramètres : le connecteur et la requête que l'on veut réaliser.

```{r, eval=FALSE}
ma_table <- st_read(con, query = "SELECT * FROM le_schema.ma_table")
```

L'avantage ici est que vous pouvez faire travailler le serveur directement sans avoir à faire travailler votre poste de travail.
L'avantage ici est que vous pouvez faire travailler le serveur directement en SQL sans avoir à faire travailler votre poste de travail.

Vous pouvez très bien, dans cette requête sql, réaliser quelques filtres, sélections et agrégations.
Celles-ci seront alors réalisées par le serveur posgreSQL et non par votre session R qui ne récupérera que le résultat.
Expand All @@ -219,7 +232,9 @@ Les instruction précédentes deviennent :
remotes::install_gitlab('dreal-pdl/csd/datalibaba', host = "gitlab-forge.din.developpement-durable.gouv.fr")
library(datalibaba)

poster_data(data = regions_geo, schema = "admin_express", table = "n_regions", pk = 'REG', db = 'referentiels')
poster_data(data = regions_geo, schema = "admin_express", table = "n_regions",
pk = 'REG', db = 'referentiels')

station <- importer_data(table = "station", schema = "pesticides", base = "production")
```

Expand All @@ -241,7 +256,7 @@ prefectures_geo <- st_as_sf(prefectures, coords = c("x", "y"), crs = 2154)
```


## Données contenues dans des packages
## Données administratives contenues dans des packages

Depuis le développement de `{sf}`, de nombreux packages proposent des données géographiques.

Expand Down Expand Up @@ -281,9 +296,9 @@ plot(normandie$epci)

Le package COGiter propose également :

- les tables du COG 2022 de l'Insee,
- une table de passage des COG historiques vers le COG millésimé 2022,
- des fonctions d'aide à au passage de jeux de données vers le millésime du COG 2022,
- les tables du COG 2025 de l'Insee,
- une table de passage des COG historiques vers le COG millésimé 2025,
- des fonctions d'aide à au passage de jeux de données vers le millésime du COG 2025,
- des fonctions de calculs d'agrégats aux différentes échelles territoriales,
- des fonctions d'aide à la sélection des différents fond de cartes nécessaire à la mise en page de cartes statistiques.

Expand Down
5 changes: 3 additions & 2 deletions 06-les-operations-sur-donnees-spatiales.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ geom_pred <- ggplot() +
geom_sf(data = l, color = "dodgerblue4", size = 1) +
geom_sf_text(data = rowid_to_column(st_sf(p)), mapping = aes(label = rowid), nudge_x = 0.07) +
theme_minimal() + labs(x = "", y = "")
geom_pred
```

A partir de ces objets, on peut se poser les questions suivantes :
Expand Down Expand Up @@ -192,7 +193,7 @@ st_within(p, a, sparse = FALSE)
Une variante de `st_within()` permet d'ajouter un critère de distance pour intégrer des points *presque* dans le polygone, `st_is_within_distance()`.

```{r}
st_is_within_distance(p, a, dist = 0.8)
st_is_within_distance(p, a, dist = 0.8, sparse = FALSE)
```

`st_touches()` permet de récupérer les points qui *touchent* le polygone sans sans être à l'intérieur du polygone.
Expand Down Expand Up @@ -352,7 +353,7 @@ st_area(epci_d44)

### Matrice de distances

Les distances se calculent avec la fonction `st_distance()`.
Les distances (à vol d'oiseau) se calculent avec la fonction `st_distance()`.

```{r, warning=FALSE}
centres_departements_pdl <- st_centroid(departements_geo) %>%
Expand Down
4 changes: 2 additions & 2 deletions 08-les-reprojections.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -104,15 +104,15 @@ mapview(rennes)
```

Tentons de calculer la distance de Rennes à Nantes.
Avec la données en Lambert 93, la fonction `st_distance()` renvoie un message d'erreur.
Avec un mélange de données entre Lambert 93 et WGS 84, la fonction `st_distance()` renvoie un message d'erreur.

```{r, error = TRUE}
st_distance(rennes, nantes_proj)
```

Avec la données en WGS 84, la fonction `st_distance()` renvoie bien un résultat.

```{r, error = TRUE}
```{r}
st_distance(rennes, nantes)
```

Expand Down
2 changes: 1 addition & 1 deletion 09-geocodage.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Plusieurs packages permettent de géocoder des adresses.
Le package `{tidygeocoder}` utilise un grand nombre de services de géocodage en ligne et est international.

Le package `{banR}` de Gombin et Chevalier, exploite l'API de la Base Adresse Nationale.
Il s'intalle depuis github.
Il s'installe depuis github.
Il est particulièrement approprié pour géocoder des adresses en France.

```{r, error=TRUE}
Expand Down
Loading
Loading