4.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
Créer une géométrie simple de type polygone qui a la forme d’un carré de 10 unités de long avec un trou en son centre qui a la forme d’un carré de 4 unités de long.
Réponse
Définir deux matrices de coordonnées, une pour le grand et l’autre pour le petit carré. Les coordonnées exactes peuvent prendre n’importe quelles valeurs du moment que la taille de chaque carré respecte les dimensions demandées.
<- rbind(c(1,1), c(1,11), c(11,11), c(11,1), c(1,1))
matrice_carre_grand <- rbind(c(4,4),c(4,8),c(8,8),c(8,4),c(4,4)) matrice_carre_petit
Créer une liste avec ces deux matrices et créer le polygone en utilisant la fonction st_polygon()
<- st_polygon(list(matrice_carre_grand, matrice_carre_petit))
polygone polygone
POLYGON ((1 1, 1 11, 11 11, 11 1, 1 1), (4 4, 4 8, 8 8, 8 4, 4 4))
Visualiser le polygone pour confirmer votre réponse:
mapview(polygone)
Question 2
a) Créer 3 géométries simples de type ligne en utilisant les matrices de coordonnées suivantes:
<- rbind(c(1,1), c(2,2), c(3,1), c(4,2), c(5,1), c(6,2), c(7,1))
matrice_ligne1 <- rbind(c(1,5), c(3,3), c(7,5), c(3,5), c(4,4))
matrice_ligne2 <- rbind(c(1,3), c(3,7), c(7,8), c(10,10)) matrice_ligne3
Réponse
Utiliser la fonction st_lignestring()
pour créer les 3 géométries simples de type ligne.
<- st_linestring(matrice_ligne1)
ligne1 <- st_linestring(matrice_ligne2)
ligne2 <- st_linestring(matrice_ligne3) ligne3
b) Définir une couche de données vectorielles comprenant ces 3 lignes, et lui attribuer la projection Web de Mercator.
Réponse
Créer d’abord un objet sfc
, c’est-à-dire une simple feature column, en utilisant la fonction st_sfc()
:
<- st_sfc(ligne1, ligne2, ligne3) lignes
Ajouter maintenant le SCR demandé. La projection Web de Mercator possède le code EPSG 3857 (revoir le Module 3 pour trouver cette information).
<- st_sfc(ligne1, ligne2, ligne3, crs = 3857)
lignes lignes
Geometry set for 3 features
Geometry type: LINESTRING
Dimension: XY
Bounding box: xmin: 1 ymin: 1 xmax: 10 ymax: 10
Projected CRS: WGS 84 / Pseudo-Mercator
LINESTRING (1 1, 2 2, 3 1, 4 2, 5 1, 6 2, 7 1)
LINESTRING (1 5, 3 3, 7 5, 3 5, 4 4)
LINESTRING (1 3, 3 7, 7 8, 10 10)
c) Ajouter deux attributs à cette couche de données. Le premier attribut correspond à un nom de votre choix pour désigner chaque ligne, et le deuxième attribut correspond au nombre d’extrémités dans chaque ligne.
Réponse
Créer une table d’attribut en utilisant la fonction data.frame()
.
<- data.frame(
lignes_att nom = c("Zigzag", "Tourbillon", "Tordu"),
nombre = c(nrow(matrice_ligne1), nrow(matrice_ligne2), nrow(matrice_ligne3))
) lignes_att
nom nombre
1 Zigzag 7
2 Tourbillon 5
3 Tordu 4
Créer un objet sf
, c’est-à-dire un simple feature, en utilisant la fonction st_sf()
pour unir la table d’attributs des lignes à leur composante spatiale.
<- st_sf(lignes, lignes_att)
lignes_sf lignes_sf
Simple feature collection with 3 features and 2 fields
Geometry type: LINESTRING
Dimension: XY
Bounding box: xmin: 1 ymin: 1 xmax: 10 ymax: 10
Projected CRS: WGS 84 / Pseudo-Mercator
nom nombre lignes
1 Zigzag 7 LINESTRING (1 1, 2 2, 3 1, ...
2 Tourbillon 5 LINESTRING (1 5, 3 3, 7 5, ...
3 Tordu 4 LINESTRING (1 3, 3 7, 7 8, ...
d) Visualiser cette couche de données vectorielles. Assurez-vous d’avoir une légende identifiant chaque ligne par son nom.
Réponse
Utiliser la fonction mapview()
et spécifier que l’argument z
correspond à l’attribut “nom” de l’objet lignes_sf
.
mapview(lignes_sf, z="nom", layer.name = "Nom des lignes")
Question 3
Pour cette question, vous utiliserez les données vectorielles décrivant les régions administratives de la Nouvelle-Zélande. Ces données se nomment nz
et sont disponibles dans la bibliothèque spData
.
library(spData)
To access larger datasets in this package,
install the spDataLarge package with:
`install.packages('spDataLarge',
repos='https://nowosad.github.io/drat/',
type='source')`
data(nz)
a) Combien d’éléments spatiaux contient la couche nz
et de quel type de géométrie sont ces éléments ?
Réponse
Pour répondre à cette question, nous pouvons simplement repérer l’information demandée dans l’affichage général de l’objet nz
nz
Simple feature collection with 16 features and 6 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 1090000 ymin: 4749000 xmax: 2090000 ymax: 6192000
Projected CRS: NZGD2000 / New Zealand Transverse Mercator 2000
First 10 features:
Name Island Land_area Population
1 Northland North 12501 175500
2 Auckland North 4942 1657200
3 Waikato North 23900 460100
4 Bay of Plenty North 12071 299900
5 Gisborne North 8386 48500
6 Hawke's Bay North 14138 164000
7 Taranaki North 7254 118000
8 Manawatu-Wanganui North 22221 234500
9 Wellington North 8049 513900
10 West Coast South 23245 32400
Median_income Sex_ratio
1 23400 0.9425
2 29600 0.9443
3 27900 0.9521
4 26200 0.9280
5 24400 0.9350
6 26100 0.9238
7 29100 0.9569
8 25000 0.9388
9 32700 0.9336
10 26900 1.0139
geom
1 MULTIPOLYGON (((1745493 600...
2 MULTIPOLYGON (((1803822 590...
3 MULTIPOLYGON (((1860345 585...
4 MULTIPOLYGON (((2049387 583...
5 MULTIPOLYGON (((2024489 567...
6 MULTIPOLYGON (((2024489 567...
7 MULTIPOLYGON (((1740438 571...
8 MULTIPOLYGON (((1866732 566...
9 MULTIPOLYGON (((1881590 548...
10 MULTIPOLYGON (((1557042 531...
Nous pouvons y lire qu’il y a 16 éléments (features) et que la géométrie est de type multipolygone. Nous pouvons également trouver les réponses en utilisant les deux fonctions spécifiques suivantes:
nrow(nz)
[1] 16
Effectivement, nz
étant un data.frame
, nous pouvons utiliser les manipulations usuelles pour cette classe d’objet. Chaque élément dans un data.frame
occupe une rangée.
st_geometry_type(nz)
[1] MULTIPOLYGON MULTIPOLYGON MULTIPOLYGON
[4] MULTIPOLYGON MULTIPOLYGON MULTIPOLYGON
[7] MULTIPOLYGON MULTIPOLYGON MULTIPOLYGON
[10] MULTIPOLYGON MULTIPOLYGON MULTIPOLYGON
[13] MULTIPOLYGON MULTIPOLYGON MULTIPOLYGON
[16] MULTIPOLYGON
18 Levels: GEOMETRY POINT LINESTRING ... TRIANGLE
Cette commande nous confirme que la couche nz
contient bien des multipolygones.
b) Trouver le nombre d’attributs de nz
et leur nom.
Réponse
Pour trouver le nombre d’attributs, nous pouvons nous référer à l’affichage général de nz
(voir plus haut) qui nous informe que l’objet contient 6 attributs (ou champs, fields en anglais).
Nous pouvons également utiliser la fonction ncol()
qui donne le nombre de colonnes dans le data.frame
.
ncol(nz)
[1] 7
L’objet nz
contient bel et bien 7 colonnes. Cependant, la dernière colonne correspond à la géométrie de chaque élément de nz
(qui est en fait, un attribut spatial). Ainsi, le nombre d’attribut est 6.
Pour trouver le nom des attributs, nous pouvons encore s’appuyer sur le fait que nz
est un data.frame
et utiliser la fonction names()
:
names(nz)
[1] "Name" "Island" "Land_area"
[4] "Population" "Median_income" "Sex_ratio"
[7] "geom"
c) Trouver le code EPSG, le nom et l’unité de mesure de la projection utilisée.
Réponse
Ces trois informations se trouvent en utilisant les fonctions suivantes:
st_crs(nz)$epsg
[1] 2193
st_crs(nz)$Name
[1] "NZGD2000 / New Zealand Transverse Mercator 2000"
st_crs(nz)$units
[1] "m"
La projection utilisée est le New Zealand Transverse Mercator 2000. NZGD 2000 réfère au datum utilisé, appelé le New Zealand Geodetic Datum.
d) Transformer la projection de nz
pour la projection conique conforme de Lambert (LCC).
Réponse
La projection conique conforme de Lambert est donnée par le code EPSG 32198.
<- st_transform(nz, crs = 32198) nz_lcc
Vérifions que notre transformation est correcte.
st_crs(nz_lcc)$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"
e) Chaque polygone de la couche nz
correspond à une région. Visualiser la couche nz
en illustrant chaque région avec une couleur différente.
Réponse
mapview(nz, zcol = "Name", layer.name = "Régions")
f) Importer le fichier nz_capitales.cvs
contenu dans le dossier Module4_donnees
. Ce fichier donne le nom et la localisation des capitales de chaque région de la Nouvelle-Zélande. Créer une carte illustrant les frontières des régions ainsi que la position de leur capitale respective.
Réponse
Tout d’abord, vous devez importer le fichier nz_capitales.cvs
dans votre session de travail R
. Utiliser la fonction de base read.table()
afin de stocker les coordonnées des capitales dans un object de classe data.frame
.
<- read.table("Module4/Module4_donnees/nz_capitales.csv", header = TRUE, sep = ",")
nz_capitales nz_capitales
Capitales Longitude Latitude
1 Auckland 174.8 -36.85
2 Wellington 174.8 -41.29
3 Christchurch 172.6 -43.53
4 Hamilton 175.3 -37.78
5 Dunedin 170.5 -45.87
6 Palmerston North 175.6 -40.35
7 Napier 176.9 -39.48
8 Whangarei 174.3 -35.73
9 Invercargill 168.4 -46.43
10 Nelson 173.2 -41.29
11 Gisborne 178.0 -38.66
12 Blenheim 173.9 -41.52
13 Richmond 173.2 -41.33
14 Whakatane 177.0 -37.96
15 Greymouth 171.2 -42.47
16 Stratford 174.3 -39.34
Nous observons que les coordonnées sont en format longitude/latitude.
Utiliser la fonction st_as_sf()
pour transformer cette table de coordonnées en données vectorielles de type points. Puisque les coordonnées sont en format longitude/latitude, nous ne pouvons pas assigner un système de coordonnées projetées cartésien. Utilisons simplement le datum WGS 84 pour définir le SCR. Ce dernier est associé au code EPSG 4326.
<- st_as_sf(x = nz_capitales,
nz_capitales_points coords = c("Longitude", "Latitude"),
crs = 4126)
Utiliser la fonction mapview()
pour visualiser les polygones des régions et les points correspondants aux capitales de ces régions.
mapview(nz, col.regions = "blue", legend = FALSE) + mapview(nz_capitales_points)
Notez que nous n’avons pas besoin de nous assurer que les deux couches soient dans le même SCR puisque la fonction mapview()
représente par défaut toutes données spatiales dans la projection Mercator Web.