-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcartes.qmd
321 lines (225 loc) · 13.7 KB
/
cartes.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
---
title: "La cartographie avec R"
author: "Xavier Timbeau"
format:
revealjs:
center: false
theme: [simple, custom.scss]
css: presentation.css
smaller: true
navigation-mode: vertical
code-fold: true
title-slide-attributes:
data-background-image: carte.png
data-background-size: contain
data-background-opacity: "0.25"
revealjs-plugins:
- _extensions/fullscreen
editor: visual
---
# Pourquoi des cartes avec R ?
on peut traiter les données spatiales et réaliser des cartes avec QGIS ou d'autres logiciels
- interface adaptée, visualisation rapide
- nombreux outils de traitements
- ressources nombreuses (tuto, doc, plugin)
- QGIS : gratuit
- Arcgis : standard, payant, puissant (relié avec des bases de données spatiales)
- Articque Cartes et Données payant, plus simple
- Excel et sans doute d'autres
# Pourquoi des cartes avec R ?
Avec R, on va pouvoir :
- manipuler les données spatiales comme d'autres données
- analyse statistique, économétrie spatiale
- utiliser des outils avancés
- visualisation, visualisation interactive
- production de sorties pour impression, pour publication interactive (HTML5)
- automatisation des process
- de la donnée au résultat
- production de cartes complexes (facet, inset)
# Les données spatiales (I) {transition="fade" transition-speed="slow"}
des données (des lignes d'observation) plus une information géographique (une géolocalisation, une forme)
- DVF : transaction, plus un point (lon/lat) ou une parcelle (un polygone localisé)
- eurostat : données par pays, région (NUTS 1 à 3), plus information géographique (contour de la région)
- OpenStreetMap : données sur le réseau de rues et route, les batiments, des lignes, des points, des polygones, des courbes, etc...
- format dit vectoriel, manipulé avec `{sf}` un package R qui permet d'accéder à la librairie GDAL/GEOS qui est un standard ouvert de manipulation de données spatiales vectorielles
- les données sont sous différents formats, souvent `.shp`, la fonction `sf::st_read` s'en occupe
# Les données spatiales (II) {transition="fade" transition-speed="slow"}
- des rasters : un grand nombre de points ou de rectangles ou de carrés de taille identique qui recouvre un territoire
- imagerie satellite (COPERNICUS)
- données de pollution, méteo, température issues de modèle et d'intrapolation à partir d'observations discrètes
- des outils spécifiques pour optimiser les traitements sur ces données et leur affichage
- format dit raster
# Le système de coordonnées {.nostrech transition="fade" transition-speed="slow"}
*La terre est plutôt sphérique, mais elle est presque plate*
coordonnées quasi-sphériques : WGS84 (World Geodetic System 1984, EPSG: 4326) tient compte de l'aplatissement de la terre, normalisé pour les GPS
{fig-align="center" width="545"}
## Les projections
*pour faire des cartes qui sont sur des plans, il faut une projection*
+-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------+
| Cylindrique | Conique | Azymutale |
+:=============================================:+:=======================================================================================================================================================================================================================================================================================================:+:=============================================:+
| {width="139"} | {width="145"} | {width="234"} |
+-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------+
| Mercator (conforme) | Lambert 93 (conique conforme) (EPSG: 2154) | Lambert équivalente azymutale |
| | | |
| Peters (équivalente) | [ETRS89](https://en.wikipedia.org/wiki/European_Terrestrial_Reference_System_1989 "European Terrestrial Reference System 1989") [Lambert Azimuthal Equal-Area projection](https://en.wikipedia.org/wiki/Lambert_azimuthal_equal-area_projection "Lambert azimuthal equal-area projection") (EPSG: 3035) | Projections gnomoniques |
| | | |
| Robinson | | |
+-----------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------+
::: aside
une projection **équivalente** conserve les aires, recommandé pour des cartes avec plusieurs pays ; **conforme** les angles (les formes), recommandé pour la topographie à de petites échelles ; aphylactique et projections uniques (autres systèmes)
:::
# Des projections dites *uniques* {.scrollable}
| Projection de Goode pseudo cylindrique interrompue, équivalente |
|:---------------------------------------------------------------:|
| {width="200"} |
| **Cossin (1570) sinusoïdale; équivalente** |
| {width="200"} |
| Projection gnomonique |
| {width="200"} |
## {fullscreen="true"}
{fig-align="center" width="329"}
## {fullscreen="true"}
{fig-align="center" width="200"}
## {fullscreen="true"}
{fig-align="center" width="216"}
# D'un système à l'autre
Dans un `sf` ou un raster géographique, le système de coordonnées est défini
- sinon, on le défini (`data |> st_as_sf(crs=3035))` sans se tromper
`st_transform(3035)` passe d'un système à la grille européenne
Le choix du système permet :
- de calculer facilement les distances ou les aires (dans une projection conforme/équivalente, localement)
- de construire une grille utile pour mixer vectoriel et raster
- modifier la représentation graphique (avec des déformations plus ou moins maîtrisées)
`crs=3035` est une norme européenne.
La carreau 200, COPERNICUS sont diffusés dans ce système
`crs=4326` est le format le plus courant depuis l'avènement des GPS (et des calculs informatisés de changement de coordonnées)
# Une première carte
```{r, fig.align='center', echo=TRUE}
library(sf)
library(tmap)
library(cartogram)
library(tidyverse)
library(ofce)
library(eurostat)
bbox <-st_bbox( c(xmin=-25,ymin=32,xmax=47,ymax=71.5), crs = 4326)
sf <- get_eurostat_geospatial(
output_class = "sf",
resolution = "60",
nuts_level = "all")
st_crs(sf) <- st_crs(4326)
pib <- ofce::sna_get("nama_10r_3gdp")
pop <- ofce::sna_get("nama_10r_3popgdp")
pib <- pib |> mutate(
geo_label = label_eurostat(geo, dic="geo", fix_duplicated = TRUE)
)
pib <- pib |>
rename(gdp = values) |>
filter(geo!="EU27_2020", geo!="EU28") |>
complete(unit, geo, time, fill=list(gdp=NA)) |>
mutate(pays=str_sub(geo,1,2),
nuts3 = str_length(str_sub(geo,3,5))==2,
nuts2 = str_length(str_sub(geo,3,5))==1,
nuts1 = str_length(str_sub(geo,3,5))==0) %>%
left_join(pop |> dplyr::select(geo, time, pop=THS), by=c("geo","time"))
pib.sf <- left_join(
sf |> dplyr::select(geo=NUTS_ID, LEVL_CODE),
pib |>
filter(time=="2017-01-01", unit=="PPS_EU27_2020_HAB")
, by="geo") |>
st_transform(3035)
mb <- mapboxapi::get_static_tiles(
location = pib.sf |> st_transform(4326),
zoom=2,
style_id = "ckjka0noe1eg819qrhuu1vigs",
username="xtimbeau")
mb2 <- 255 - (255-mb)/3
map <- tm_shape(pib.sf |> filter(LEVL_CODE==1), bbox=bbox)+
tm_fill(col="gdp", style="cont", palette="-RdBu", alpha=0.75)+
tm_shape(pib.sf |> filter(LEVL_CODE==0))+
tm_borders()
tmap_leaflet(map)
```
# Cette carte pose de nombreux problèmes {.incremental}
```{r}
map
```
1. la palette de couleur : suppose un point milieu, défini une zone "ok" une zone non "ok"
2. la surface colorée dépend de la surface des territoire.
Or, la donnée est une donnée de richesse par tête.
Donne l'impression que l'Ile de France est petite (12m) comparée à l'Irlande (5m)
# Des solutions: une autre palette est possible
```{r, echo=TRUE}
#| code-line-numbers: "2"
(tm_shape(pib.sf |> filter(LEVL_CODE==1), bbox=bbox)+
tm_fill(col="gdp", style="cont", palette="-viridis", alpha=0.75)+
tm_shape(pib.sf |> filter(LEVL_CODE==0))+
tm_borders() )|>
tmap_leaflet()
```
# Des solutions : des "dots" plutôt que des "fill"
```{r, echo=TRUE}
#| code-line-numbers: "2"
(tm_shape(pib.sf |> filter(LEVL_CODE==1), bbox=bbox)+
tm_dots(col="gdp", size="pop", style="cont", palette="-viridis", alpha=0.75)+
tm_shape(pib.sf |> filter(LEVL_CODE==0))+
tm_borders() )|>
tmap_leaflet()
```
# On peut faire un cartogramme
```{r, echo=TRUE}
library(cartogram)
cartcont <- cartogram_cont(pib.sf %>% filter(LEVL_CODE==0, !is.na(pop)),
weight="pop")
cartdorling <- cartogram_dorling(pib.sf %>% filter(LEVL_CODE==1, !is.na(pop)),
weight="pop",
m_weight=1,
k=0.33)
```
::: panel-tabset
### Continu
```{r, echo=TRUE}
#| code-line-numbers: "1"
(tm_shape(cartcont, bbox=bbox)+
tm_fill(col="gdp", size="pop", style="cont", palette="-viridis", alpha=0.75)+
tm_borders() )|>
tmap_leaflet()
```
### Dorling
```{r, echo=TRUE}
#| code-line-numbers: "1"
(tm_shape(cartdorling, bbox=bbox)+
tm_fill(col="gdp", style="cont", palette="-viridis", alpha=0.75)+
tm_shape(pib.sf |> filter(LEVL_CODE==0))+
tm_borders() )|>
tmap_leaflet()
```
:::
# une échelle log sur les couleurs
les palettes de `{scico}`, ici `batlow`
```{r, echo=FALSE}
bbox3035 <- list(xmin=2500000,ymin=1500000,xmax=7000000,ymax=5000000)
ggplot()+
geom_sf(data=pib.sf |> filter(LEVL_CODE==0))+
geom_sf(data=cartdorling, aes(fill=gdp))+
coord_sf(xlim=c(bbox3035$xmin, bbox3035$xmax),
ylim=c(bbox3035$ymin, bbox3035$ymax),
crs=3035)+
scico::scale_fill_scico(palette="batlow",
direction=-1,
trans="log",
breaks=c(10000, 25000, 60000),
labels = scales::label_number(scale=1/1000,
suffix = "k€/p/y"),
name = "Pib par tête")
```
# Des ressources pour faire des cartes
- Des fonds de cartes
- IGN Contours administratifs France, régions, départements, communes, IRIS, parcelles
- Pays européens : `{eurostat}`
- Monde `{rworldmap}`
- Des packages R pour la manipulation des données spatiales ou leur visualisation
- `{sf}/{tidyverse}`, `{raster}/{terra}`, `{stars}`
- `{tmap}/{leaflet}`, `{ggplot}`, `{mapdeck}/{mapboxapi}`
- Des personnes à l'OFCE
- Paul Malliet, Maxime Parodi (\*), Xavier Timbeau