OCSGExSitadel_report_v1

Author

JSP

Objectif

L’objectif de ce projet pilote est d’évaluer la faisabilité technique d’une analyse croisée entre la base de données d’occupation des sols OCS-GE et la base de données des permis d’urbanisme de Sitadel. La BDD Sitadel ne disposant pas d’informations géospatiales, un recoupement intermédiaire avec les données cadastrales doit être réalisé. Ce projet pilote est menée à l’échelle du département de la Dordogne (24).

1. Préparation des analyses

1.1 Chargement des packages

# Nettoyage de l'espace de travail
rm(list=ls())

#Chargement des packages
library(readxl)
library(rmarkdown)
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(RColorBrewer)
library(scales)

Attachement du package : 'scales'

L'objet suivant est masqué depuis 'package:purrr':

    discard

L'objet suivant est masqué depuis 'package:readr':

    col_factor
library(maps)

Attachement du package : 'maps'

L'objet suivant est masqué depuis 'package:purrr':

    map
library(sf)
Linking to GEOS 3.12.1, GDAL 3.8.4, PROJ 9.3.1; sf_use_s2() is TRUE
library(geojsonsf)
library(leaflet)
library(units)
udunits database from C:/Users/jsiracusaphilippe/AppData/Local/R/win-library/4.4/units/share/udunits/udunits2.xml
library(ggrepel)
library(viridis)
Le chargement a nécessité le package : viridisLite

Attachement du package : 'viridis'

L'objet suivant est masqué depuis 'package:maps':

    unemp

L'objet suivant est masqué depuis 'package:scales':

    viridis_pal
library(units)
library(lubridate)
library(plotly)

Attachement du package : 'plotly'

L'objet suivant est masqué depuis 'package:ggplot2':

    last_plot

L'objet suivant est masqué depuis 'package:stats':

    filter

L'objet suivant est masqué depuis 'package:graphics':

    layout

1.2 Chargement des données

# Données cadastrale (CA) de la Dordogne (24)
cadastre24 <- st_read("Data/Cadastre/parcelles.shp", crs = st_crs(2154))
Reading layer `parcelles' from data source 
  `C:\Users\jsiracusaphilippe\Documents\Datas\R\OCS-GE x Sitadel\Data\Cadastre\parcelles.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 1852595 features and 8 fields
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: 460301 ymin: 6387603 xmax: 577760.8 ymax: 6515556
Projected CRS: RGF93 v1 / Lambert-93
# Données d'occupation du sol à grande échelle (OCSGE)
ocsge24 <- st_read("Data/OCS-GE/OCS-GE_Dordogne_2021/1_DONNEES_LIVRAISON_2024-07-00021/OCSGE_2-0_SHP_LAMB93_D24-2021/OCCUPATION_SOL.shp", 
                   crs = st_crs(2154))
Reading layer `OCCUPATION_SOL' from data source 
  `C:\Users\jsiracusaphilippe\Documents\Datas\R\OCS-GE x Sitadel\Data\OCS-GE\OCS-GE_Dordogne_2021\1_DONNEES_LIVRAISON_2024-07-00021\OCSGE_2-0_SHP_LAMB93_D24-2021\OCCUPATION_SOL.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 537120 features and 8 fields
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: 460274.3 ymin: 6387574 xmax: 577772.4 ymax: 6515566
Projected CRS: RGF93 v1 / Lambert-93
# Données de la BDD Sitadel sur les permis d'aménager (PA)
PA <- read_delim("Data/Sitadel/Liste-des-permis-damenager.2024-07.csv", 
                         delim = ";", escape_double = FALSE, trim_ws = TRUE)
Rows: 89633 Columns: 17
── Column specification ────────────────────────────────────────────────────────
Delimiter: ";"
chr  (12): REG_CODE, REG_LIBELLE, DEP_CODE, DEP_LIBELLE, COMM, NUM_PA, SEC_C...
dbl   (4): ETAT_PA, AN_DEPOT, SUPERFICIE_TERRAIN, ZONE_OP
date  (1): DATE_REELLE_AUTORISATION

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

1.3 Filtrage et préparation des données

# Filtrage des données Dordogne dans le fichier Sitadel des PA
PA24 <- PA %>%
  filter(DEP_CODE == "24") 

# on conserve les PA avec une superficie de terrain aménagé > 0 et les projets non-annulés
PA24 <- PA24 %>%
  filter(SUPERFICIE_TERRAIN > "0")%>% 
  rename(commune = COMM) %>%
  mutate(CA1 = paste(SEC_CADASTRE1, NUM_CADASTRE1, sep="."),
         CA2 = paste(SEC_CADASTRE2, NUM_CADASTRE2, sep="."),
         CA3 = paste(SEC_CADASTRE3, NUM_CADASTRE3, sep="."))%>%
  filter(ETAT_PA %in% c("2", "5", "6"))

# On retire les variables inutiles à l'analyse  
PA24_long <- PA24 %>% 
  pivot_longer(cols = c("CA1", "CA2", "CA3"), names_to = "CA_num", values_to = "CA")%>%
  select(-c("REG_CODE", "REG_LIBELLE", "AN_DEPOT","SEC_CADASTRE1", "NUM_CADASTRE1",
            "SEC_CADASTRE2", "NUM_CADASTRE2",
            "SEC_CADASTRE3", "NUM_CADASTRE3", "ZONE_OP"))

# On supprime les données manquantes
PA24_long <- PA24_long %>%
  filter(CA !="NA.NA")
  
# Création d'une nouvelle variable CA combinant "section" et "numéro" 
cadastre24 <- mutate(cadastre24, CA = paste(section, numero, sep = ".")) 

1.4 Combinaison des données CA et PA

# Fusion des dataframe CA et PA
CAxPA24 <- inner_join(x=PA24_long, y=cadastre24, by=c("CA", "commune"))
Warning in inner_join(x = PA24_long, y = cadastre24, by = c("CA", "commune")): Detected an unexpected many-to-many relationship between `x` and `y`.
ℹ Row 36 of `x` matches multiple rows in `y`.
ℹ Row 1204309 of `y` matches multiple rows in `x`.
ℹ If a many-to-many relationship is expected, set `relationship =
  "many-to-many"` to silence this warning.
# Transformation des données en objet simple feature (sf)
CAxPA24_sf <- st_as_sf(CAxPA24, crs = 2154) 

1.4.1 Export des données créées au format geopackage (.gpkg)

st_write(obj=CAxPA24_sf,"Output/CAxPA24.gpkg",
         delete_layer = TRUE)
Deleting layer `CAxPA24' using driver `GPKG'
Writing layer `CAxPA24' to data source `Output/CAxPA24.gpkg' using driver `GPKG'
Writing 600 features with 16 fields and geometry type Polygon.
st_write(obj=ocsge24, 
         dsn="Output/ocsge24.gpkg",
         delete_layer = TRUE)
Deleting layer `ocsge24' using driver `GPKG'
Writing layer `ocsge24' to data source `Output/ocsge24.gpkg' using driver `GPKG'
Writing 537120 features with 8 fields and geometry type Polygon.

1.5 Combinaisation avec les données OCSGE

inter <- st_intersection(CAxPA24_sf, ocsge24)
Warning: attribute variables are assumed to be spatially constant throughout
all geometries
inter <- st_cast(inter, "MULTIPOLYGON")

# Renommer les variables
names(inter) <- c("dep_code", "dep_nom", "CP", "num_PA", "etat_PA", "date_autorisation",
                  "PA_superficie_terrain", "CA_num", "CA_id", "CA_id_full",
                  "prefixe", "section", "numero", "CA_contenance", "created", "updated",
                  "ocsge_id","code_cs", "code_us", "millesime", "source", 
                  "ossature" ,"id_origine", "code_or", "geometry")

# On réorganise l'ordre des variables
CAxPAxOCS24_all <- inter %>%
  relocate(num_PA, .before = everything())%>%
  select(num_PA, etat_PA, dep_code,dep_nom,CP,date_autorisation,PA_superficie_terrain,
         CA_contenance,ocsge_id,code_cs,code_us,geometry)

1.5.1 Export des données créées au format geopackage (.gpkg)

st_write(obj=CAxPAxOCS24_all,
         dsn="Output/CAxPAxOCS24_all.gpkg",
         delete_layer = TRUE)
Deleting layer `CAxPAxOCS24_all' using driver `GPKG'
Writing layer `CAxPAxOCS24_all' to data source 
  `Output/CAxPAxOCS24_all.gpkg' using driver `GPKG'
Writing 2038 features with 11 fields and geometry type Multi Polygon.

1.6 On sélectionne les observations situées sur des couvertures de sols non bâtis

Code de couverture des sols OCSGE : “CS1.1.1.1” = “Zones baties”, “CS1.1.1.2” = “Zones non baties”, “CS1.1.2.1” = “Zones à matériaux minéraux”, “CS1.1.2.2” = “Zones à autres matériaux composites”, “CS1.2.1” = “Sols nus”, “CS1.2.2” = “Surfaces d’eau”, “CS1.2.3” = “Névés et glaciers”, “CS2.1.1.1” = “Peuplement de feuillus”, “CS2.1.1.2” = “Peuplement de conifères”, “CS2.1.1.3” = “Peuplement mixtes”, “CS2.1.2” = “Formations arbustives et sous-arbrisseaux”, “CS2.1.3” = “Autres formations ligneuses”, “CS2.2.1” = “Formations herbacées”, “CS2.2.2” = “Autres formations non ligneuses”)

CAxPAxOCS24_NAT <- CAxPAxOCS24_all %>%
  filter(code_cs %in% c("CS1.2.1", "CS1.2.2", "CS1.2.3", 
                     "CS2.1.1.1", "CS2.1.1.2", "CS2.1.1.3",
                     "CS2.1.2", "CS2.2.1", "CS2.2.2"))

1.6.1 Export des données créées au format geopackage (.gpkg)

st_write(obj=CAxPAxOCS24_NAT, # on exporte au format .gpkg
         dsn="Output/CAxPAxOCS24_NAT.gpkg",
         delete_layer = TRUE)
Deleting layer `CAxPAxOCS24_NAT' using driver `GPKG'
Writing layer `CAxPAxOCS24_NAT' to data source 
  `Output/CAxPAxOCS24_NAT.gpkg' using driver `GPKG'
Writing 1318 features with 11 fields and geometry type Multi Polygon.

2. Analyses descriptives

2.1 Analyses des données OCSGE

2.1.1 Calcul de l’aire totale de la couche OCSGE

# Calcul de l'aire des polygones de chauqes observation en m^2
ocsge24$surface <- st_area(ocsge24)

# Calcul de l'aire totale de la couche OCS-GE
ocsge24_all_surface <- sum(ocsge24$surface, na.rm = TRUE)

print(ocsge24_all_surface)
9210844764 [m^2]

2.1.2 On créer un subset de données

La puissance de calcul de mon PC ne permet pas de procéder à la suite des analyses sur l’ensemble des données. On selectionne les premières 2000 observations parmi les 537120.

ocsge24_subset <- ocsge24[1:2000, ]

2.1.3 Calcul de l’aire totale par type d’occupation du sol (CODE_CS)

# Calcul de l'aire en m^2
ocsge24_group_surface_subset <- ocsge24_subset %>%
  group_by(CODE_CS) %>%
  summarize(grouped_surface = sum(surface, na.rm = TRUE))

# Calcul de l'aire en hectares (ha)
ocsge24_group_surface_subset$grouped_surface_ha <- ocsge24_group_surface_subset$grouped_surface / 10000
print(ocsge24_group_surface_subset$grouped_surface_ha)
Units: [m^2]
[1]   39.935821   50.467742    3.202591   56.394978  309.670136    4.591906
[7]   18.609138   45.767146 1183.663465
print(ocsge24_group_surface_subset)
Simple feature collection with 9 features and 3 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 463417.3 ymin: 6402358 xmax: 573488.7 ymax: 6504306
Projected CRS: RGF93 v1 / Lambert-93
# A tibble: 9 × 4
  CODE_CS   grouped_surface                          geometry grouped_surface_ha
* <chr>               [m^2]                <MULTIPOLYGON [m]>              [m^2]
1 CS1.1.1.1         399358. (((496388.4 6403991, 496418.7 64…              39.9 
2 CS1.1.1.2         504677. (((501474.6 6447899, 501480.2 64…              50.5 
3 CS1.1.2.1          32026. (((541146 6490065, 541146.2 6490…               3.20
4 CS1.2.2           563950. (((541883.2 6489672, 541880.2 64…              56.4 
5 CS2.1.1.1        3096701. (((542077.2 6489687, 542076.3 64…             310.  
6 CS2.1.1.2          45919. (((546673.7 6490334, 546674 6490…               4.59
7 CS2.1.1.3         186091. (((542939.5 6490215, 542940.4 64…              18.6 
8 CS2.1.2           457671. (((546732.2 6489687, 546739 6489…              45.8 
9 CS2.2.1         11836635. (((540675.8 6489539, 540675.6 64…            1184.  

2.1.4 Représentations graphiques par type de couverture du sol

2.1.4.1 Aire totale par type de couverture du sol - bargraph

Warning: The `scale_name` argument of `continuous_scale()` is deprecated as of ggplot2
3.5.0.

2.1.4.2 Représentation en pourcentage de l’aire totale - bargraph

[1] "numeric"

2.1.4.3 Représentation en pourcentage de l’aire totale - Pie chart

2.1.4.3 Représentation des zones “naturelles” par rapport aux autres surfaces OCSGE

2.1.5 Représentation graphique par type d’usage des sols - CODE_US

2.1.5.1 Aire totale par type d’usage des sols

2.1.5.2 Représentation en pourcentage de l’aire totale par type d’usage des sols - bargraph

2.1.5.3 Représentation en pourcentage de l’aire totale par type d’usage des sols - Pie chart

2.2 Analyses des données Sitadel

2.2.1 Représentation graphiques

2.2.1.1 Évolution du nombre de permis d’aménager par Année

Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.

2.2.1.2 Évolution de l’aire cumulée des permis d’aménager par année

2.2.1.2 Évolution de l’aire médiane des permis d’aménager par année

Warning: The dot-dot notation (`..y..`) was deprecated in ggplot2 3.4.0.
ℹ Please use `after_stat(y)` instead.

2.3 Analyses des interactions entre OCSGE et Sitadel

2.3.1 Représentations graphiques de l’évolution du nombre de permis d’aménager en fonction du type de couverture du sol

`summarise()` has grouped output by 'annee_autorisation'. You can override
using the `.groups` argument.
Simple feature collection with 85 features and 3 fields
Geometry type: GEOMETRY
Dimension:     XY
Bounding box:  xmin: 467605.2 ymin: 6400302 xmax: 574449.9 ymax: 6509718
Projected CRS: RGF93 v1 / Lambert-93
# A tibble: 85 × 4
   annee_autorisation code_cs   nombre_unique_PA                        geometry
                <dbl> <chr>                <int>              <MULTIPOLYGON [m]>
 1               2013 CS1.1.1.1                4 (((522542 6412107, 522541.7 64…
 2               2013 CS1.1.1.2                4 (((521930.9 6404529, 521925.7 …
 3               2013 CS1.1.2.1                1 (((522504.8 6412135, 522505 64…
 4               2013 CS1.2.2                  1 (((530328.4 6459331, 530347.2 …
 5               2013 CS2.1.1.1                3 (((522767.6 6404341, 522773.8 …
 6               2013 CS2.2.1                  5 (((519329.3 6402095, 519300.5 …
 7               2014 CS1.1.1.1                7 (((520978.3 6417660, 520978.6 …
 8               2014 CS1.1.1.2                5 (((506189.4 6421251, 506194.6 …
 9               2014 CS1.1.2.1                5 (((503883.3 6419618, 503883.6 …
10               2014 CS1.2.2                  1 (((564041.5 6420064, 564032.1 …
# ℹ 75 more rows

Warning: The `labeller` API has been updated. Labellers taking `variable` and `value`
arguments are now deprecated.
ℹ See labellers documentation.
Warning: The `labeller` API has been updated. Labellers taking `variable` and `value`
arguments are now deprecated.
ℹ See labellers documentation.

2.3.2 Représentations graphiques de l’évolution de l’aire des permis d’aménager en fonction du type de couverture du sol

`summarise()` has grouped output by 'annee_autorisation'. You can override
using the `.groups` argument.
Simple feature collection with 85 features and 3 fields
Geometry type: GEOMETRY
Dimension:     XY
Bounding box:  xmin: 467605.2 ymin: 6400302 xmax: 574449.9 ymax: 6509718
Projected CRS: RGF93 v1 / Lambert-93
# A tibble: 85 × 4
   annee_autorisation code_cs   total_surface                           geometry
                <dbl> <chr>             <dbl>                 <MULTIPOLYGON [m]>
 1               2013 CS1.1.1.1        233023 (((522542 6412107, 522541.7 64121…
 2               2013 CS1.1.1.2        317151 (((521930.9 6404529, 521925.7 640…
 3               2013 CS1.1.2.1         70816 (((522504.8 6412135, 522505 64121…
 4               2013 CS1.2.2           47602 (((530328.4 6459331, 530347.2 645…
 5               2013 CS2.1.1.1        454316 (((522767.6 6404341, 522773.8 640…
 6               2013 CS2.2.1          418466 (((519329.3 6402095, 519300.5 640…
 7               2014 CS1.1.1.1        722443 (((520978.3 6417660, 520978.6 641…
 8               2014 CS1.1.1.2        495854 (((506189.4 6421251, 506194.6 642…
 9               2014 CS1.1.2.1        604407 (((503883.3 6419618, 503883.6 641…
10               2014 CS1.2.2          115103 (((564041.5 6420064, 564032.1 642…
# ℹ 75 more rows

Warning: The `labeller` API has been updated. Labellers taking `variable` and `value`
arguments are now deprecated.
ℹ See labellers documentation.

2.3.4 Représentations graphiques de l’évolution du nombre de permis d’aménager en fonction du type d’usage des sols

Simple feature collection with 89 features and 3 fields
Geometry type: GEOMETRY
Dimension:     XY
Bounding box:  xmin: 467605.2 ymin: 6400302 xmax: 574449.9 ymax: 6509718
Projected CRS: RGF93 v1 / Lambert-93
# A tibble: 89 × 4
   annee_autorisation code_us nombre_unique_PA                          geometry
                <dbl> <chr>              <int>                <MULTIPOLYGON [m]>
 1               2013 US1.1                  3 (((519360.2 6402151, 519329.3 64…
 2               2013 US1.2                  1 (((522738.4 6404350, 522767.6 64…
 3               2013 US3                    3 (((522515 6412098, 522512.2 6412…
 4               2013 US4.1.1                3 (((521930.9 6404529, 521925.7 64…
 5               2013 US5                    2 (((494117.5 6417308, 494116.6 64…
 6               2013 US6.3                  1 (((530328.4 6459331, 530347.2 64…
 7               2014 US1.1                  7 (((503852.8 6419611, 503852.8 64…
 8               2014 US1.2                  5 (((531362.6 6414167, 531294.3 64…
 9               2014 US1.3                  1 (((503844.5 6419652, 503848 6419…
10               2014 US3                    4 (((520978.3 6417660, 520978.6 64…
# ℹ 79 more rows

Warning: The `labeller` API has been updated. Labellers taking `variable` and `value`
arguments are now deprecated.
ℹ See labellers documentation.

2.3.5 Représentations graphiques de l’évolution de l’aire des permis d’aménager en fonction du type d’usage des sols

`summarise()` has grouped output by 'annee_autorisation'. You can override
using the `.groups` argument.
Simple feature collection with 89 features and 3 fields
Geometry type: GEOMETRY
Dimension:     XY
Bounding box:  xmin: 467605.2 ymin: 6400302 xmax: 574449.9 ymax: 6509718
Projected CRS: RGF93 v1 / Lambert-93
# A tibble: 89 × 4
   annee_autorisation code_us total_surface                             geometry
                <dbl> <chr>           <dbl>                   <MULTIPOLYGON [m]>
 1               2013 US1.1          275006 (((519360.2 6402151, 519329.3 64020…
 2               2013 US1.2          283264 (((522738.4 6404350, 522767.6 64043…
 3               2013 US3            678002 (((522515 6412098, 522512.2 6412116…
 4               2013 US4.1.1        222534 (((521930.9 6404529, 521925.7 64045…
 5               2013 US5             34966 (((494117.5 6417308, 494116.6 64173…
 6               2013 US6.3           47602 (((530328.4 6459331, 530347.2 64593…
 7               2014 US1.1          944311 (((503852.8 6419611, 503852.8 64196…
 8               2014 US1.2         1104584 (((531362.6 6414167, 531294.3 64142…
 9               2014 US1.3          149282 (((503844.5 6419652, 503848 6419653…
10               2014 US3           1360619 (((520978.3 6417660, 520978.6 64176…
# ℹ 79 more rows

Warning: The `labeller` API has been updated. Labellers taking `variable` and `value`
arguments are now deprecated.
ℹ See labellers documentation.

2.4 Analyse des interactions entre Sitadel x couverture x usage des sols

`summarise()` has grouped output by 'code_cs'. You can override using the
`.groups` argument.
Simple feature collection with 45 features and 3 fields
Geometry type: GEOMETRY
Dimension:     XY
Bounding box:  xmin: 467605.2 ymin: 6400302 xmax: 574449.9 ymax: 6509718
Projected CRS: RGF93 v1 / Lambert-93
# A tibble: 45 × 4
   code_cs   code_us count_permits                                      geometry
   <chr>     <chr>           <int>                            <MULTIPOLYGON [m]>
 1 CS1.1.1.1 US1.1              33 (((524579.2 6419163, 524565.1 6419178, 52456…
 2 CS1.1.1.1 US2                 9 (((519666.7 6456209, 519666.7 6456209, 51966…
 3 CS1.1.1.1 US3               117 (((490376.6 6407234, 490382.6 6407225, 49037…
 4 CS1.1.1.1 US4.3               3 (((503857.8 6419633, 503854.9 6419639, 50385…
 5 CS1.1.1.1 US5               149 (((510518.5 6406163, 510523.7 6406164, 51052…
 6 CS1.1.1.1 US6.2               1 (((559376.4 6422255, 559376.4 6422255, 55937…
 7 CS1.1.1.2 US2                 9 (((519757.5 6456149, 519743.8 6456141, 51974…
 8 CS1.1.1.2 US3                75 (((495228.8 6411376, 495231.3 6411383, 49523…
 9 CS1.1.1.2 US4.1.1           243 (((494285.6 6401301, 494285 6401301, 494285.…
10 CS1.1.1.2 US5                 8 (((523551.2 6410060, 523546.6 6410058, 52354…
# ℹ 35 more rows

3. Question en suspens

  • Comment faire pour réaliser ces analyses à l’échelle du territoire français ?

  • Evolution du nombre de permis d’aménager par région/département au cours du temps

  • Faudra t’il mener les mêmes analyses pour les permis de construire ?

  • Périmêtre d’analyse : France métropolitaine ou avec les territoires ultramarins ?

  • Comment prendre en compte le décalage temporel entre OCSGE (fichier figé à une date donnée, 2021 ou 2017 pour la Dordogne ; il existe également un fichier différentiel 2017-2021, les années utilisées varient selon le département) ?

    • Ce problème peut toutefois conduire à une analyse intéressante de l’évolution de la couverture/usage du sol en fonction des permis d’urbanisme autorisés

    • l’utilisation des données Theia d’occupation des sols pourraient permettre de résoudre ce problème ? (car actualisation plus fréquente et mise à disposition des différents millésimes ?)

      • pas de données sur les territoires ultramarins au format vecteur