Chapitre 3 L’API Natural Earth

## Global options
library(knitr)
library(dplyr)
library(ggplot2)
library(sf)


opts_chunk$set(echo=TRUE,
               cache=TRUE,
               prompt=FALSE,
               tidy=FALSE,
               comment=NA,
               message=FALSE,
               warning=FALSE)

3.1 Objectifs

Nous allons ici utiliser le fonds de carte Natural Earth qui est un fonds de carte libre de droit et mis à jour régulièrement. Le site web du projet se situe à l’adresse suivante :

https://www.naturalearthdata.com/

Il indique ses objectifs comme suit :

“Natural Earth is a public domain map dataset available at 1:10m, 1:50m, and 1:110 million scales. Featuring tightly integrated vector and raster data, with Natural Earth you can make a variety of visually pleasing, well-crafted maps with cartography or GIS software.[…] Natural Earth was built through a collaboration of many volunteers and is supported by NACIS (North American Cartographic Information Society), and is free for use in any type of project (see our Terms of Use page for more information).”

On peut télécharger les différents fonds de carte sur le site web, mais dans une perspective de mise à jour automatique régulière du fonds de carte il est plus pertinent d’utiliser l’API rnaturalearthqui permet d’accéder directement à la plupart des fonds de carte avec juste quelques lignes de code. Il suffit pour cela de commencer par installer et charger le package.

library("rnaturalearth")
library("rnaturalearthdata")

3.1.1 Quel fonds de carte choisir ?

3.1.2 le fonds de carte countries110 (175 unités)

On va télécharger tout d’abord le fonds de carte des pays du Monde avec une forte généralisation des contours countries110 et le transformer en objet de type spatial feature du package sf du package avant de le visualiser et d’ examiner le nombre d’unités

map<-st_as_sf(countries110)
class(map)
[1] "sf"         "data.frame"
ggplot(data = map) +
        geom_sf(fill="lightyellow") +
        theme_bw()

Ce fonds de carte comporte 175 unités spatiales, mais de quoi s’agit-il exactement. Les métadonnées associées permettent de se faire une idée plus précise de la nature exacte de ces unités. Prenons pour cela quelques exempes

sel<-map[map$adm0_a3 %in% c("FRA", "NCL","ATA","ATF","USA", "PRI","CHN","TWN","MAR", "SAH","CHN","TWN","ISR","PSX"),c("sovereignt","sov_a3","type","admin", "adm0_a3","name","note_adm0","iso_a3","wb_a3")]
kable(sel)
sovereignt sov_a3 type admin adm0_a3 name note_adm0 iso_a3 wb_a3 geometry
6 Antarctica ATA Indeterminate Antarctica ATA Antarctica NA ATA NA MULTIPOLYGON (((-59.57209 -…
7 France FR1 Dependency French Southern and Antarctic Lands ATF Fr. S. Antarctic Lands Fr. ATF NA MULTIPOLYGON (((68.935 -48….
30 China CH1 Country China CHN China NA CHN CHN MULTIPOLYGON (((110.3392 18…
55 France FR1 Country France FRA France NA FRA FRA MULTIPOLYGON (((-52.55642 2…
78 Israel ISR Sovereign country Israel ISR Israel NA ISR ISR MULTIPOLYGON (((35.71992 32…
99 Morocco MAR Sovereign country Morocco MAR Morocco NA MAR MAR MULTIPOLYGON (((-5.193863 3…
113 France FR1 Dependency New Caledonia NCL New Caledonia Fr. NCL NCL MULTIPOLYGON (((165.78 -21….
128 United States of America US1 Dependency Puerto Rico PRI Puerto Rico Commonwealth of U.S.A. PRI PRI MULTIPOLYGON (((-66.28243 1…
132 Israel ISR Disputed Palestine PSX Palestine Partial self-admin. PSE WBG MULTIPOLYGON (((35.54567 32…
137 Western Sahara SAH Indeterminate Western Sahara SAH W. Sahara Self admin. ESH NA MULTIPOLYGON (((-8.794884 2…
163 Taiwan TWN Sovereign country Taiwan TWN Taiwan NA TWN NA MULTIPOLYGON (((121.7778 24…
168 United States of America US1 Country United States of America USA United States NA USA USA MULTIPOLYGON (((-155.5421 1…

Les exemples présentés dans le tableau ci-dessus montrent la complexité du problème de définition et de représentation cartographique des “pays” ou “bouts du monde”. Quelques remarques :

  1. La France (FR1) en tant qu’état souverain regroupe ici cartographiquement la partie métropolitaine du pays et les Départements d’Outre-Mer (Guyane Française, Réunion, Martinique, Guadeloupe) en une seule entité spatiale, mais elle met à part la Nouvelle Calédonie et les îles antarctiques.
  2. Porto Rico (PRI) est considéré comme une dépendance des Etats-Unis (US1) au même titre que la Nouvelle Calédonie(NCL) est considérée comme une dépendance de la France (FR1).
  3. Le Sahara occidental (SAH) est considéré comme une zone indéterminée bien qu’il soit occupé par le Maroc (MAR).
  4. la Palestine (PSX) est considéré comme une zone disputée mais rattachée en terme de souveraineté à Israël (ISR) et une note précise qu’elle est partiellement semi-administrée. Le code sur trois caractères des territoires palestiniens est très variable selon les organisations (PSX, PSE, WBG).
  5. Taïwan (TWN) est présenté comme un état souverain, mais son code ISO3 est manquant pour la banque mondiale car la Chine refuse de le reconnaître.
  6. Plusieurs états souverains de petite taille sont absents de ce fonds de carte qui ne regroupe que 175 unités soit moins que les 193 pays membres des Nations-Unies. La plupart des îles du Pacifique sont en particulier éliminées car leur surface les rendrait invisible pour le degré de généralisation cartographique adopté.

3.1.3 le fonds de carte sovereignty110 (171 unités)

On peut obtenir un fonds différent en installant le package complémentaire rnaturalearthdata qui permet notamment de distinguer le fonds de carte des countries (c’est-à-dire des “bouts du monde” souverains ou non) et des sovereignty (c’est-à-dire des états souverains)

library(rnaturalearthdata)
map<-st_as_sf(sovereignty110)

ggplot(data = map) +
 geom_sf(fill="lightyellow") +  
  theme_bw()

Le fonds de carte permet désormais de récupérer la plupart des pays souverains du Monde, y compris les petits états insulaires du Pacifique, mais il fait disparaître de façon sélective les territoires indéterminés ou disputés. Ainsi, le Sahra Occidental demeure partiellement séparé du Maroc mais les territoires palestiniens sont annexés à Israël ainsi que le plateau du Golan ce qui n’est évidemment pas un choix neutred’un point de vue géoolitique.

par(mfrow=c(1,2))

map2<-map %>% filter(sov_a3 %in% c("ISR","JOR","SYR","LBN","EGY"))
ggplot(data = map2) +
    geom_sf(fill=c("gray80","orange","gray80","gray80","gray80")) +
    ggtitle("Limits of Israël") +
  theme_minimal()

map3<-map %>% filter(sov_a3 %in%c("MAR","SAH","DZA","MRT"))
ggplot(data = map3) +
    geom_sf(fill=c("gray70","orange","gray70","lightyellow")) +
    ggtitle("Limits of Morocco") +
  theme_minimal()

3.1.4 Le fonds de carte countries50

On peut également choisir un fonds moins généralisé dans lequel tous les petits pays seront présents

map<-st_as_sf(countries50)
ggplot(data = map) +
    geom_sf(fill="lightyellow") +
  theme_bw()

3.1.5 Autres fonds de carte :

Il existe toute une série d’autres fonds de carte dans le package Natural Earth, notamment avec des résolutions plus précises, mais on se limitera ici à l’exploration des fonds de carte utile pour produire des cartes à contour généralisé couvrant le monde entier.

3.2 Exemple de combinaison des API wbstats et naturalearth

Nous allons finalement essayer de constituer une carte des émissions de CO2 en 2016 basée sur la combinaison des données wbstats et du fonds de carte naturalearth.

3.2.1 Etape 1 : récupération des données statistiques

library(wbstats)
cat<-wb_cachelist

don1<-cat$countries %>% 
        filter(region !="Aggregates") %>%
        select(iso3c,country, longitude, latitude)

don2 <- wb_data(indicator = c("EN.ATM.CO2E.KT"),
                  start_date=2015,
                  end_date = 2015) %>%
        select(iso3c, EN.ATM.CO2E.KT)

don <- left_join(don1,don2) %>%
        rename(ISO3 = iso3c, CO2 = EN.ATM.CO2E.KT)

kable(head(don))
ISO3 country longitude latitude CO2
ABW Aruba -70.0167 12.51670 898.415
AFG Afghanistan 69.1761 34.52280 9035.488
AGO Angola 13.2420 -8.81155 34583.477
ALB Albania 19.8172 41.33170 4616.753
AND Andorra 1.5218 42.50750 465.709
ARE United Arab Emirates 54.3705 24.47640 194765.371

3.2.2 Etape 2 : Récupération du fonds de carte

map<-st_as_sf(countries110)
map<-st_as_sf(countries110) %>% 
        select(adm0_a3,geometry) %>% 
        rename(ISO3 = adm0_a3)
head(map)
# A tibble: 6 x 2
  ISO3                                                                  geometry
  <chr>                                                       <MULTIPOLYGON [°]>
1 AFG   (((61.21082 35.65007, 62.23065 35.27066, 62.98466 35.40404, 63.19354 35…
2 AGO   (((16.32653 -5.87747, 16.57318 -6.622645, 16.86019 -7.222298, 17.09 -7.…
3 ALB   (((20.59025 41.8554, 20.46318 41.51509, 20.60518 41.08623, 21.02004 40.…
4 ARE   (((51.57952 24.2455, 51.75744 24.29407, 51.79439 24.01983, 52.57708 24.…
5 ARG   (((-65.5 -55.2, -66.45 -55.25, -66.95992 -54.89681, -67.56244 -54.87001…
6 ARM   (((43.58275 41.09214, 44.97248 41.24813, 45.1795 40.98535, 45.56035 40.…

3.2.3 Etape 3 : Jointure du fonds de carte et des statistiques

mapdon <- right_join(don,map) %>% st_as_sf()
class(mapdon)
[1] "sf"         "tbl_df"     "tbl"        "data.frame"

3.2.4 Etape 4 : Visualisation avec ggplot

ggplot(data = mapdon) +
 geom_sf(fill="lightyellow")+
  geom_point(aes(x=longitude,y=latitude, size=CO2), col = "red")+
  theme_bw()

3.2.5 Etape 5 :Visualisation avec plotly

# Create map
library(plotly)


g <- list(showframe = TRUE,
          framecolor= toRGB("gray50"),
          coastlinecolor = toRGB("black"),
          showland = TRUE,
          landcolor = toRGB("lightyellow"),
          showcountries = TRUE,
          countrycolor = toRGB("black"),
          countrywidth = 0.2,
         projection = list(type = 'azimuthal equal area'))
  #        projection = list(type = 'Mercator'))



p<- plot_geo(mapdon)%>%
  add_markers(x = ~longitude,
              y = ~latitude,
              sizes = c(0, 1000),
              size = ~CO2,
     #         color= "red",

              hoverinfo = "text",
              text = ~paste('Pays: ', country,
                            '<br /> CO2 en kT : ',CO2)) %>%
  layout(geo = g,
              width=800,
              height=400,
         title = "Emissions de CO2 en 2015")
p