7.2 Exercices
Dans cette section, vous mettrez en pratique certains concepts vus dans la section leçon de ce module. Bien que la réponse à chaque question soit disponible, il est très important de tenter d’y répondre par vous-même!
Question 1
a) Construire un polygone de la forme d’un quadrilatère dont les sommets correspondent aux municipalités suivantes: Blanc-Sablon, Gaspé, Ivujivik et Chisasibi.
Réponse
Utiliser la fonction subset()
pour filtrer le shapefile municipalites
et isoler ces quatre villes.
<- subset(villes, (toponyme == "Blanc-Sablon") |
Selection == "Gaspé") |
(toponyme == "Ivujivik") |
(toponyme == "Chisasibi"))
(toponyme
Selection
Simple feature collection with 4 features and 1 field
Geometry type: POINT
Dimension: XY
Bounding box: xmin: -78.9 ymin: 48.83 xmax: -57.13 ymax: 62.42
Geodetic CRS: Geographic Coordinate System
toponyme geometry
1 Blanc-Sablon POINT (-57.13 51.43)
549 Gaspé POINT (-64.48 48.83)
710 Chisasibi POINT (-78.9 53.78)
718 Ivujivik POINT (-77.91 62.42)
Le symbole |
signifie et.
Combiner ces quatre villes (points) en un seul objet spatial (multipoints) en utilisant la fonction st_combine()
:
<- st_combine(Selection)
Combo_Selection Combo_Selection
Geometry set for 1 feature
Geometry type: MULTIPOINT
Dimension: XY
Bounding box: xmin: -78.9 ymin: 48.83 xmax: -57.13 ymax: 62.42
Geodetic CRS: Geographic Coordinate System
MULTIPOINT ((-57.13 51.43), (-64.48 48.83), (-7...
Transformer cet objet multipoint en polygone en utilisant la fonction st_cast()
:
<- st_cast(Combo_Selection, to = "POLYGON")
Poly_Selection Poly_Selection
Geometry set for 1 feature
Geometry type: POLYGON
Dimension: XY
Bounding box: xmin: -78.9 ymin: 48.83 xmax: -57.13 ymax: 62.42
Geodetic CRS: Geographic Coordinate System
POLYGON ((-57.13 51.43, -64.48 48.83, -78.9 53....
Confirmer votre réponse en visualisant le polygone formé :
mapview(Poly_Selection)
b) Quelle est la superficie, en km^2, de ce polygone?
Réponse
S’assurer d’abord que le polygone est représenté dans une projection métrique :
st_crs(Poly_Selection)$proj4string
[1] "+proj=longlat +ellps=GRS80 +no_defs"
+proj=longlat
atteste que la projection est en degré. Reprojeter l’objet dans le SCR NAD83 dont le EPSG est 32198 :
<- st_transform(Poly_Selection, crs = 32198)
Poly_Selection_nad83 st_crs(Poly_Selection_nad83)$proj4string
[1] "+proj=lcc +lat_0=44 +lon_0=-68.5 +lat_1=60 +lat_2=46 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs"
Les unités sont à présent en mètres.
Calculer la superficie du polygone en utilisant la fonction st_area()
et convertir les unités en \(km^2\) en utilisant la fonction set_units()
:
<- st_area(Poly_Selection_nad83)
Aire <- set_units(Aire, km2)
Aire_km2 Aire_km2
1020565 [km2]
Question 2
a) Combien de villes se trouvent dans une zone tampon de 20 km autour de la frontière séparant les régions administratives des Laurentides et de Lanaudière.
Réponse
Utiliser la fonction subset()
pour filtrer le shapefile regions
et isoler les polygones correspondants aux Laurentides et à Lanaudière.
<- st_transform(regions, crs = 32198) #utiliser une projection métrique
regions_nad <- subset(regions_nad, Rgns_Ad == "Laurentides")
Laurentides <- subset(regions_nad, Rgns_Ad == "Lanaudière") Lanaudiere
Trouver la frontière entre les deux régions en utilisant la fonction st_intersection()
:
<- st_intersection(Laurentides, Lanaudiere)
Frontiere mapview(Frontiere)
La visualisation permet de valider votre calcul.
Créer maintenant une zone tampon de 50 km autour de la frontière en utilisant la fonction st_buffer
:
<- st_buffer(Frontiere, dist = 20e3)
Frontiere_tampon mapview(Frontiere_tampon)
Utiliser à nouveau la fonction st_intersection()
pour trouver les municipalités à l’intérieur de la zone tampon. Il s’agit, en effet, de trouver l’intersection entre les shapeliles villes
et Frontiere_tampon
.
<- st_transform(villes, crs = 32198) #utiliser une projection métrique
villes_nad <- st_intersection(villes_nad, Frontiere_tampon)
Villes_Frontiere_tampon mapview(Villes_Frontiere_tampon)
Utiliser la fonction nrow()
pour trouver le nombre de villes dans la zone tampon.
nrow(Villes_Frontiere_tampon)
[1] 28
b) Calculer la taille de la population qui habite cette zone tampon.
Réponse
Utiliser la fonction merge()
pour combiner le tableau pop
listant la taille des populations municipales à l’objet Villes_Frontiere_tampon
défini plus haut.
<- merge(x = Villes_Frontiere_tampon, y = pop, by.x = "toponyme", by.y = "munnom" )
Villes_Frontiere_tampon_pop head(Villes_Frontiere_tampon_pop)
Simple feature collection with 6 features and 5 fields
Geometry type: POINT
Dimension: XY
Bounding box: xmin: -421200 ymin: 187600 xmax: -396100 ymax: 246500
Projected CRS: NAD83 / Quebec Lambert
toponyme Rgns_Ad Rgns_Ad.1 msuperf mpopul
1 Blainville Laurentides Lanaudière 55.4 60838
2 Boisbriand Laurentides Lanaudière 29.5 26899
3 Chertsey Laurentides Lanaudière 302.1 4816
4 Deux-Montagnes Laurentides Lanaudière 7.3 17998
5 Laval Laurentides Lanaudière 266.8 439754
6 Mascouche Laurentides Lanaudière 107.6 49466
geometry
1 POINT (-419531 202664)
2 POINT (-415976 194824)
3 POINT (-416660 246456)
4 POINT (-421211 187607)
5 POINT (-409628 187891)
6 POINT (-396135 208723)
Utiliser la fonction sum()
pour calculer la population totale comprise dans la zone tampon.
sum(Villes_Frontiere_tampon_pop$mpopul)
[1] 977256
Une autre façon d’obtenir le même résultat est d’utiliser la fonction aggregate()
:
<- merge(x = villes_nad, y = pop, by.x = "toponyme", by.y = "munnom" )
villes_nad_pop aggregate(villes_nad_pop["mpopul"], by = Frontiere_tampon, FUN = sum)
Simple feature collection with 1 feature and 1 field
Geometry type: POLYGON
Dimension: XY
Bounding box: xmin: -496800 ymin: 180900 xmax: -386800 ymax: 459700
Projected CRS: NAD83 / Quebec Lambert
mpopul geometry
10 977256 POLYGON ((-489069 423212, -...
Question 3
Trouver les régions administratives traversées par la ligne reliant la ville de Sherbrooke à celle de Fermont.
Réponse
Utiliser la fonction subset()
pour isoler les points du shapefile villes_nad
correspondants aux villes de Sherbrooke et de Fermont.
<- subset(villes_nad, (toponyme == "Sherbrooke") | (toponyme == "Fermont"))
Sherb_Fermont
mapview(Sherb_Fermont)
Utiliser la fonction st_combine()
pour combiner ces deux points en une seule géométrie multipoint.
<- st_combine(Sherb_Fermont) Sherb_Fermont_points
Utiliser la fonction st_cast()
pour transformer la géométrie multipoint en ligne.
<- st_cast(Sherb_Fermont_points, to = "LINESTRING")
Sherb_Fermont_ligne
mapview(Sherb_Fermont_ligne)
Utiliser maintenant la fonction st_crosses
pour déterminer les régions administratives traversées par cette ligne.
st_crosses(regions_nad, Sherb_Fermont_ligne, sparse = FALSE ),] regions_nad[
Simple feature collection with 6 features and 1 field
Attribute-geometry relationship: aggregate (1)
Geometry type: GEOMETRY
Dimension: XY
Bounding box: xmin: -434800 ymin: 117900 xmax: 787400 ymax: 1229000
Projected CRS: NAD83 / Quebec Lambert
Rgns_Ad
3 Capitale-Nationale
4 Centre-du-Québec
5 Chaudière-Appalaches
6 Côte-Nord
7 Estrie
17 Saguenay - Lac-Saint-Jean
geometry
3 POLYGON ((-265892 445785, -...
4 POLYGON ((-274244 292963, -...
5 POLYGON ((-127822 380938, -...
6 MULTIPOLYGON (((69033 12183...
7 POLYGON ((-230167 207127, -...
17 POLYGON ((-265892 445785, -...
Utiliser la fonction mapview()
pour valider visuellement votre réponse.
<- regions_nad[st_crosses(regions_nad, Sherb_Fermont_ligne, sparse = FALSE ),]
regions_traversees
mapview(regions_traversees) + mapview(Sherb_Fermont_ligne)
Question 4
La problématique résolue à la fin de la leçon, nous a permis de déterminer que 4 parcs de la SÉPAQ se trouvent dans un rayon de 70 km de la municipalité de Saint-Jean-sur-Richelieu. Quelle est la superficie totale couverte par ces parcs à l’intérieur de ce rayon ?
Réponse
À partir de l’objet spatial top10_villes_buffer
créé plus tôt, isoler la zone tampon autour de la municipalité de Saint-Jean-sur-Richelieu en utilisant la fonction subset()
.
<- subset(top10_villes_buffer, toponyme == "Saint-Jean-sur-Richelieu") SJSR_tampon
Utiliser la fonction st_intersection
pour trouver les parcs du shapefile parcs_nationaux_lcc
qui intersectent cette zone tampon.
<- st_intersection(parcs_nationaux_lcc, SJSR_tampon)
Parcs_SJSR_tampon
mapview(Parcs_SJSR_tampon) + mapview(SJSR_tampon, col.regions = "red", alpha.regions = 0.2)
Utiliser la fonction st_area()
pour déterminer la superficie de chacun des parcs.
<- st_area(Parcs_SJSR_tampon)
Aire_Parcs_SJSR_tampon Aire_Parcs_SJSR_tampon
Units: [m^2]
[1] 8030419 8860076 22905154 13477000
Utiliser la fonction sum()
pour déterminer la superficie totale, puis la fonction set_units()
pour transformer les mètres carrés en hectares.
<- sum(Aire_Parcs_SJSR_tampon)
AireTot_Parcs_SJSR_tampon <- set_units(AireTot_Parcs_SJSR_tampon, ha)
AireTot_Parcs_SJSR_tampon AireTot_Parcs_SJSR_tampon
5327 [ha]