# /!\/!\/!\ à exécuter si nécessaire
# install.packages("tidyverse", type = "win.binary")

# 0 - Nettoyer son env de travail
rm(list=ls())

# Charger librairies
library(dplyr)
library(sf)
library(leaflet)
library(ggplot2)
library(ggspatial)
library(osmdata)
library(osrm)
library(tidyr)
library(readxl)

# 0 -Fixer le repertoire de travail
setwd("~/git/MASTER_1_R/data")

1 - Ouvrir et afficher les données

# 1 - Ouvrir les shapefiles
commune.shp <- st_read("~/git/MASTER_1_R/data/COMMUNE.shp", quiet=T)
terrain.shp <- st_read("~/git/MASTER_1_R/data/TERRAIN_DE_SPORT.shp", quiet=T)

# Afficher graphique des objets
plot(st_geometry(commune.shp))

2 - Filtrer les données

commune.shp.filter <- commune.shp %>% 
  filter(INSEE_COM %in% c("76451","76108", "76216", "76540", "76157")) %>% st_transform(4326)

# Réduire la dimension des dataframes
commune.shp.filter <- commune.shp.filter %>% 
  select(NOM, INSEE_COM)

terrain.shp.filter <- terrain.shp %>% 
  filter(NAT_DETAIL == "Stade d'athlétisme") %>% 
  st_zm()
map4 <- leaflet() %>% 
  addProviderTiles("Esri.WorldImagery") %>% 
  addPolygons(data=commune.shp.filter, color = "green")
map4

3 - Exporter les données

# Exporter les donnees filtrees
st_write(commune.shp.filter, "data/COMMUNE_filter.shp", delete_dsn = TRUE)
Deleting source `data/COMMUNE_filter.shp' using driver `ESRI Shapefile'
Writing layer `COMMUNE_filter' to data source 
  `data/COMMUNE_filter.shp' using driver `ESRI Shapefile'
Writing 5 features with 2 fields and geometry type Multi Polygon.

4 - Réaliser une jointure spatiale

# Veirifer le SCR des deux shapefiles
st_crs(terrain.shp.filter) == st_crs(commune.shp.filter)
[1] FALSE
# Reprojeter les données
terrain.shp.filter <- terrain.shp.filter %>% 
  st_transform(4326)

# Jointure spatiale pour ajouter le nom de la commune au terrain de sport
terrain.shp.filter <- st_intersection(terrain.shp.filter, commune.shp.filter)

5 - Calculer des superficies

terrain.shp.filter <- terrain.shp.filter %>% 
  mutate(AREA = st_area(.))

head(terrain.shp.filter %>% select(ID,NOM,INSEE_COM,AREA,geometry))
Simple feature collection with 5 features and 4 fields
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: 1.029957 ymin: 49.43274 xmax: 1.149572 ymax: 49.46725
Geodetic CRS:  WGS 84
                         ID               NOM INSEE_COM           AREA
10 TERRSPOR0000000064257448 Mont-Saint-Aignan     76451 3939.357 [m^2]
16 TERRSPOR0000000356874267          Canteleu     76157 3824.463 [m^2]
12 TERRSPOR0000000356874269             Rouen     76540 4078.266 [m^2]
20 TERRSPOR0000000356977218             Rouen     76540 4014.215 [m^2]
26 TERRSPOR0000002011504418             Rouen     76540 3277.727 [m^2]
                         geometry
10 POLYGON ((1.076727 49.46577...
16 POLYGON ((1.031149 49.45081...
12 POLYGON ((1.072183 49.43414...
20 POLYGON ((1.148475 49.45796...
26 POLYGON ((1.121702 49.44958...

6 - Calculer des statistiques

terrain.shp.filter %>% 
  group_by(NOM) %>% 
  summarize(MIN = min(AREA),
            MEAN = mean(AREA),
            MAX = max(AREA),
            TOTAL = sum(AREA),
            COUNT = n())
Simple feature collection with 3 features and 6 fields
Geometry type: GEOMETRY
Dimension:     XY
Bounding box:  xmin: 1.029957 ymin: 49.43274 xmax: 1.149572 ymax: 49.46725
Geodetic CRS:  WGS 84
# A tibble: 3 × 7
  NOM                 MIN  MEAN   MAX  TOTAL COUNT                      geometry
  <chr>             [m^2] [m^2] [m^2]  [m^2] <int>                <GEOMETRY [°]>
1 Canteleu          3824. 3824. 3824.  3824.     1 POLYGON ((1.031149 49.45081,…
2 Mont-Saint-Aignan 3939. 3939. 3939.  3939.     1 POLYGON ((1.076727 49.46577,…
3 Rouen             3278. 3790. 4078. 11370.     3 MULTIPOLYGON (((1.121702 49.…