Application n°2 : Matrices de distances et accessibilité
Author
Bamba Vakaramoko (Univ. Abidjan) & Claude Grasland (Univ. Paris Cité)
Nous proposons ici de montrer pas à pas les étapes d’analyse d’une matrice d’accessibilité. L’exemple porte sur la côte d’Ivoire (cf. cours) mais peut être appliqué ensuite à tous les autres pays de l’espace d’étude
A. EXEMPLE DE COURS
Nous allons charger un fonds de carte des unités administratives de niveau 1 issu de gadm et enrichi par une variable de population ainsi que le nom et les coordonnées des chefs-lieux.
1. Préparation des données
1.1 Fonds de carte
On charge un fichier sf (spatial features) contenant pour chaque unité spatiale les variables suivantes :
Si l’on ne dispose pas des données sur les chef-lieux, on peut calculer le centre géométrique des polygones mais avec le risque de tomber sur un point non significatif.
map_ctr<-st_centroid(map)
Il est préférable de choisir des points représentatifs en se servant des coordonnées du chef-lieu
Le calcul des distances à vol d’oiseau (à la surface de la Terre) s’effectue très facilement à l’aide de la fonction st_distance() du package sf. Il faut juste faire attention à bientransformer le tableau obtenu en matrice avec la fonction class() puis à rajouter les noms de lignes et de colonnes.
dist_eu<-as.matrix(st_distance(map_ctr))/1000class(dist_eu)<-"matrix"row.names(dist_eu)<-map_ctr$nomcolnames(dist_eu)<-substr(map_ctr$code,4,5)kable(dist_eu, digits=0, caption="Distance à vol d'oiseau ")
Distance à vol d’oiseau
Abidjan
0
300
168
607
233
166
40
453
320
493
287
415
215
331
Bas-Sassandra
300
0
415
537
172
303
262
310
237
536
373
357
276
562
Comoé
168
415
0
543
280
134
186
453
327
383
202
376
195
163
Denguélé
607
537
543
0
414
446
583
234
317
212
342
197
392
548
Gôh-Djiboua
233
172
280
414
0
150
197
225
99
372
201
218
107
408
Lacs
166
303
134
446
150
0
153
324
195
328
122
261
64
260
Lagunes
40
262
186
583
197
153
0
420
288
481
275
388
192
349
Montagnes
453
310
453
234
225
324
420
0
134
311
277
115
261
528
Sassandra-Marahoué
320
237
327
317
99
195
288
134
0
302
180
123
132
423
Savanes
493
536
383
212
372
328
481
311
302
0
206
202
298
349
Vallée du Bandama
287
373
202
342
201
122
275
277
180
206
0
181
102
250
Woroba
415
357
376
197
218
261
388
115
123
202
181
0
202
426
Yamoussoukro
215
276
195
392
107
64
192
261
132
298
102
202
0
304
Zanzan
331
562
163
548
408
260
349
528
423
349
250
426
304
0
3. Calcul de la route la plus rapide avec osrmTable()
La fonction demande les coordonnées de latitue et longitude des lieux pour lesquels on veut calculer les distances routières. On peut les fournir via un tableau (data.frame) ou via un objet de type spatial feature (sf) à condition que ce dernier soit en projection ESPG 4326 (c’est-à-dire non projeté).
On peut alors effectuer le calcul de la matrice de distance routière soit en temps (“duration”), soit en kilomètre (“distance”) soit les deux à la fois (solution la plus simple). On récupère une liste qui comporte les deux matrices de distance ainsi que les coordonnées d’origine et de destination des lieux entr lesquels on a calculé les distances. Les temps routiers sont en minutes et les distances routières en mètres.
On procède ensuite à l’extraction des résultats sous la forme de matrices que l’on peut exprimer dans une autre unité de mesure (par exemple convertir les mètres en kilomètres). On en profite pour les symétriser car il peut arriver que la distance soit légèrement plus grande dans une des deux directions
3.1 Distance routière en km
dist_km <-as.matrix(dist$distances)/1000dist_km<-(dist_km+t(dist_km))/2row.names(dist_km)<-map_ctr$nomcolnames(dist_km)<-map_ctr$codekable(dist_km, caption="Distance routière (en km)", digits=0)
Distance routière (en km)
AB
BA
CM
DE
GD
LA
LN
MN
SM
SV
VB
WB
YM
ZA
Abidjan
0
336
205
795
272
236
49
564
378
563
347
502
234
398
Bas-Sassandra
336
0
522
666
231
391
288
404
266
690
474
394
363
716
Comoé
205
522
0
738
324
162
235
571
385
506
291
510
242
196
Denguélé
795
666
738
0
536
641
778
264
450
233
454
244
561
753
Gôh-Djiboua
272
231
324
536
0
163
238
275
137
462
245
264
135
517
Lacs
236
391
162
641
163
0
220
410
224
410
193
349
81
356
Lagunes
49
288
235
778
238
220
0
548
361
547
331
486
218
428
Montagnes
564
404
571
264
275
410
548
0
188
497
433
136
330
765
Sassandra-Marahoué
378
266
385
450
137
224
361
188
0
463
247
129
144
579
Savanes
563
690
506
233
462
410
547
497
463
0
223
294
330
521
Vallée du Bandama
347
474
291
454
245
193
331
433
247
223
0
197
113
400
Woroba
502
394
510
244
264
349
486
136
129
294
197
0
269
591
Yamoussoukro
234
363
242
561
135
81
218
330
144
330
113
269
0
435
Zanzan
398
716
196
753
517
356
428
765
579
521
400
591
435
0
3.2 Distance routière en temps
dist_mn <-as.matrix(dist$durations)dist_mn<-(dist_mn+t(dist_mn))/2row.names(dist_mn)<-map_ctr$nomcolnames(dist_mn)<-map_ctr$codekable(dist_mn, caption="Temps routier (en minutes)", digits=0)
Temps routier (en minutes)
AB
BA
CM
DE
GD
LA
LN
MN
SM
SV
VB
WB
YM
ZA
Abidjan
0
317
194
632
237
177
51
445
286
419
256
400
168
381
Bas-Sassandra
317
0
486
612
210
358
268
373
243
588
425
360
339
673
Comoé
194
486
0
672
311
160
221
504
345
459
297
460
227
191
Denguélé
632
612
672
0
509
535
640
246
402
216
402
302
467
749
Gôh-Djiboua
237
210
311
509
0
155
240
269
140
384
222
257
135
498
Lacs
177
358
160
535
155
0
184
348
189
322
159
303
71
347
Lagunes
51
268
221
640
240
184
0
453
293
426
264
408
175
408
Montagnes
445
373
504
246
269
348
453
0
163
462
361
194
280
691
Sassandra-Marahoué
286
243
345
402
140
189
293
163
0
364
202
121
120
532
Savanes
419
588
459
216
384
322
426
462
364
0
189
357
253
536
Vallée du Bandama
256
425
297
402
222
159
264
361
202
189
0
252
91
410
Woroba
400
360
460
302
257
303
408
194
121
357
252
0
235
635
Yamoussoukro
168
339
227
467
135
71
175
280
120
253
91
235
0
414
Zanzan
381
673
191
749
498
347
408
691
532
536
410
635
414
0
4. Indices d’accessibilité
On peut résumer chacune de nos trois matrices à l’aide d’indices d’accessibilité.
4.1 Accessibilité moyenne
dist_eu_mean <-apply(dist_eu,1,mean)dist_km_mean <-apply(dist_km, 1,mean)dist_mn_mean <-apply(dist_mn, 1,mean)tab<-data.frame(dist_eu_mean, dist_km_mean,dist_mn_mean)kable(tab, caption ="Accessibilité moyenne des chefs-lieux ",col.names =c("Km à vol d'oiseau", "Km par la route", "Temps par la route"),digits=0)
Accessibilité moyenne des chefs-lieux
Km à vol d’oiseau
Km par la route
Temps par la route
Abidjan
288
349
283
Bas-Sassandra
331
410
375
Comoé
273
349
323
Denguélé
384
508
456
Gôh-Djiboua
220
271
255
Lacs
208
274
236
Lagunes
272
338
288
Montagnes
289
385
342
Sassandra-Marahoué
220
282
243
Savanes
320
410
355
Vallée du Bandama
214
282
252
Woroba
247
312
306
Yamoussoukro
196
247
212
Zanzan
350
475
462
4.2 Eloignement maximal
dist_eu_max <-apply(dist_eu,1,max)dist_km_max <-apply(dist_km, 1,max)dist_mn_max <-apply(dist_mn, 1,max)tab<-data.frame(dist_eu_max, dist_km_max,dist_mn_max)kable(tab, caption ="Eloignement maximal ",col.names =c("Km à vol d'oiseau", "Km par la route", "Temps par la route"),digits=0)
Eloignement maximal
Km à vol d’oiseau
Km par la route
Temps par la route
Abidjan
607
795
632
Bas-Sassandra
562
716
673
Comoé
543
738
672
Denguélé
607
795
749
Gôh-Djiboua
414
536
509
Lacs
446
641
535
Lagunes
583
778
640
Montagnes
528
765
691
Sassandra-Marahoué
423
579
532
Savanes
536
690
588
Vallée du Bandama
373
474
425
Woroba
426
591
635
Yamoussoukro
392
561
467
Zanzan
562
765
749
5. Indices de performance
Les matrices (quand elles ne sont pas trop grandes) sont des objets assez pratiques pour effectuer des calculs dans R et offrent des possibilités différentes de celles des data.frame. On peut par exemple diviser nos deux matrices l’une par l’autre afin de calculer la vitesse moyenne de circulation entre deux chefs-lieux :
5.1 Indice de sinuosité
ind1<-dist_km/dist_eudiag(ind1)<-NAmoyenne<-apply(ind1,2,mean,na.rm=T)ind1<-rbind(ind1,moyenne)kable(ind1, digits=2, caption ="Indice de sinuosité ")
Indice de sinuosité
AB
BA
CM
DE
GD
LA
LN
MN
SM
SV
VB
WB
YM
ZA
Abidjan
NA
1.12
1.22
1.31
1.17
1.42
1.24
1.24
1.18
1.14
1.21
1.21
1.09
1.21
Bas-Sassandra
1.12
NA
1.26
1.24
1.34
1.29
1.10
1.30
1.12
1.29
1.27
1.10
1.32
1.27
Comoé
1.22
1.26
NA
1.36
1.15
1.21
1.27
1.26
1.18
1.32
1.44
1.36
1.24
1.20
Denguélé
1.31
1.24
1.36
NA
1.29
1.44
1.34
1.13
1.42
1.10
1.33
1.24
1.43
1.37
Gôh-Djiboua
1.17
1.34
1.15
1.29
NA
1.09
1.21
1.22
1.38
1.24
1.22
1.21
1.26
1.27
Lacs
1.42
1.29
1.21
1.44
1.09
NA
1.44
1.26
1.15
1.25
1.58
1.33
1.27
1.37
Lagunes
1.24
1.10
1.27
1.34
1.21
1.44
NA
1.30
1.26
1.14
1.20
1.25
1.14
1.23
Montagnes
1.24
1.30
1.26
1.13
1.22
1.26
1.30
NA
1.40
1.60
1.56
1.19
1.27
1.45
Sassandra-Marahoué
1.18
1.12
1.18
1.42
1.38
1.15
1.26
1.40
NA
1.54
1.37
1.05
1.09
1.37
Savanes
1.14
1.29
1.32
1.10
1.24
1.25
1.14
1.60
1.54
NA
1.08
1.46
1.11
1.49
Vallée du Bandama
1.21
1.27
1.44
1.33
1.22
1.58
1.20
1.56
1.37
1.08
NA
1.09
1.11
1.60
Woroba
1.21
1.10
1.36
1.24
1.21
1.33
1.25
1.19
1.05
1.46
1.09
NA
1.33
1.39
Yamoussoukro
1.09
1.32
1.24
1.43
1.26
1.27
1.14
1.27
1.09
1.11
1.11
1.33
NA
1.43
Zanzan
1.21
1.27
1.20
1.37
1.27
1.37
1.23
1.45
1.37
1.49
1.60
1.39
1.43
NA
moyenne
1.21
1.23
1.27
1.31
1.23
1.32
1.24
1.32
1.27
1.29
1.31
1.25
1.24
1.36
5.2 Indice de vitesse sur route
dist_ho <- dist_mn /60ind2 <-dist_km / dist_hodiag(ind2)<-NAmoyenne<-apply(ind2,2,mean,na.rm=T)ind2<-rbind(ind2,moyenne)kable(ind2, caption ="Indice de vitesse sur route (en km/h)", digits =1)
Indice de vitesse sur route (en km/h)
AB
BA
CM
DE
GD
LA
LN
MN
SM
SV
VB
WB
YM
ZA
Abidjan
NA
63.8
63.4
75.4
69.0
80.0
57.6
76.0
79.2
80.7
81.2
75.3
83.9
62.8
Bas-Sassandra
63.8
NA
64.4
65.3
65.9
65.5
64.6
65.1
65.8
70.5
66.9
65.5
64.3
63.8
Comoé
63.4
64.4
NA
65.8
62.4
60.8
63.8
67.9
66.9
66.2
58.7
66.5
63.9
61.4
Denguélé
75.4
65.3
65.8
NA
63.3
71.9
73.0
64.4
67.1
64.6
67.8
48.4
72.1
60.3
Gôh-Djiboua
69.0
65.9
62.4
63.3
NA
63.0
59.4
61.2
58.8
72.1
66.4
61.6
59.8
62.3
Lacs
80.0
65.5
60.8
71.9
63.0
NA
71.5
70.7
71.1
76.4
72.8
69.0
68.7
61.5
Lagunes
57.6
64.6
63.8
73.0
59.4
71.5
NA
72.6
73.9
77.0
75.2
71.5
74.8
63.0
Montagnes
76.0
65.1
67.9
64.4
61.2
70.7
72.6
NA
69.3
64.6
72.0
42.2
70.9
66.4
Sassandra-Marahoué
79.2
65.8
66.9
67.1
58.8
71.1
73.9
69.3
NA
76.3
73.4
63.8
71.7
65.2
Savanes
80.7
70.5
66.2
64.6
72.1
76.4
77.0
64.6
76.3
NA
70.8
49.5
78.1
58.4
Vallée du Bandama
81.2
66.9
58.7
67.8
66.4
72.8
75.2
72.0
73.4
70.8
NA
46.9
74.9
58.5
Woroba
75.3
65.5
66.5
48.4
61.6
69.0
71.5
42.2
63.8
49.5
46.9
NA
68.7
55.9
Yamoussoukro
83.9
64.3
63.9
72.1
59.8
68.7
74.8
70.9
71.7
78.1
74.9
68.7
NA
63.1
Zanzan
62.8
63.8
61.4
60.3
62.3
61.5
63.0
66.4
65.2
58.4
58.5
55.9
63.1
NA
moyenne
72.9
65.5
64.0
66.1
63.5
69.5
69.1
66.4
69.4
69.6
68.1
60.4
70.4
61.7
5.3 Indice global de performance
ind3<-ind2/ind1diag(ind3)<-NAkable(ind3, caption ="Indice de performance globale (en km à vol d'oiseau/h)", digits =1)
Indice de performance globale (en km à vol d’oiseau/h)
AB
BA
CM
DE
GD
LA
LN
MN
SM
SV
VB
WB
YM
ZA
Abidjan
NA
56.9
51.9
57.6
58.9
56.3
46.4
61.1
67.1
70.6
67.3
62.2
76.9
52.1
Bas-Sassandra
56.9
NA
51.1
52.6
49.1
50.7
58.6
49.9
58.5
54.7
52.6
59.4
48.9
50.1
Comoé
51.9
51.1
NA
48.5
54.0
50.2
50.4
53.9
56.8
50.1
40.7
49.1
51.6
51.3
Denguélé
57.6
52.6
48.5
NA
48.9
50.1
54.7
56.9
47.2
58.8
51.0
39.2
50.5
43.9
Gôh-Djiboua
58.9
49.1
54.0
48.9
NA
58.1
49.1
50.2
42.6
58.1
54.4
50.9
47.7
49.1
Lacs
56.3
50.7
50.2
50.1
58.1
NA
49.7
55.9
61.8
61.2
46.0
51.7
54.2
45.0
Lagunes
46.4
58.6
50.4
54.7
49.1
49.7
NA
55.7
58.8
67.7
62.5
57.1
65.9
51.3
Montagnes
61.1
49.9
53.9
56.9
50.2
55.9
55.7
NA
49.4
40.4
46.1
35.5
55.9
45.8
Sassandra-Marahoué
67.1
58.5
56.8
47.2
42.6
61.8
58.8
49.4
NA
49.6
53.5
61.0
65.6
47.7
Savanes
70.6
54.7
50.1
58.8
58.1
61.2
67.7
40.4
49.6
NA
65.6
34.0
70.5
39.1
Vallée du Bandama
67.3
52.6
40.7
51.0
54.4
46.0
62.5
46.1
53.5
65.6
NA
43.2
67.2
36.6
Woroba
62.2
59.4
49.1
39.2
50.9
51.7
57.1
35.5
61.0
34.0
43.2
NA
51.6
40.3
Yamoussoukro
76.9
48.9
51.6
50.5
47.7
54.2
65.9
55.9
65.6
70.5
67.2
51.6
NA
44.1
Zanzan
52.1
50.1
51.3
43.9
49.1
45.0
51.3
45.8
47.7
39.1
36.6
40.3
44.1
NA
moyenne
60.1
53.1
50.5
50.6
51.4
52.8
55.7
50.2
54.7
54.0
51.9
48.4
56.9
45.5
6. Cartographie des résultats
6.1 Jointure
On rassemble tous les indicateurs dans un tableau et on effectue une jointure avec le fonds de carte.