Le logo ThinkR créé avec la librairie {sf}

sf package R carte ThinkR
Auteur : Sébastien Rochette
Tags : Actualités, Ressources
Date :

Une nouvelle fonctionnalité de la librairie {sf} permet de trouver les intersections entre les polygones d’un même objet géographique qui se recouvrent. L’occasion de reproduire notre logo ThinkR manuellement dans R, comme un objet spatialisé.


La nouvelle fonctionnalité de la librairie {sf} est présentée dans l’article : higher-order geometry differences and intersections. L’exemple proposé m’a fait penser au logo ThinkR. Je viens de rejoindre l’équipe alors c’est l’occasion de faire mon premier article sur le blog. Comme j’aime bien la cartographie, je trouvais ça cool de reproduire entièrement le logo ThinkR avec des librairies spatiales dans R.

Jouons avec les librairies spatiales de r-spatial.org : {sf}, {mapedit} et {mapview}

Numérisation manuelle du logo ThinkR avec {mapedit}

Le logo est chargé comme un raster. On lui associe une étendue spatiale qui couvre Paris. On aurait pu couvrir la France puisqu’on est présent partout, mais restons modestes… On lui assigne une projection mercator pour qu’il s’affiche proprement avec {leaflet} sur {mapview}.

 

# install.packages("mapedit")
# install.packages("mapview")
# install.packages("leaflet.extras")
# install.packages("sf")

library(sf)
library(raster)
library(mapedit)
library(mapview)
library(ggplot2)
library(dplyr)

logo <- stack("ThinkR_logo_500px.png")
extent(logo) <- c(170000, 330000, 6140000, 6300000)
projection(logo) <- "+init=epsg:3857"

 

viewRGB(logo)

On utilise {mapedit} pour dessiner manuellement les trois polygones qui composent le logo (cf. gif ci-dessous).

logo_pol <- viewRGB(logo) %>%
editMap()

logo_overlap <- logo_pol$finished %>%
mutate(col = c("#f15522", "#ada9ae", "#15b7d6"))

 

gif thinkr - library sf

Les polygones dessinés à la main dans {mapedit} sont directement sauvés comme un objet de la librairie {sf}. En choisissant les bonnes couleurs, on voit déjà se profiler le logo.
ggplot(logo_overlap) +
geom_sf(aes(fill = factor(X_leaflet_id)), alpha = 0.5) +
scale_fill_manual(values = logo_overlap$col) +
guides(fill = FALSE)

logo overlap polygons - library sf

Trouver les polygones qui se recouvrent

Utilisons la nouvelle fonctionnalité de st_intersection pour trouver les zones qui se recouvrent.

# devtools::install_github("r-spatial/sf")
st_intersection(logo_overlap) %>%
st_cast()
## Simple feature collection with 7 features and 5 fields
## geometry type: GEOMETRY
## dimension: XY
## bbox: xmin: 1.5779 ymin: 48.2146 xmax: 2.9128 ymax: 49.1341
## epsg (SRID): 4326
## proj4string: +proj=longlat +datum=WGS84 +no_defs
## X_leaflet_id feature_type col n.overlaps origins
## 1 102 polygon #f15522 1 1
## 2 102 polygon #f15522 2 1, 2
## 3 129 polygon #ada9ae 1 2
## 4 129 polygon #ada9ae 2 2, 3
## 5 102 polygon #f15522 3 1, 2, 3
## 6 102 polygon #f15522 2 1, 3
## 7 158 polygon #15b7d6 1 3
## geometry
## 1 POLYGON ((1.6109 49.1152, 1...
## 2 POLYGON ((2.07940952471329 ...
## 3 POLYGON ((2.3758 48.285, 2....
## 4 POLYGON ((2.37136364514876 ...
## 5 POLYGON ((2.37136364514876 ...
## 6 GEOMETRYCOLLECTION (POINT (...
## 7 MULTIPOLYGON (((2.8331 48.2...

 

On filtre la collection pour ne conserver que les polygones, on change la couleur pour du blanc sur les polygones issus d’intersections et on fait la figure.

# devtools::install_github("r-spatial/sf")
logo_overlap_i <- st_intersection(logo_overlap) %>%
st_collection_extract("POLYGON") %>%
mutate(
id = 1:n(),
col = ifelse(n.overlaps > 1, "#ffffff", col))

ggplot(logo_overlap_i) +
geom_sf(aes(fill = factor(id)), color = NA) +
scale_fill_manual(values = logo_overlap_i$col) +
guides(fill = FALSE) +
theme_minimal()

 

logo thinkr intersection polygons - library sf

Affichage du logo dans leaflet

Parce qu’on a commencé avec la création en mode interactif, finissons avec un affichage leaflet interactif.

m <- leaflet(width = '100%') %>%
addTiles(urlTemplate = "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png") %>%
addPolygons(data = logo_overlap_i,
fillColor = logo_overlap_i$col,
fill = TRUE, fillOpacity = 0.8,
color = "")


Commentaires

4 réponses à “Le logo ThinkR créé avec la librairie {sf}”

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *


À lire également

Nos formations Certifiantes à R sont finançables à 100% via le CPF

Nos formations disponibles via moncompteformation.gouv.fr permettent de délivrer des Certificats reconnues par l’état, enregistrées au répertoire spécifique de France Compétences. 3 niveaux de certifications existent :

Contactez-nous pour en savoir plus.

Calendrier

04/06/2024

14/05/2024

14/05/2024