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.

Selection <- subset(villes, (toponyme == "Blanc-Sablon") | 
                      (toponyme == "Gaspé") | 
                      (toponyme == "Ivujivik") | 
                      (toponyme == "Chisasibi"))

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() :

Combo_Selection <- st_combine(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() :

Poly_Selection <- st_cast(Combo_Selection, to = "POLYGON")
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 :

Poly_Selection_nad83 <- st_transform(Poly_Selection, crs = 32198)
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() :

Aire <- st_area(Poly_Selection_nad83)
Aire_km2 <- set_units(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.

regions_nad <- st_transform(regions, crs = 32198) #utiliser une projection métrique
Laurentides <- subset(regions_nad, Rgns_Ad == "Laurentides")
Lanaudiere <- subset(regions_nad, Rgns_Ad == "Lanaudière")


Trouver la frontière entre les deux régions en utilisant la fonction st_intersection() :

Frontiere <- st_intersection(Laurentides, Lanaudiere)
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 :

Frontiere_tampon <- st_buffer(Frontiere, dist = 20e3)
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.

villes_nad <- st_transform(villes, crs = 32198) #utiliser une projection métrique
Villes_Frontiere_tampon <- st_intersection(villes_nad, 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.

Villes_Frontiere_tampon_pop <- merge(x = Villes_Frontiere_tampon, y = pop, by.x = "toponyme", by.y = "munnom" )
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() :

villes_nad_pop <- merge(x = villes_nad, y = pop, by.x = "toponyme", by.y = "munnom" )
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.

Sherb_Fermont <- subset(villes_nad, (toponyme == "Sherbrooke") | (toponyme == "Fermont"))

mapview(Sherb_Fermont) 


Utiliser la fonction st_combine() pour combiner ces deux points en une seule géométrie multipoint.

Sherb_Fermont_points <- st_combine(Sherb_Fermont)


Utiliser la fonction st_cast() pour transformer la géométrie multipoint en ligne.

Sherb_Fermont_ligne <- st_cast(Sherb_Fermont_points, to = "LINESTRING")

mapview(Sherb_Fermont_ligne)


Utiliser maintenant la fonction st_crosses pour déterminer les régions administratives traversées par cette ligne.

regions_nad[st_crosses(regions_nad, Sherb_Fermont_ligne, sparse = FALSE ),]
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_traversees <- regions_nad[st_crosses(regions_nad, Sherb_Fermont_ligne, sparse = FALSE ),]

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().

SJSR_tampon <- subset(top10_villes_buffer, toponyme == "Saint-Jean-sur-Richelieu")


Utiliser la fonction st_intersection pour trouver les parcs du shapefile parcs_nationaux_lcc qui intersectent cette zone tampon.

Parcs_SJSR_tampon <- st_intersection(parcs_nationaux_lcc, 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.

Aire_Parcs_SJSR_tampon <- st_area(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.

AireTot_Parcs_SJSR_tampon <- sum(Aire_Parcs_SJSR_tampon)
AireTot_Parcs_SJSR_tampon <- set_units(AireTot_Parcs_SJSR_tampon, ha)
AireTot_Parcs_SJSR_tampon
5327 [ha]