{"word_count": 485, "character_count": 3876}
Dans ce billet je propose une manière de zoomer sur une zone particulière d'une carte avec R.Ce zoom peut être défini précisément si l'on connaît à l'avance les coordonnées géographiques de la zone à afficher (sa bounding box), il peut aussi être défini interactivement grâce à la fonction locator().J'utilise les packages sf (pour la gestion des objets spatiaux), cartography (pour l'ajout d'éléments d'habillage) et rnaturalearth (pour acceder aux fonds de cartes libres de Natural Earth).Import et affichage des données# load librarieslibrary(sf)library(cartography)library(rnaturalearth)# import world countries and coastlines from Natural Earthcountry &#60;- ne_countries(scale = 50, returnclass = &#34;sf&#34;,                         type=&#34;sovereignty&#34;)coastline &#60;- ne_coastline(scale = 50, returnclass = &#34;sf&#34;)# Change the projection to Natural Earth II projection # (http://www.shadedrelief.com/NE2_proj/)country &#60;- st_transform(country, &#34;+proj=natearth +wktext&#34;)coastline &#60;- st_transform(coastline, &#34;+proj=natearth +wktext&#34;)# Define a palette of pastel colorscols &#60;- carto.pal(&#34;pastel.pal&#34;,20)# Plot the countriesplot(st_geometry(country), col=cols, border=&#34;grey50&#34;, lwd=0.5)Zoom sur une zone en connaissant sa bounding boxNous souhaitons faire une carte centrée sur la Corée du Sud et nous connaissons les coordonnées de la bounding box du pays dans la projection de notre fond de carte (xmin = 11405000,  xmax = 11831000, ymin = 3736000, ymax = 4347000). Il suffit alors d'utiliser les arguments xlim et ylim de la fonction plot(). # Plot countries using the South Korean bounding boxplot(st_geometry(country),      xlim = c(11405000,  11831000),      ylim = c(3736000, 4347000),      col = cols, border="#BB954E", lwd=0.5, bg="#1CB2E7")# Add the coastlineplot(st_geometry(coastline), col="lightblue", add=T, lwd=1)# Add labellabelLayer(x = country, txt = 'sovereignt', halo=TRUE)# Add layout elementslayoutLayer(title = "Zoom on South Korea",             author = "Made with Natural Earth. Free vector and raster map data @ naturalearthdata.com.",             sources = "cartography 2.0.2",             tabtitle = TRUE, frame=FALSE, scale = NULL)Zoom sur une zone avec une sélection interactiveIl est aussi possible de définir un zoom en sélectionnant interactivement une emprise dans la fenêtre graphique. La fonction locator() permet de cliquer sur un graphique et d'enregistrer les coordonnées du clic dans le système de coordonnées du graphique. Pour définir une emprise de zoom nous avons besoin de définir les coordonnées min et max de sa bounding box, nous avons donc besoin d'enregistrer la position de deux clics, les points extrêmes sud-ouest et nord-est.Nous affichons d'abord la carte dans son emprise globale, puis nous cliquons deux fois pour définir la fenêtre de zoom.# Plot the countriesplot(st_geometry(country), col=cols, border="grey50", lwd=0.5)# Get a bounding box interactivelyloc &#60;- locator(n = 2)&#62; loc$x[1] -1861350  1763385$y[1]  349129.6 2161497.1Nous pouvons ensuite afficher les pays en utilisant encore les arguments xlim et ylim. # Plot countries using the interactively defined bounding boxplot(st_geometry(country), col=cols,      border="#BB954E", lwd=0.5, bg="#1CB2E7",      xlim=loc[[1]], ylim=loc[[2]])# Add the coastlineplot(st_geometry(coastline), col="lightblue", add=T, lwd=1)# Add labelslabelLayer(x = country, txt = 'name', halo=TRUE)# Add layout elementslayoutLayer(title = "Zoom on Western Arica",             author = "Made with Natural Earth. Free vector and raster map data @ naturalearthdata.com.",             sources = "cartography 2.0.2",             tabtitle = TRUE, frame=FALSE, scale = NULL) Les fonctions zoom() et drawExtent() du package raster permettent d'effectuer le même genre d'opérations. Le code de ce post est disponible ici. 