We can load the happign
package, and some additional
packages we will need.
library(happign)
library(sf)
library(tmap)
happign
use two web service from IGN :
More detailed information are available here for WMS and here for WFS.
To download data from web services at least three elements are needed :
sf
packageAPI keys can be directly retrieved on the IGN website in
the expert web services (I recommend you at this point to go and
have a look) or with get_apikeys()
function.
get_apikeys()
#> [1] "administratif" "adresse" "agriculture" "altimetrie"
#> [5] "cartes" "cartovecto" "clc" "economie"
#> [9] "environnement" "geodesie" "lambert93" "ocsge"
#> [13] "ortho" "orthohisto" "parcellaire" "satellite"
#> [17] "sol" "topographie" "transports"
As for API key, it is possible to find the names of available layers from the expert web services of the IGN. For example, the first layer name in WFS format for “Administratif” category is “ADMINEXPRESS-COG-CARTO.LATEST:arrondissement”
Again, all layer’s name can be accessed from R with the
get_layers_metadata()
function. This one connects directly
to the IGN site which allows to have the last updated resources. It can
be used for WMS and WFS :
<- get_layers_metadata(apikey = "administratif", data_type = "wfs")
administratif_wfs <- get_layers_metadata(apikey = "administratif", data_type = "wms") administratif_wms
Now that we know how to get an API key and layer name, it only takes a few lines to get plethora of resources. For the example we will look at the beautiful town of Penmarch in France. A part of this town is stored as a shape in happign.
<- read_sf(system.file("extdata/penmarch.shp", package = "happign")) penmarch
get_wfs
can be used to download borders :
<- get_wfs(shape = penmarch,
penmarch_borders apikey = "administratif",
layer_name = "LIMITES_ADMINISTRATIVES_EXPRESS.LATEST:commune")
#> Features downloaded : 1
# Checking result
tm_shape(penmarch_borders)+
tm_polygons(alpha = 0, lwd = 2)+
tm_shape(penmarch)+
tm_polygons(col = "red")+
tm_layout(main.title = "Penmarch borders from IGN",
main.title.position = "center")
It’s as simple as that! Now you have to rely on your curiosity to explore the multiple possibilities that IGN offers. For example, who has never wondered how many road junctions there are in Penmarch?
Spoiler : there are 192 of them
<- get_wfs(shape = penmarch_borders,
dikes apikey = get_apikeys()[6],
layer_name = "BDCARTO_BDD_WLD_WGS84G:noeud_routier",
spatial_filter = "intersects")
#> Features downloaded : 192
# Checking result
tm_shape(penmarch_borders) + # Borders of penmarch
tm_borders(lwd = 2) +
tm_shape(dikes) + # Point use to retrieve data
tm_symbols(col = "red", shape = 13, size = 0.3) +
tm_add_legend(type = "symbol", shape = 13, label = "Road junction", col = "red") +
tm_layout(main.title = "Road nodes recorded by the IGN in Penmarch",
main.title.position = "center",
legend.position = c("right", "bottom"),
frame = FALSE)
For raster, the process is the same but with the function
get_wms_raster()
. There’s plenty of elevation resources
inside “altimetrie”
category. A basic one is the Digital Elevation Model (DEM or MNT in
French). Borders of Penmarch are used as shape for downloading the
DEM.
<- get_layers_metadata("altimetrie", "wms")
layers_metadata <- layers_metadata[2, 1] #LEVATION.ELEVATIONGRIDCOVERAGE
dem_layer_name
<- get_wms_raster(shape = penmarch_borders,
mnt apikey = "altimetrie",
layer_name = dem_layer_name,
resolution = 25,
crs = 4326)
#> 1/1 downloading...
#> Raster is saved at :
#> D:\TMP\RtmpC8sCbg\file325c11774ffb.tif
< 0] <- NA # remove negative values in case of singularity
mnt[mnt
tm_shape(mnt) +
tm_raster(title = "Elevation [m]") +
tm_shape(penmarch_borders)+
tm_borders(lwd = 2)+
tm_layout(main.title = "DEM of Penmarch",
main.title.position = "center",
legend.position = c("right", "bottom"),
legend.bg.color = "white", legend.bg.alpha = 0.7)
Rq :
get_wms_raster()
are
SpatRaster
object from the terra
package. To
learn more about conversion between other raster type in R go check
this out.