L’objectif de cette section consiste à proposer des analyses de complétude et de centralités dans un contexte transfrontalier sur un sélection consolidée de quatre équipements de proximité, qui se sont révélés apporter les meilleures garanties de complétude et de clarté des définitions suite aux précédentes analyses : cafés-restaurants, pharmacies, banques et magasins d’électronique.
A la différence de l’analyse de complétude du côté français, qui permettait de disposer de la BPE comme base de données de contrôle, rien de ce type n’est disponible de façon harmonisée pour l’Allemagne, le Luxembourg ou encore la Belgique. Les discussions menées avec le pôle BPE de l’INSEE soulignant qu’à leur connaissance, cette base de données unique en Europe et est même source d’inspiration pour d’autres pays européens. Nous disposons donc uniquement d’une grille de population à une résolution relativement fine : 1 kilomètre.
Avec ces données à disposition et à la lumière des précédentes analyses, les objectifs sont ici triples :
## Loading required package: sp
library(cartography) # Cartographie des résultats
library(readxl) # Import de fichiers Excel
library(RColorBrewer) # Palettes pour graphiques
#remotes::install_github("riatelab/potential")
library(potential) # Potentiel de StewartOn importe la fonction CountPt créée précédemment pour dénombrer les équipements dans les mailles territoriales.
# Fonction de comptage des points dans les mailles
CountPt <- function(x, pt, var, equip){
# Selection de l'équipement d'intérêt (pour une source et une variable donnée)
pts <- pt[pt[[var]] == equip,]
# Intersection avec l'objet sf de référence
inter <- st_intersects(x, pts)
# Nombre de points par objet géographique
v <- sapply(X = inter, FUN = length)
return(v)
}Les données utiles à l’analyse sont importées. Elles sont issues des programmes de préparation des données. Sur notre espace d’étude transfrontalier et pour les 4 équipements sélectionnés, 8313 points d’intérêts sont extraits d’OpenStreetMap. Pour rappel, lau50 et grid50 correspondent à une emprise géographique de 50 km autour de l’espace d’étude. Cette emprise est nécessaire pour éviter l’écueil des “effets de bords” dans le calcul des potentiels de Stewart qui vont suivre.
# Bounding box de l'espace d'étude
bbox <- st_read("data/geom.gpkg", layer = "bbox", quiet = TRUE)
# Couche NUTS3 et pays
nuts3 <- st_read("data/geom.gpkg", layer = "nuts3", quiet = TRUE)
nuts3$country <- substr(nuts3$ID,1,2)
# Mise au clean de la couche NUTS3
nuts3$NUTS.3.CODE <- NULL
# Nom des NUTS3 (pour les représentations graphiques)
nuts3$NAME <- c("Arrondissement d'Arlon", "Arrondissement de Virton", "Birkenfeld",
"Trèves, Kreisfreie-Stadt", "Bernkastel-Wittlich", "Trèves-Sarrebourg",
"Deux-Ponts-Kreisfreie-Stadt", "Kusel", "Stadtverband-Saarbrucken", "Merzig-Wadern",
"Neunkirchen", "Saarlouis", "Saarpfalz-Kreis","St.Wendel", "Bas-Rhin", "Meurthe-et-Moselle",
"Meuse", "Moselle", "Luxembourg")
country <- aggregate(x = nuts3[,"country"], by = list(nuts3$country),
FUN = head, 1)
# Equipements OSM
osm <- st_read( "data/geom.gpkg", layer = "equipements", quiet = TRUE)
osm <- osm[osm$type == "OSM",]
# Sélectionner équipements consolidés
selecEquip <- c("banque", "restaurant", "pharmacie", "electronique")
osm <- osm[osm$categorie %in% selecEquip,] # 15035 points pour 4 catégories
# Sélectionner uniquement les points compris sur l'espace d'étude (pour représentations)
osmstudy <- st_intersection(osm, nuts3) # 8313 points
# Fond communal
lau <- st_read("data/geom.gpkg", layer = "lau", quiet = TRUE)
lau50 <- st_read("data/geom.gpkg", layer = "lau50", quiet = TRUE)
lau$GISCO_ID <- as.character(lau$GISCO_ID)
lau50$GISCO_ID <- as.character(lau50$GISCO_ID)
# Grilles kilométriques
grid50 <- st_read( "data/geom.gpkg", layer = "grid50", quiet = TRUE) # Pour le calcul de potentiel
grid0 <- st_read ("data/geom.gpkg", layer = "grid", quiet = TRUE) # Pour les représentationsNous cherchons ici à qualifier le nombre et la densité d’équipements OSM dans les deux mailles territoriales de référence européennes (NUTS3 et LAU2) au regard de leur population respective.
Les données sont tout d’abord préparées à l’échelle du NUTS3. Une boucle est créée pour comptabiliser le nombre d’équipements dans la maille pour les 4 équipements consolidés séparément.
# Nombre d'équipements par NUTS3 (4 équipements)
nuts3$EqSum <- CountPt(x = nuts3, pt = osm, var = "type", equip = "OSM")
# Nombre d'équipements par NUTS3 (par équipement)
for (i in selecEquip) {
nuts3[[i]] <- CountPt(x = nuts3, pt = osm, var = "categorie", equip = i)
}
# Calcul surface espace d'étude en km²
nuts3$SURF <- as.numeric(st_area(nuts3)/1000000)
# Population par NUTS3 intersectant l'espace d'étude (carreaux de grille)
tmp <- st_intersection(grid50, nuts3)
tmp <- aggregate(tmp[,"POP2015", drop = TRUE],
by = list(POP2015 = tmp$ID),
FUN = sum)
colnames(tmp) <- c("ID","POP2015")
nuts3 <- merge(nuts3, tmp, by = "ID")Ce dénombrement est ensuite réalisé pour le LAU2 et la grille.
# Nombre d'équipements par LAU2 (4 équipements)
lau50$EqSum <- CountPt(x = lau50, pt = osm, var = "type", equip = "OSM")
# Nombre d'équipements par LAU2 (par équipement)
for (i in selecEquip) {
lau50[[paste0(i)]] <- CountPt(x = lau50, pt = osm, var = "categorie", equip = i)
}
# Calcul surface espace d'étude en km²
lau50$SURF <- as.numeric(st_area(lau50)/1000000)
# Jointure avec espace d'étude de référence (contenant les populations)
lau50 <- st_set_geometry(lau50, NULL)
lau <- merge(lau, lau50[,c("GISCO_ID", "EqSum", "SURF","banque","restaurant",
"pharmacie", "electronique")], all.x = TRUE)
# Nombre d'équipements par carreau de grille (4 équipements)
grid0$EqSum <- CountPt(x = grid0, pt = osm, var = "type", equip = "OSM")
# Nombre d'équipements par LAU2 (par équipement)
for (i in selecEquip) {
grid0[[paste0(i)]] <- CountPt(x = grid0, pt = osm, var = "categorie", equip = i)
}Le code ci-dessous produit une représentation cartographique présentant le nombre d’équipements OSM par NUTS3 (intersectant l’espace d’étude).
# Carte présentation des équipements
res <- 400
sizes <- getFigDim(x = nuts3, width = 3000, mar = c(0,0,1.2,0), res = res)
png(file = "fig/D01_equip_nuts3.png", width = sizes[1], height = sizes[2], res = res)
par(mar = c(0,0,1.2,0), mfrow = c(1,1))
plot(st_geometry(nuts3), col = "orange", border = "ivory1", lwd = 1)
plot(st_geometry(osmstudy), pch = 16, col = "black", cex = 0.2, add = TRUE)
labelLayer(x = nuts3, txt = "ID", halo=TRUE, cex = 0.6, col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
propSymbolsLayer(x = nuts3, var = "EqSum", col = "#CD000070",
legend.pos = "topright",
legend.title.txt = "Nombre d'équipements\n(sur l'espace d'étude\nnuniquement)",
legend.frame = TRUE)
legend("topleft", pch = 16, cex = 0.7, col = "black", title = "Équipements OSM consolidés",
title.adj = 0.1, adj = c(0,0.1), pt.cex = 0.5, y.intersp = 1.4,
legend = "Café-restaurant, banque\npharmacie ou magasin d'électronique")
layoutLayer(title = "Equipements OSM sur l'espace d'étude (NUTS3)",
sources = "Eurostat, LAU version 2018, Contributeurs OpenStreetMap",
horiz = FALSE,
posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
Figure D1 - Dénombrement d’équipements OSM par NUTS3

Le code ci-dessous génère un graphique en bâton qui présente le nombre d’équipements OSM par km². Les barres oranges représentent les NUTS3 allemands, la barre verte le Luxembourg, les barres violettes les NUTS3 belges et les barres noires les NUTS3 (départements) français. Les valeurs sont ici ordonnées de façon décroissante selon la densité d’équipements OSM par km². La ligne horizontale en pointillés rouge représente la moyenne de l’espace d’étude.
# Densité d'équipements au km² et pour 1000 habitants
nuts3$DENS_SURF <- nuts3$EqSum / nuts3$SURF
nuts3$DENS_POP <- (nuts3$EqSum / nuts3$POP2015) * 1000
# Représentations graphiques / Densité
nuts3 <- nuts3[order(nuts3$DENS_SURF, decreasing = TRUE),]
png(file = "fig/D02_barplot_osm_surface.png", width = sizes[1], height = sizes[2], res = res)
par(mar = c(4,4,4,4))
mycols <- c("#beaed4","#fdc086","black","#7fc97f")
barplot(nuts3$DENS_SURF, names.arg = nuts3$ID, cex.names = 0.8,
col = mycols[as.factor(nuts3$country)],
border = FALSE, las = 2 , xlab ="",
ylab = "Nb équipements OSM par km²")
abline(h = sum(nuts3$EqSum) / sum(nuts3$SURF), col = "red", lwd = 2, lty = 2)
dev.off()## png
## 2
Figure D2 - Densité d’équipements par km²

La surface est ensuite remplacée par la population pour évaluer le nombre d’équipements OSM par habitants (données de 2015).
# Représentations graphiques / Pop
nuts3 <- nuts3[order(nuts3$DENS_POP, decreasing = TRUE),]
png(file = "fig/D03_barplot_osm_pop.png", width = sizes[1], height = sizes[2], res = res)
barplot(nuts3$DENS_POP, names.arg = nuts3$ID, cex.names = 0.8,
col = mycols[as.factor(nuts3$country)],
border = FALSE, las = 2 , xlab ="",
ylab = "Nb équipements OSM pour 1000 habitants")
abline(h = sum(nuts3$EqSum) / sum(nuts3$POP2015) * 1000, col = "red", lwd = 2, lty = 2)
dev.off()## png
## 2
Figure D3 - Densité d’équipements pour 1000 habitants

La table ci-dessous met en évidence la part que représentent chaque équipement sur la somme des 4 équipements sélectionnés par NUTS3 (en %). La table est ordonnée en fonction de la population. La colonne EqSum représente la somme des équipements OSM par NUTS3 et la ligne Total l’ensemble de l’espace d’étude.
# Part des équipements par NUTS3
df <- st_set_geometry(nuts3, NULL)
df <- df[,c("ID", "NAME", "POP2015", selecEquip, "EqSum")]
# Somme des lignes (total de l'espace d'étude)
tmp <- apply(df[,c(3:8)], 2, sum)
tmp$ID <- "TOT"
tmp$NAME <- "Total"
tmp <- as.data.frame(tmp)
# Part du total des équipements
df <- rbind(df, tmp)
for (i in colnames(df[4:7])) {
df[[i]] <- df[[i]] / df$EqSum * 100
}
df <- df[order(-df$EqSum),]
knitr::kable(df, row.names = FALSE, digits = 1, padding = 0)| ID | NAME | POP2015 | banque | restaurant | pharmacie | electronique | EqSum |
|---|---|---|---|---|---|---|---|
| TOT | Total | 3156719.7 | 10.8 | 77.6 | 7.5 | 4.1 | 8313 |
| LU000 | Luxembourg | 481346.1 | 8.8 | 84.1 | 3.6 | 3.4 | 2147 |
| FRF33 | Moselle | 1002504.6 | 13.6 | 71.4 | 10.9 | 4.0 | 1335 |
| DEC01 | Stadtverband-Saarbrucken | 370068.8 | 10.0 | 78.0 | 7.1 | 4.9 | 1288 |
| DEC03 | Neunkirchen | 147876.6 | 9.4 | 78.6 | 6.8 | 5.1 | 604 |
| DEC04 | Saarlouis | 215388.7 | 13.6 | 72.5 | 10.5 | 3.4 | 552 |
| DEB21 | Trèves, Kreisfreie-Stadt | 103849.9 | 6.9 | 78.9 | 6.9 | 7.3 | 437 |
| DEC06 | St.Wendel | 94969.3 | 9.6 | 76.5 | 7.8 | 6.2 | 387 |
| DEC02 | Merzig-Wadern | 118602.9 | 12.6 | 76.7 | 7.8 | 2.9 | 373 |
| DEB25 | Trèves-Sarrebourg | 131113.1 | 13.2 | 77.8 | 6.1 | 2.9 | 342 |
| DEC05 | Saarpfalz-Kreis | 119039.9 | 11.9 | 75.9 | 10.2 | 2.0 | 303 |
| BE341 | Arrondissement d’Arlon | 68437.9 | 6.4 | 80.7 | 8.6 | 4.3 | 187 |
| FRF31 | Meurthe-et-Moselle | 194458.5 | 19.0 | 58.6 | 19.5 | 2.9 | 174 |
| DEB15 | Birkenfeld | 33306.7 | 13.0 | 74.0 | 7.8 | 5.2 | 77 |
| BE345 | Arrondissement de Virton | 28098.0 | 17.6 | 72.5 | 9.8 | 0.0 | 51 |
| FRF32 | Meuse | 23415.4 | 9.5 | 76.2 | 14.3 | 0.0 | 21 |
| DEB22 | Bernkastel-Wittlich | 8236.8 | 16.7 | 77.8 | 0.0 | 5.6 | 18 |
| FRF11 | Bas-Rhin | 9487.8 | 33.3 | 55.6 | 11.1 | 0.0 | 9 |
| DEB3G | Kusel | 6162.8 | 14.3 | 71.4 | 14.3 | 0.0 | 7 |
| DEB3A | Deux-Ponts-Kreisfreie-Stadt | 355.9 | 0.0 | 100.0 | 0.0 | 0.0 | 1 |
A l’échelon local (LAU2), la taille des unités territoriales de cet espace transfrontalier sont très hétérogènes. Cela pose intrinsèquement la question de l’usage de cette maille territoriale comme référence pour discuter de concentrations d’équipements.
Par NUTS3 et pour les LAU2 qui les composent, le code ci-dessous génère des résumés statistiques avec respectivement :
Ce résumé statistique est décliné pour 3 variables : la population (_POP), la surface (_SURF) et le nombre d’équipements (_EQ_OSM).
df <- st_set_geometry(lau, NULL)
# Résumé stat population
dfpop <- do.call(data.frame, aggregate(x = df[,"POP_2011"], by = list(df$NUTS.3.CODE),
FUN = function(x)
c(s1 = length(x), s2 = min(x), s3 = mean(x),
s4 = median(x), s5 = max(x), s6 = sd(x)/mean(x)*100)))
dfpop <- merge(nuts3[,c("ID","NAME")], dfpop, by.x = "ID", by.y = "Group.1")
dfpop <- st_set_geometry(dfpop, NULL)
knitr::kable(dfpop, row.names = F, digits = 0,
col.names = c("NUTS3", "NOM", "Nb_LAU2", "MIN_POP",
"MOY_POP", "MED_POP", "MAX_POP", "COEFF_VAR_POP"))| NUTS3 | NOM | Nb_LAU2 | MIN_POP | MOY_POP | MED_POP | MAX_POP | COEFF_VAR_POP |
|---|---|---|---|---|---|---|---|
| BE341 | Arrondissement d’Arlon | 4 | 5122 | 14195 | 11836 | 27986 | 72 |
| BE345 | Arrondissement de Virton | 6 | 3290 | 6138 | 5002 | 11418 | 51 |
| DEB15 | Birkenfeld | 56 | 94 | 1118 | 426 | 30379 | 365 |
| DEB21 | Trèves, Kreisfreie-Stadt | 1 | 105260 | 105260 | 105260 | 105260 | NA |
| DEB22 | Bernkastel-Wittlich | 19 | 52 | 919 | 222 | 10782 | 265 |
| DEB25 | Trèves-Sarrebourg | 84 | 77 | 1325 | 812 | 17923 | 159 |
| DEB3A | Deux-Ponts-Kreisfreie-Stadt | 1 | 33944 | 33944 | 33944 | 33944 | NA |
| DEB3G | Kusel | 9 | 364 | 1366 | 892 | 5229 | 112 |
| DEC01 | Stadtverband-Saarbrucken | 10 | 8486 | 33233 | 16198 | 175741 | 153 |
| DEC02 | Merzig-Wadern | 7 | 6398 | 14978 | 15371 | 30355 | 53 |
| DEC03 | Neunkirchen | 7 | 10402 | 19607 | 16400 | 47398 | 64 |
| DEC04 | Saarlouis | 13 | 6605 | 15639 | 15432 | 37136 | 51 |
| DEC05 | Saarpfalz-Kreis | 7 | 6838 | 21320 | 18086 | 43808 | 66 |
| DEC06 | St.Wendel | 8 | 6217 | 11324 | 9519 | 26208 | 56 |
| FRF11 | Bas-Rhin | 8 | 201 | 881 | 655 | 1920 | 71 |
| FRF31 | Meurthe-et-Moselle | 147 | 41 | 1279 | 416 | 14497 | 178 |
| FRF32 | Meuse | 73 | 32 | 308 | 146 | 3817 | 184 |
| FRF33 | Moselle | 475 | 38 | 1969 | 658 | 120461 | 326 |
| LU000 | Luxembourg | 66 | 465 | 5539 | 2951 | 81804 | 191 |
# Résumé stat surface
dfsurf <- do.call(data.frame, aggregate(x = df[,"SURF"], by = list(df$NUTS.3.CODE),
FUN = function(x) c(s1 = length(x), s2 = min(x), s3 = mean(x),
s4 = median(x), s5 = max(x), s6 = sd(x)/mean(x)*100)))
dfsurf <- merge(nuts3[,c("ID","NAME")], dfsurf, by.x = "ID", by.y = "Group.1")
dfsurf <- st_set_geometry(dfsurf, NULL)
knitr::kable(dfsurf, row.names = F, digits = 0,
col.names = c("NUTS3", "NOM", "Nb_LAU2", "MIN_SURF",
"MOY_SURF", "MED_SURF", "MAX_SURF", "COEFF_VAR_SURF")) | NUTS3 | NOM | Nb_LAU2 | MIN_SURF | MOY_SURF | MED_SURF | MAX_SURF | COEFF_VAR_SURF |
|---|---|---|---|---|---|---|---|
| BE341 | Arrondissement d’Arlon | 4 | 46 | 72 | 62 | 119 | 46 |
| BE345 | Arrondissement de Virton | 6 | 36 | 72 | 80 | 103 | 41 |
| DEB15 | Birkenfeld | 56 | 2 | 8 | 7 | 92 | 144 |
| DEB21 | Trèves, Kreisfreie-Stadt | 1 | 117 | 117 | 117 | 117 | NA |
| DEB22 | Bernkastel-Wittlich | 19 | 1 | 13 | 4 | 122 | 208 |
| DEB25 | Trèves-Sarrebourg | 84 | 1 | 11 | 7 | 45 | 81 |
| DEB3A | Deux-Ponts-Kreisfreie-Stadt | 1 | 72 | 72 | 72 | 72 | NA |
| DEB3G | Kusel | 9 | 3 | 6 | 6 | 13 | 52 |
| DEC01 | Stadtverband-Saarbrucken | 10 | 9 | 41 | 24 | 169 | 117 |
| DEC02 | Merzig-Wadern | 7 | 34 | 80 | 79 | 110 | 36 |
| DEC03 | Neunkirchen | 7 | 10 | 35 | 35 | 74 | 64 |
| DEC04 | Saarlouis | 13 | 7 | 35 | 34 | 64 | 53 |
| DEC05 | Saarpfalz-Kreis | 7 | 31 | 60 | 57 | 108 | 45 |
| DEC06 | St.Wendel | 8 | 24 | 60 | 53 | 114 | 55 |
| FRF11 | Bas-Rhin | 8 | 7 | 14 | 14 | 22 | 38 |
| FRF31 | Meurthe-et-Moselle | 147 | 1 | 9 | 8 | 39 | 55 |
| FRF32 | Meuse | 73 | 3 | 12 | 11 | 64 | 76 |
| FRF33 | Moselle | 475 | 0 | 8 | 7 | 50 | 65 |
| LU000 | Luxembourg | 66 | 5 | 22 | 20 | 58 | 51 |
# Résumé stat équip.
dfeq <- do.call(data.frame, aggregate(x = df[,"EqSum"], by = list(df$NUTS.3.CODE),
FUN = function(x) c(s1 = length(x), s2 = min(x), s3 = mean(x),
s4 = median(x), s5 = max(x), s6 = sd(x)/mean(x)*100)))
dfeq <- merge(nuts3[,c("ID","NAME")], dfeq, by.x = "ID", by.y = "Group.1")
dfeq <- st_set_geometry(dfeq, NULL)
knitr::kable(dfeq, row.names = F, digits = 0,
col.names = c("NUTS3", "NOM", "Nb_LAU2", "MIN_EQ_OSM", "MOY_EQ_OSM",
"MED_EQ_OSM", "MAX_EQ_OSM", "COEFF_VAR_EQ_OSM")) | NUTS3 | NOM | Nb_LAU2 | MIN_EQ_OSM | MOY_EQ_OSM | MED_EQ_OSM | MAX_EQ_OSM | COEFF_VAR_EQ_OSM |
|---|---|---|---|---|---|---|---|
| BE341 | Arrondissement d’Arlon | 4 | 5 | 48 | 32 | 120 | 113 |
| BE345 | Arrondissement de Virton | 6 | 5 | 15 | 16 | 24 | 50 |
| DEB15 | Birkenfeld | 56 | 0 | 3 | 0 | 88 | 408 |
| DEB21 | Trèves, Kreisfreie-Stadt | 1 | 476 | 476 | 476 | 476 | NA |
| DEB22 | Bernkastel-Wittlich | 19 | 0 | 3 | 0 | 40 | 292 |
| DEB25 | Trèves-Sarrebourg | 84 | 0 | 5 | 2 | 62 | 202 |
| DEB3A | Deux-Ponts-Kreisfreie-Stadt | 1 | 84 | 84 | 84 | 84 | NA |
| DEB3G | Kusel | 9 | 0 | 2 | 1 | 10 | 158 |
| DEC01 | Stadtverband-Saarbrucken | 10 | 11 | 129 | 44 | 874 | 204 |
| DEC02 | Merzig-Wadern | 7 | 18 | 53 | 55 | 99 | 48 |
| DEC03 | Neunkirchen | 7 | 28 | 86 | 65 | 256 | 88 |
| DEC04 | Saarlouis | 13 | 16 | 42 | 29 | 145 | 82 |
| DEC05 | Saarpfalz-Kreis | 7 | 16 | 69 | 57 | 178 | 78 |
| DEC06 | St.Wendel | 8 | 19 | 48 | 38 | 146 | 84 |
| FRF11 | Bas-Rhin | 8 | 0 | 1 | 0 | 4 | 161 |
| FRF31 | Meurthe-et-Moselle | 147 | 0 | 1 | 0 | 45 | 354 |
| FRF32 | Meuse | 73 | 0 | 0 | 0 | 6 | 335 |
| FRF33 | Moselle | 475 | 0 | 3 | 0 | 518 | 864 |
| LU000 | Luxembourg | 66 | 0 | 33 | 11 | 862 | 318 |
Dans la représentation cartographique ci-dessous, sont représentées en couleur grise les communes pour lesquelles aucun équipement OSM n’est renseigné. Celles qui disposent d’au moins un équipement OSM sont représentées en orange. Les cercles proportionnels restituent le nombre d’équipements OSM par commune et la palette de couleur bleu la densité d’équipements pour 1000 habitants. Le nom des communes les plus densément équipées est affiché sur la représentation cartographique.
# Densités d'équipements par habitants (pour 1000 hab.) et km²
lau$DENS_POP <- lau$EqSum / lau$POP_2011 * 1000
# Communes ne disposant pas d'équipements
lau$EMPTY <- ifelse(lau$EqSum < 1, "TRUE", "FALSE")
# Cartographie
png(file = "fig/D04_lau2_dens_pop.png",width = sizes[1], height = sizes[2], res = res)
par(mar = c(0,0,1.2,0), mfrow = c(1,1))
typoLayer(lau, var = "EMPTY", col = c("orange", "lightgrey"), border = "ivory1",
lwd = 0.2, legend.pos = "n")
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 0.5, add = TRUE)
brks <- c(0.1,2,5,10, max(lau$DENS_POP))
cols <- carto.pal(pal1 = "blue.pal", n1 = 4)
propSymbolsChoroLayer(x = lau, var = "EqSum", var2 = "DENS_POP",
col = cols,
inches = 0.5, breaks = brks,
border = "grey50", lwd = 1,
legend.var.pos = "n",
legend.var2.pos = "n")
top <- lau[order(lau$EqSum, decreasing = TRUE),][1:10,]
labelLayer(top, txt = "LAU_LABEL", halo = TRUE, cex = 0.6, col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
legendChoro(pos = "topleft", title.cex = 0.8, values.cex = 0.6, nodata.col = "lightgrey",
title.txt = "Nb d'équipements\npour 1000 hab. (2011)",
nodata.txt = "Pas d'équipement",
breaks = brks, values.rnd = 3, frame = TRUE, col = cols)
legendCirclesSymbols(pos = "topright", inches = 0.5, title.cex = 0.8,
values.cex = 0.6, col = "white", frame = TRUE,
title.txt = "Nombre d'équipements OSM\n(parmi les 4 sélectionnés)",
var = c(10, 100, 400, max(lau$EqSum)))
layoutLayer(title = "Equipements OSM sur l'espace d'étude (LAU2)",
sources = "Eurostat, LAU version 2018, Contributeurs OpenStreetMap",
horiz = FALSE,
posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
Figure D4 - LAU2, densité d’équipements pour 1000 habitants

La table ci-dessous présente les numérateurs et dénominateurs des communes les plus densément équipées au regard de leur population.
tmp <- lau[order(lau$DENS_POP, decreasing = T),,drop=T][1:10,c("GISCO_ID", "LAU_LABEL","EqSum", "POP_2011", "DENS_POP")]
knitr::kable(tmp, row.names = F, digits = 1,
col.names = c("ID", "Nom commune", "Nb équipements OSM", "Population (2011)", "Densité (Eq. pour 1000 hab.)"))| ID | Nom commune | Nb équipements OSM | Population (2011) | Densité (Eq. pour 1000 hab.) |
|---|---|---|---|---|
| FR_55386 | Nonsard-Lamarche | 6 | 165.1 | 36.3 |
| FR_57645 | Semécourt | 13 | 871.8 | 14.9 |
| LU_1205 | Remich | 44 | 2952.0 | 14.9 |
| DE_07235129 | Sommerau | 1 | 77.0 | 13.0 |
| DE_07231054 | Hilscheid | 3 | 251.0 | 12.0 |
| FR_55245 | Heudicourt-sous-les-Côtes | 2 | 181.5 | 11.0 |
| DE_07134023 | Ellenberg | 1 | 94.0 | 10.6 |
| LU_0304 | Luxembourg | 862 | 81804.0 | 10.5 |
| FR_57350 | Jouy-aux-Arches | 15 | 1561.2 | 9.6 |
| DE_07235083 | Mehring | 21 | 2236.0 | 9.4 |
Cette représentation est reproduite avec la grille kilométrique.
## png
## 2
Figure D5 - Grille 1 km, densité d’équipements pour 1000 habitants

Les modèles d’interaction spatiale sont utilisés pour décrire-expliquer-prévoir les interactions entre les lieux. On distingue deux grandes familles de modèles selon le produit de l’interaction auquel on s’intéresse : l’interaction peut être saisie à travers des flux entre les lieux (flux de personnes, de marchandises, de richesse, d’information , etc.) ; l’interaction peut aussi être saisie à travers l’influence exercée par un lieu sur tous les autres (aire de marché d’un commerce, aire d’influence d’une ville, etc.). Ce second type est désigné par le terme de modèle de position. Le package SpatialPosition permet de calculer et de visualiser les résultats de ces modèles de positions : modèle de Reilly, modèle de Huff et modèle de Stewart. C’est ce modèle de Stewart que nous allons ici utiliser.
La méthode explorée ici consiste à mettre en relation les valeurs de potentiel de Stewart à différentes portées lissage (100-500 km). Cela permet notamment de faire émerger des pôles de concentration qui relèvent de différentes réalités spatiales. La méthodologie qui consiste à confronter ces échelles d’analyse a déjà été expérimentée dans différentes contributions (@grasland1999, @duboisgloersen2007, @hamez2011), notamment afin de faire émerger des pôles de concentration démographique de façon multiscalaire et où les limites discrètes des territoires ne constitue pas un frein à la représentation continue des phénomènes.
Ces méthodes étaient auparavant lourdes à implémenter, et nécessitaient l’usage de différents logiciels successivement. La reproductibilité des résultats étaient par ailleurs impossible à assurer. Aujourd’hui avec R et l’implémentation du package potential les choses ont bien changé. Pour réaliser cette modélisation, la fonction mcpotential du package sera utilisée pour calculer les potentiels de population et d’équipements dans différents voisinages géographiques. Le principe de cette fonction consiste à calculer une masse pour chaque lieu donné de l’espace d’étude en tenant compte de son voisinage géographique. La prise en compte des objets dans le voisinage géographique décroit avec la distance selon un seuil fixé par l’utilisateur et une fonction mathématique donnée.
Il est en ce sens indispensable de mener une réflexion sur le choix des paramètres utilisés pour le calcul des probabilités d’interaction. Le choix du beta, du span et de la fonction utilisée sont centraux pour estimer ces valeurs en fonction de la distance (Figure D6). En prenant juste l’exemple du beta, la probabilité d’interaction diminue plus fortement avec un beta égal à 2 qu’un beta équivalent à 4, mais la fonction prend aussi davantage en compte les valeurs lointaines (6 % à 4 km contre moins de 1 % avec un beta égal à 4).
png(file = "fig/D06A_graph1.png",width = sizes[1], height = sizes[2], res = res)
plot_inter(fun = "e", span = 2000, beta = 2, limit = 4000)
dev.off()## png
## 2
png(file = "fig/D06B_graph2.png",width = sizes[1], height = sizes[2], res = res)
plot_inter(fun = "e", span = 2000, beta = 4, limit = 4000)
dev.off()## png
## 2
Figure D6 - Effets des arguments span, beta et limits sur la fonction exponentielle de décroissance de la probabilité d’interaction en fonction de la distance

Les arguments de la fonction mcpotential sont les suivants :
x : les points utilisés en entrée du modèle. Il s’agit ici des centroides des carreaux de la grille kilométrique comprenant population et dénombrement d’équipements.y : les points sur lesquels sont calculés les potentiels de Stewart. Nous utilisons ici les mêmes points.fun : la fonction mathématique, décroissante avec la distance, utilisée pour calculer cette probabilité d’interaction.span : portée du lissage. Il s’agit de la distance où la probabilité d’interaction est égale à 0.5. Ici nous calculerons ce potentiel à trois portées : 2 km, 5km et 10km.beta : impédence de la fonction d’interaction définie comme suit : exp (-alpha * span ^ beta). On considère ici la valeur par défaut, utilisée largement en sciences sociales : 2.limit : les fonctions mathématiques utilisées tendent vers l’infini avec la distance. Le fait de fixer une limite au calcul des probabilités d’interaction permet d’alléger considérablement les calculs et de ne pas considérer les points situés à plus de la distance fixée par cet argument. Nous considérons ici 2 fois la distance du span.ncl : le nombre de coeurs du processeur utilisés pour paralléliser les calculs volumineux. En effet, cette probabilité d’interaction est calculée pour chaque élément de x. Cet argument permet d’alléger considérablement les calculs.var : les variables sur lesquelles le potentiel de Stewart est calculé. Dans notre cas, ce calcul sera réalisé sur la population, les 4 équipements séparément, et la somme des 4 équipements.Pour chaque carreau de grille, les équipements OSM sont dénombrés.
# Nombre d'équipements par carreau de grille (4 équipements)
grid50$osm <- CountPt(x = grid50, pt = osm, var = "type", equip = "OSM")
# Nombre de restaurants, banques, pharmacies et magasins d'électronique
grid50$resto <- CountPt(x = grid50, pt = osm, var = "categorie",
equip = "restaurant")
grid50$bank <- CountPt(x = grid50, pt = osm, var = "categorie",
equip = "banque")
grid50$pharm <- CountPt(x = grid50, pt = osm, var = "categorie",
equip = "pharmacie")
grid50$elec <- CountPt(x = grid50, pt = osm, var = "categorie",
equip = "electronique")La fonction mcpotential requiert en entrée une couche géographique de points. Les centroides de tous les carreaux de grille sont tout d’abord extraits.
Les potentiels de Stewart sont ensuite calculés à trois portées géographiques (2 km, 5km et 10 km). Les valeurs calculées sont regroupées dans le jeu de données d’entrée (couche de points).
# Calcul potentiel de Stewart : Poplation totale
ncl <- parallel::detectCores(all.tests = FALSE, logical = FALSE)-1
# Points
pts <- st_centroid(grid50)
# Sélection des colonnes sur lesquelles vont porter les calcul de potentiel
selecPot <- c("POP2015", "osm", "resto", "bank", "pharm", "elec")
# Span = 2000m, limit = 4000m
pot_2k <- mcpotential(x = pts, y = pts,
var = selecPot,
fun = "e", span = 2000, beta = 2, limit = 4000,
ncl = ncl)
colnames(pot_2k) <- paste0(colnames(pot_2k), "_2k")
pot_2k <- as.data.frame(pot_2k)
# Span = 5000m, limit = 10000
pot_5k <- mcpotential(x = pts, y = pts,
var = selecPot,
fun = "e", span = 5000, beta = 2, limit = 10000,
ncl = ncl)
colnames(pot_5k) <- paste0(colnames(pot_5k), "_5k")
pot_5k <- as.data.frame(pot_5k)
# Span = 10000m, limit = 20000
pot_10k <- mcpotential(x = pts, y = pts,
var = selecPot,
fun = "e", span = 10000, beta = 2, limit = 20000,
ncl = ncl)
colnames(pot_10k) <- paste0(colnames(pot_10k), "_10k")
pot_10k <- as.data.frame(pot_10k)
# Combinaison des dataframes et affectation à la grille de référence
pot <- cbind(pot_2k, pot_5k, pot_10k)
pot$id <- row.names(pot)
grid50 <- merge(grid50, pot, by = "id")
# Extraction des centroids et des coordonnées X / Y
pts <- st_centroid(grid50)
pts$X <- st_coordinates(pts)[,1]
pts$Y <- st_coordinates(pts)[,2]Voici le détail des couches composant l’objet pts, qui seront appelées successivement dans les traitements à venir. Le voisinage doit être compris par le span utilisé dans la fonction mcpotential :
| Nom de la couche | Descriptif |
|---|---|
| POP2015_2k | Potentiel population dans un voisinage de 2 km (source: Global Human Settlement) |
| POP2015_5k | Potentiel population dans un voisinage de 5 km (source: Global Human Settlement) |
| POP2015_10k | Potentiel population dans un voisinage de 10 km (source: Global Human Settlement) |
| osm_2k | Potentiel d’équipements OSM dans un voisinage de 2km |
| osm_5k | Potentiel d’équipements OSM dans un voisinage de 5km |
| osm_10k | Potentiel d’équipements OSM dans un voisinage de 10km |
| resto_2k | Potentiel de cafés-restaurants OSM dans un voisinage de 2km |
| resto_5k | Potentiel de cafés-restaurants OSM dans un voisinage de 5km |
| resto_10k | Potentiel de cafés-restaurants OSM dans un voisinage de 10km |
| bank_2k | Potentiel de banques OSM dans un voisinage de 2km |
| bank_5k | Potentiel de banques OSM dans un voisinage de 5km |
| bank_10k | Potentiel de banques OSM dans un voisinage de 10km |
| pharm_2k | Potentiel de pharmacies OSM dans un voisinage de 2km |
| pharm_5k | Potentiel de pharmacies OSM dans un voisinage de 5km |
| pharm_10k | Potentiel de pharmacies OSM dans un voisinage de 10km |
| elec_2k | Potentiel de magasins d’électronique OSM dans un voisinage de 2km |
| elec_5k | Potentiel de magasins d’électronique OSM dans un voisinage de 5km |
| elec_10k | Potentiel de magasins d’électronique OSM dans un voisinage de 10km |
Sur les bases de ces valeurs calculées à différentes portées géographiques, deux analyses aux objectifs bien différents vont suivre :
On cherche ici à évaluer la relation entre le nombre d’équipements OSM et la seule variable de contrôle à notre disposition au niveau transfrontalier : la population par carreau de grille d’un kilomètre.
Plusieurs points sont ici abordés :
Pour ce faire, nous utilisons ici les données issues des calculs de potentiel avec une portée de lissage de 5km.
On commence tout d’abord par cartographier ces deux potentiels. La fonction equipotentialdu package potential permet de générer des isolignes de valeurs égales. Ces valeurs sont définies à partir de l’analyse de la distribution des valeurs générées par le calcul des potentiels.
Dans les représentations, la rupture de couleur s’effectue à la valeur médiane de la distribution pour l’espace d’étude et suit une progression géométrique au niveau des discrétisations.
# Discrétisation des valeurs de potentiel obtenues et palette (rupture = médiane)
brks <- c(0,2000,4000,8000,16530,30000,60000, 120000, max(pts$POP2015_5k))
cols <- carto.pal(pal1 = "red.pal", pal2 = "green.pal", n1 = 4, n2 = 4)
# Construction d'isolignes en fonction des classes définies
pot_iso <- equipotential(x = pts, var = "POP2015_5k", breaks = brks,
xcoords = "X", ycoords = "Y", mask = nuts3)
# Cartographie
png(file = "fig/D07_pot_5k_pop.png",width = sizes[1], height = sizes[2], res = res)
par(mar = c(0,0,1.2,0))
plot(st_geometry(nuts3), col = NA, border = "ivory1", lwd = 0.2)
choroLayer(x = pot_iso,
var = "center",
breaks = brks,
col = cols,
border = NA,
legend.pos = "n",
add = TRUE)
plot(st_geometry(nuts3), col = NA, border = "ivory1", lwd = 1, add = TRUE)
top <- lau[order(lau$POP_2011, decreasing = TRUE),][1:10,]
labelLayer(top, txt = "LAU_LABEL", halo = TRUE, cex = 0.6, col= "#000000",
bg = "#FFFFFF50", overlap = FALSE)
legendChoro(pos = "topright", title.cex = 0.8, values.cex = 0.6, nodata = FALSE,
title.txt = "Population totale\nvoisinage = 5 km\nbeta = 2",
breaks = brks, values.rnd =0, frame = TRUE, horiz = FALSE, col = cols)
layoutLayer(title = "Potentiel population - 5 km",
sources = "Global Human Settlement, 2019",
horiz = FALSE,
posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
# Equipements OSM
# Discrétisation des valeurs de potentiel obtenues et palette (rupture = médiane)
brks <- c(0,1, 5,12.5,25,50,100,200,400,800, max(pts$osm_5k))
cols <- carto.pal(pal1 = "red.pal", pal2 = "green.pal", n1 = 5, n2 = 5)
# Construction d'isolignes en fonction des classes définies
pot_iso <- equipotential(x = pts, var = "osm_5k", breaks = brks,
xcoords = "X", ycoords = "Y", mask = nuts3)
# Cartographie
png(file = "fig/D08_pot_5k_equ.png", width = sizes[1], height = sizes[2], res = res)
par(mar = c(0,0,1.2,0))
plot(st_geometry(nuts3), col = NA, border = "ivory1", lwd = 0.2)
choroLayer(x = pot_iso,
var = "center",
breaks = brks,
col = cols,
border = NA,
legend.pos = "n",
add = TRUE)
plot(st_geometry(osmstudy), pch = 16, col = "black", cex = 0.2, add = TRUE)
plot(st_geometry(nuts3), col = NA, border = "ivory1", lwd = 1, add = TRUE)
labelLayer(top, txt = "LAU_LABEL", halo = TRUE, cex = 0.6, col= "#000000",
bg = "#FFFFFF50", overlap = FALSE)
legendChoro(pos = "topright", title.cex = 0.8, values.cex = 0.6, nodata = FALSE,
title.txt = "Equipements OSM\nvoisinage = 5 km\nbeta = 2",
breaks = brks, values.rnd =0, frame = TRUE, horiz = FALSE, col = cols)
layoutLayer(title = "Potentiel équipements OSM - 5 km (Pharmacies, banques, magasins d'électronique et cafés-restaurants)",
sources = "Contributeurs OpenStreetMap, 2019",
horiz = FALSE,
posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
Figure D7 - Population dans un voisinage gaussien de 5km

Figure D8 - Équipements OSM (sélection de 4 équipements) dans un voisinage gaussien de 5km

On s’intéresse à la relation existant entre le potentiel de population et le potentiel d’équipements. La corrélation existe et on souhaite extraire la valeur de ces résidus et observer s’ils suivent ou non une logique spatiale.
La relation testée est la suivante : log(nombre d’équipements) = a * log(population) + b
La corrélation est significative et on peut exclure l’hypothèse d’indépendance entre l’importance de la présence d’équipements OSM et la masse de population dans un voisinage gaussien de 5km. Dès lors et dans notre contexte un résidu positif (et réciproquement pour un résidu négatif) peut être interprété de la façon suivante :
# Retirer les géométries
pot_reg <- st_set_geometry(pts, NULL)
# Définir variables X-Y
var.y <- "osm_5k"
var.x <- "POP2015_5k"
# Suppression valeurs nulles
pot_reg <- pot_reg[pot_reg[,var.y] != 0
& pot_reg[,var.x] != 0,]
# Log model
model <- lm(log(pot_reg[,var.y]) ~ log(pot_reg[,var.x]))
pot_reg$RES <- residuals(model)
# Graphique
png(file = "fig/D09_pot_5k_model.png",width = sizes[1], height = sizes[2], res = res)
par(mar = c(4,4,0,0))
plot(log(pot_reg[,var.x]), log(pot_reg[,var.y]), axes=FALSE,
ylab = "Equipements dans un voisinage de 5 km",
xlab = "Population dans un voisinage de 5 km",
pch = 16, cex = 0.2)
box()
# Log scale
brks <- c(c(1,2,5) %o% 10^(0:5))
axis(side = 1, at=log(brks), labels = brks, cex.axis = 0.7)
axis(side = 2, at=log(brks), labels = brks, cex.axis = 0.7)
abline(model, col="red")
abline (h = log(c(1:10 %o% 10^(0:5))), col = "#7a7a7a", lwd = 0.3, lty = 3)
abline (v = log(c(1:10 %o% 10^(1:5))), col = "#7a7a7a", lwd = 0.3, lty = 3)
# Droite de régression et r
cf <- round(coef(model), 2)
eq <- paste0("log(Equipements) = ", cf[1],
ifelse(sign(cf[2])==1, " + ", " - "), abs(cf[2]), " log(POP_2015) ")
text(log(450), log(500), pos = 4, labels = eq , cex = 0.8)
rsq <- paste0("R-Squared = ", round(summary(model)$r.squared,2))
text(log(450), log(350), pos = 4, labels = rsq , cex = 0.8)
dev.off()## png
## 2
Le graphique ci-dessous montre une relation significative entre le potentiel d’équipements et celui de la population dans un voisinage gaussien de 5 km. Néanmoins, d’importants résidus négatifs apparaissent dans les espaces les moins bien dotés en équipements. Cela peut laisser présager d’une sous-représentation de ce type d’équipements dans ces espaces ou, plus probablement, de contributions significativement moins importantes dans ces espaces.
Figure D9 - Relation équipements OSM * Population

Les résidus sont enfin cartographiés afin d’évaluer l’éventuelle organisation spatiale qui les sous-tend.
# Discrétisation des valeurs de potentiel obtenues et palette
brks <- getBreaks(pot_reg$RES, method = "quantile", n = 10)
cols <- carto.pal(pal1 = "red.pal", pal2 = "blue.pal", n1 = 4, n2 = 5, middle = TRUE)
# Construction d'isolignes en fonction des classes définies
pot_reg <- merge(pts[,c("id", "X", "Y")], pot_reg[,c("id", "RES")], all.x = TRUE)
pot_iso <- equipotential(x = pot_reg, var = "RES", xcoords = "X", ycoords = "Y",
breaks = brks, mask = nuts3)
# Cartographie résidus
png(file = "fig/D10_pot_5k_res.png",width = sizes[1], height = sizes[2], res = res)
par(mar = c(0,0,1.2,0))
plot(st_geometry(nuts3), col = "darkgrey", border = NA)
choroLayer(x = pot_iso,
var = "center",
breaks = brks,
col = cols,
border = NA,
legend.pos = "n",
add = TRUE)
plot(st_geometry(osmstudy), pch = 16, col = "black", cex = 0.2, add = TRUE)
plot(st_geometry(nuts3), col = NA, border = "ivory1", lwd = 1, add = TRUE)
labelLayer(top, txt = "LAU_LABEL", halo = TRUE, cex = 0.6, col= "#000000",
bg = "#FFFFFF50", overlap = FALSE)
legendChoro(pos = "topright", title.cex = 0.8, values.cex = 0.6, nodata = FALSE,
title.txt = "Residus standardisés\ndu modèle",
breaks = brks, values.rnd =2, frame = TRUE, horiz = FALSE, col = cols)
layoutLayer(title = "Résidus de la régression log(eq. OSM) ~ log(pop 2015), potentiel gaussien 5 km, beta = 2, grille = 1km",
sources = "Contributeurs OpenStreetMap, Global Human Settlement, 2019",
horiz = FALSE,
posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
La cartographie des résidus révèle un remarquable effet de frontière entre la France et les pays voisins. Mis à part l’espace environnant Metz et l’extrême sud-ouest de l’espace d’étude (proche de la région parisienne), on observe significativement moins d’équipements OSM en France que pour l’espace situé de l’autre côté de la frontière, toute chose égale par ailleurs par rapport à sa masse de population.
Figure D10 - Cartographie des résidus, 4 équipements OSM : pharmacies, banques, cafés-restaurants, magasins d’électronique

La procédure ci-dessus est appliquée pays par pays sur cette zone d’étude pour la France, l’Allemagne et le Luxembourg. La discrétisation est la même pour les trois pays et est calculée à partir des valeurs des résidus français, qui présentent la plus grande étendue statistique.
## png
## 2
## png
## 2
## png
## 2
## png
## 2
## png
## 2
## png
## 2
Figure D11 - Relation équipements OSM * Population (France)

Figure D12 - Cartographie des résidus, 4 équipements OSM : pharmacies, banques, cafés-restaurants, magasins d’électronique (France)

Figure D13 - Relation équipements OSM * Population (Allemagne)

Figure D14 - Cartographie des résidus, 4 équipements OSM : pharmacies, banques, cafés-restaurants, magasins d’électronique (Allemagne)
Figure D15 - Relation équipements OSM * Population (Luxembourg)

Figure D16 - Cartographie des résidus, 4 équipements OSM : pharmacies, banques, cafés-restaurants, magasins d’électronique (Luxembourg)

On explore ici une méthode qui consiste à mettre en relation les valeurs de potentiel de Stewart à différentes portées lissage (2-5 km, 5-10 km). Cette méthode a déjà été éprouvée dans de précédentes études transfrontalières afin de faire émerger des pôles transfrontaliers en fonction de la concentration spatiale (De Ruffrey, Hamez, 2008). Dans cette étude, il s’agissait de faire émerger des espaces à enjeux transfrontaliers en analysant la déclinaison des taux de variation de la population (2001-2007) à différentes portées de voisinage spatial (10 km - 20 km).
Transposé à la question des équipements présents dans OpenStreetMap et à la problématique générale des petites et moyennes centralités, la mise en relation de ces concentrations d’équipements à différentes portées spatiales peut permettre de faire émerger des situations d’intérêt :
Il est aussi important de rappeler qu’avec cette méthode une absence de pic de concentration d’équipements n’est pas forcément synonyme d’absence d’équipements. Un rapport proche de zéro signifie simplement qu’il n’existe pas de concentration géographique d’équipements à cet endroit (répartition homogène des équipements OSM). Cela peut concerner à la fois des espaces peu équipés de façon homogène spatialement (nord-est de la Moselle par exemple) ou à l’inverse, qui concentrent les équipements sur un espace relativement étendu. C’est par exemple dans la représentation cartographique ci-dessus le cas du Sillon Lorrain situé entre Thionville et Metz, qui voit un léger pic de concentration localisé sur Amnéville, mais qui se distingue peu de son voisinage géographique proche.
Par ailleurs, dans un contexte d’analyse caractérisé par une complétude de l’information forcément imparfaite, cette méthode présente l’avantage de raisonner sur des différences locales. Et ainsi faire abstraction du degré de complétude hétérogène qui peut exister entre l’urbain et le rural éloigné, ou encore entre les différents pays composant l’espace d’étude et qui appelle nécessairement des routines de contribution OSM variées.
Il est cependant bon de rappeler que la validité théorique de cette méthode repose sur le fait que les contributions OSM soient équivalentes dans les voisinages géographiques sur lesquels portent ces calculs de potentiel. On peut supposer que ce soit le cas en général, avec quelques réserves néanmoins sur les zones frontalières (inégalités de contribution entre Forbach et Vörklingen comme l’ont montré l’analyse des cas d’étude).
Pour mettre en oeuvre ce socle méthodologique, il convient tout d’abord d’importer les potentiels calculés en amont à différentes portées de lissage et de les joindre dans le même objet, appelé ici pot_dif.
La mise en relation relative de deux potentiels à différentes portées de lissage (pot_dist(min)/pot_dist(max)) souligne les ruptures quantitatives entre différents voisinages, et ce quelque soit les ordres de grandeur du nombre d’équipements concernés. Les résultats combinent alors des petites centralités, caractérisées par un faible nombre d’équipements OSM mais qui les concentrent néanmoins dans leur voisinage géographique, avec les centralités de plus grande importance qui polarisent plus massivement les équipements au regard de leur périphérie urbaine.
Dans les cartes qui suivent, une zone géographique caractérisée par une valeur supérieure à 0.5 signifie que plus de 50 % des équipements d’un voisinage géographique étendu (5km, par exemple) sont localisés dans un voisinage géographique proche (2km, par exemple). Cela signifie concrètement que pour 1000 équipements présents dans un voisinage de 2 km et 2000 dans un voisinage de 5 km, le rapport vaudra 0.5.
Comme le montrent les représentations qui suivent, le choix de la portée de lissage influence grandement les résultats.
# Différences relatives
pts$REL_2_5K <- pts$osm_2k / pts$osm_5k
pts$REL_5_10K <- pts$osm_5k / pts$osm_10k
# Discrétisation des valeurs de potentiel obtenues et palette
brks <- c(0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1)
cols <- carto.pal(pal1 = "blue.pal", pal2 = "red.pal", n1 = 5, n2 = 5)
# Potentiel 2-5 k
pot_iso <- equipotential(x = pts, var = "REL_2_5K", breaks = brks,
mask = nuts3, xcoords = "X", ycoords = "Y")
# Cartographie
png(file = paste0("fig/XX_One_Page.png"),width = sizes[1], height = sizes[2], res = res)
par(mar = c(0,0,0,0))
plot(st_geometry(nuts3), col = "#12567E", border = "ivory1", lwd = 0.2)
choroLayer(x = pot_iso,
var = "center",
breaks = brks,
col = cols,
border = NA,
legend.pos = "n",
add = TRUE)
plot(st_geometry(osmstudy), pch = 16, col = "black", cex = 0.2, add = TRUE)
plot(st_geometry(nuts3), col = NA, border = "ivory1", lwd = 1, add = TRUE)
legendChoro(pos = "topright", title.cex = 0.8, values.cex = 0.6, nodata = FALSE,
title.txt = "Potentiel de Stewart\n(portée 2km /\nportée 5 km)",
breaks = brks, values.rnd =2, frame = TRUE, horiz = FALSE, col = cols)
layoutLayer(title = "Rapport de potentiel de Stewart sur les 4 équipements consolidés (2-5 km)",
sources = "Contributeurs OpenStreetMap, 2019",
horiz = FALSE,
posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
Figure D17 - Pics relatifs de centralité (2-5 km, tout équipement)

## png
## 2
Figure D18 - Pics relatifs de centralité (5-10 km, tout équipement)

Ces pics de concentration d’équipements étant générés dans un espace continu, il est peu évident d’apprécier la réalité administrative à laquelle ils se rattachent. C’est pourquoi nous proposons ici la mise en oeuvre d’une méthodologie pour identifier et représenter des objets géographiques qui intersectent ces pics de concentration.
Par ailleurs, comme l’ont montré les explorations cartographiques précédentes, l’identification des pics de concentration spatiale d’équipements est dépendant d’un certains nombres de paramètres qu’il convient de discuter, tant ils peuvent affecter les résultats :
Les fonctions DataCenter et MapCenter permettent de jouer sur ces paramètres, d’extraire les communes (ou tout autre objet géographique) qui intersectent des pôles de concentration spatiale d’équipement et d’en proposer des représentations cartographiques de synthèse.
La fonction DataCenter permet d’identifier les objets géographiques qui intersectent des pics de concentration spatiale. Un pic de concentration est ici défini comme une valeur élevée sur le rapport mettant en relation le potentiel d’équipements à courte distance et son vis-à-vis à plus longue distance. Elle prend en entrée deux objets préalablement calculés : - x : la couche géographique que l’on souhaite intersecter avec les pics de concentration (par exemple les LAU2 de l’espace d’étude). - pot : l’objet sf de type points qui contient les valeurs de potentiel de Stewart préalablement calculées.
L’objet pot doit contenir des informations préalablement calculées : - pot.min : le nom de la variable auquel se rattache les valeurs de potentiel de portée la moins importante (2 km par exemple). - pot.max : le nom de la variable auquel se rattache les valeurs de potentiel de portée la plus importante (5 km par exemple). - xcoords : le nom de la variable qui contient les coordonnées en longitude des points. - ycoords : le nom de la variable qui contient les coordonnées en latitude des points.
Dès lors, il est possible de jouer sur les paramètres évoqués plus haut : - threshold : la valeur seuil du pic de concentration à retenir pour l’intersection avec les objets géographiques. Par définition, il est compris entre 0 (pas de concentration / pas d’équipement) et 1 (concentration maximale dans un voisinage géographique proche). - var : une variable de x qui contient une valeur numérique. Cette variable est utilisée pour exclure certains objets de x intersectés (population inférieure à x habitants, communes avec au moins y équipements, par exemple). - exclude.var.val : valeur du seuil d’exclusion. - exclude.var.superior : sens du seuil d’exclusion. Si TRUE on exclut les objets géographiques au-dessus de ce seuil, si FALSE les objets en dessous.
La fonction renvoie un vecteur. Les modalités de ce vecteur sont TRUE si l’objet géographique intersecte un pic de concentration et FALSE si ce n’est pas le cas.
DataCenter <- function (x, pot, pot.min, pot.max, xcoords, ycoords, threshold,
var, exclude.var.val, exclude.val.superior) {
tmp <- st_set_geometry(pot, NULL)
# Rapport de potentiel (min / max)
tmp[,"REL"] <- tmp[,pot.min] / tmp[,pot.max]
pot <- cbind(pot, tmp[,"REL"])
colnames(pot)[length(pot)-1] <- "REL"
# Création isolignes
pot_iso <- equipotential(x = pot, var = "REL",
breaks = c(0,0.2,0.3,0.4,0.5,0.6,0.7,0.8,1),
mask = nuts3,
xcoords = xcoords, ycoords = ycoords)
# Extraction des objets géographiques intersectant des points de grilles au dessus du seuil
pot <- pot[pot$REL >= threshold,] # Points au dessus du seuil défini
inter <- st_intersects(x, pot) # Intersection avec l'objet géo de référence
x$PIC <- sapply(X = inter, FUN = length) # nb de point par objet géo de réf
x <- st_set_geometry(x, NULL) # suppression géométries
x$PIC <- ifelse(x$PIC > 0, "TRUE", "FALSE") # Si nb points > 0 par objet géo alors TRUE sinon FALSE
# Ne sélectionner que les objets géographiques qui répondent à une condition
# "moins/plus de x" pour une variable donnée.
for (i in 1:nrow(x)){
if (exclude.val.superior == FALSE){
x[i, "PIC"] <- ifelse (x[i, var] >= exclude.var.val, x[i, "PIC"], "FALSE")
}
if (exclude.val.superior == TRUE){
x[i, "PIC"] <- ifelse (x[i, var] <= exclude.var.val, x[i, "PIC"], "FALSE")
}
}
return(x$PIC)
}La fonction MapCenter reprend les objets d’entrées et les paramètres de la fonction DataCenter. La fonction retourne deux représentations cartographiques exportées au format .png dans le dossier de travail.
Pour la gestion de la mise en page et de l’export des documents, la fonction prend des arguments additionnels :
- mask : paramètre de la fonction equipotential du package potential qui permet d’intersecter la représentation des isolignes avec un espace donné et ainsi éviter les effets de bords.
- label : Un label pour identifier le nom des objets géographiques intersectés sur la carte. - text.pic : Texte figurant en légende présentant le rapport de potentiel. - text.var : Texte figurant en légende et dans le titre dédié à la présentation de ce sur quoi porte le potentiel. - text.x : Texte figurant dans le titre dédié à la présentation de la maille d’intersection. - fig.path : Chemin pour gérer l’export de la figure.
Les représentations cartographiques sont générées au format .png et sont enregistrées dans le répertoire de travail courant avec l’extension fig.path.png.
MapCenter <- function (x, pot, pot.min, pot.max, xcoords, ycoords, threshold,
var, exclude.var.val, exclude.val.superior, mask,
label = NULL, text.pic = NULL, text.var = NULL,
text.x = "maillage", fig.path) {
tmp <- st_set_geometry(pot, NULL)
# Rapport de potentiel (min / max)
tmp[,"REL"] <- tmp[,pot.min] / tmp[,pot.max]
pot <- cbind(pot, tmp[,"REL"])
colnames(pot)[length(pot)-1] <- "REL"
# Création isolignes
pot_iso <- equipotential(x = pot, var = "REL",
breaks = c(0,0.2,0.3,0.4,0.5,0.6,0.7,0.8,1),
mask = nuts3,
xcoords = xcoords, ycoords = ycoords)
# Extraction des objets géographiques intersectant des points de grilles au dessus du seuil
pot <- pot[pot$REL >= threshold,] # Points au dessus du seuil défini
inter <- st_intersects(x, pot) # Intersection avec l'objet géo de référence
x$PIC <- sapply(X = inter, FUN = length) # nb de point par objet géo de réf
x <- x[x$PIC > 0,] # Garder les polygones qui contiennent au moins 1 point
x$PIC <- "TRUE" # Remplacer les valeurs numériques par "TRUE".
# Ne sélectionner que les objets géographiques qui répondent à une condition
# "moins/plus de x pour une variable donnée.
tmp <- st_set_geometry(x, NULL)
for (i in 1:nrow(tmp)){
if (exclude.val.superior == FALSE){
tmp[i, "PIC"] <- ifelse (tmp[i, var] >= exclude.var.val, tmp[i, "PIC"], "FALSE")
}
if (exclude.val.superior == TRUE){
tmp[i, "PIC"] <- ifelse (tmp[i, var] <= exclude.var.val, tmp[i, "PIC"], "FALSE")
}
}
x <- merge(x, tmp)
# On ne garde que les objets qui répondent aux conditions
x <- x[x$PIC == "TRUE",]
# Pics de potentiel et objets géographiques intersectant ces pics avec variable contrôle
sizes <- getFigDim(x = mask, width = 3000, mar = c(0,0,1.2,0), res = 400)
brks <- c(0,0.2,0.3,0.4,0.5,0.6,0.7,0.8,1)
cols <- carto.pal(pal1 = "blue.pal", pal2 = "red.pal", n1 = 4, n2 = 4)
png(file = fig.path, width = sizes[1], height = sizes[2], res = 400)
print({
par(mar = c(0,0,1.2,0))
plot(st_geometry(mask), col = NA, border = NA)
choroLayer(x = pot_iso, var = "center", breaks = brks, col = cols,
border = NA, legend.pos = "n", add = TRUE)
plot(st_geometry(x), col = NA, border = "ivory1", lwd = 0.5, add = TRUE)
plot(st_geometry(mask), col = NA, border = "black", lwd = 1, add = TRUE)
labelLayer(x = x, txt = label, halo = TRUE, cex = 0.5,
col= "#000000", bg = "#FFFFFF50", overlap = FALSE)
legendChoro(pos = "topleft", title.cex = 0.6, values.cex = 0.5, nodata = FALSE,
title.txt = text.pic, breaks = brks, values.rnd =2, frame = TRUE, col = cols)
layoutLayer(title = paste0("Objets géographiques répondant au critère de centralité (",text.x, ", seuil = ", threshold,")"),
sources = "Contributeurs OpenStreetMap, 2019", posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2020", col = "#990000", horiz = FALSE)
dev.off()
})
}La mise en oeuvre de ces fonctions permet maintenant de discuter des paramètres permettant de faire émerger des LAU qui présentent des caractéristiques de concentration d’équipements, et donc peut-être, de centralité ?
Commençons tout d’abord par analyser la distribution des valeurs générées par nos deux rapports de voisinage (2-5 km et 5-10 km). L’analyse portant sur les pics de centralité, les 10 centiles de la distribution les plus élevés de ces deux indicateurs sont ici calculées pour chaque point de grille kilométrique.
## 90% 91% 92% 93% 94% 95% 96% 97%
## 0.2956967 0.3103546 0.3267700 0.3475963 0.3693298 0.3969088 0.4297888 0.4718969
## 98% 99% 100%
## 0.5267184 0.6176611 1.0000000
## 90% 91% 92% 93% 94% 95% 96% 97%
## 0.3851885 0.3943852 0.4069172 0.4216881 0.4391403 0.4582859 0.4821731 0.5151596
## 98% 99% 100%
## 0.5669369 0.6544162 0.9226445
Il en ressort notamment que, pour ces 4 équipements sélectionnés et pour cet espace d’étude :
Avec un rapport de 0.296 pour le premier rapport de voisinage, cela signifie concrètement que pour 1000 équipements dans un voisinage géographique de 5 km, 296 sont localisés dans un voisinage de 2 km.
Nous allons utiliser ces bornes à présent pour identifier les communes qui intersectent ces pics de concentration d’équipements.
Dans un premier temps, les communes qui intersectent les petits pics de centralité (10 % des valeurs les plus élevées threshold = 0.296) sont identifiées.
Dans la représentation ci-dessous, on définit qu’une commune doit disposer d’au minimum 5 équipements OSM pour être considérée comme centrale. Le fait de seuiller l’analyse à 5 équipements permet notamment d’exclure des microscopiques espaces de concentration d’équipements, en Meuse et Meurthe-et-Moselle notamment.
Ces paramètres permettent notamment de faire émerger les conurbations à la frontière luxembourgeoise et au niveau d’Amnéville. En effet, ces communes disposent d’un nombre d’équipements plutôt homogène dans un voisinage géographique proche.
MapCenter (x = lau,
pot = pts,
pot.min = "osm_2k",
pot.max = "osm_5k",
xcoords = "X",
ycoords = "Y",
var = "EqSum",
exclude.var.val = 5,
exclude.val.superior = FALSE,
threshold = 0.296,
mask = nuts3,
label = "LAU_LABEL",
text.pic = "Potentiel de Stewart\n(portée 2km /\nportée 5km)",
text.var = "Equipements (4 consolidés)",
text.x = "LAU2",
fig.path = "fig/D19_pic25_thr10_all.png")## png
## 2
Figure D19 - Communes disposant de caractéristiques de centralité (2-5 km, + de 5 équipements, seuil du pic = 0.296)

En augmentant l’argument threshold à 0.396 on visualise à présent les communes qui recoupent un pic de concentration correspondant aux 5 % des valeurs les plus élevées.
MapCenter (x = lau,
pot = pts,
pot.min = "osm_2k",
pot.max = "osm_5k",
threshold = 0.396,
var = "EqSum",
exclude.val.superior = FALSE,
exclude.var.val = 5,
mask = nuts3,
xcoords = "X",
ycoords = "Y",
label = "LAU_LABEL",
text.pic = "Potentiel de Stewart\n(portée 2km /\nportée 5km)",
text.var = "Equipements (4 consolidés)",
text.x = "LAU2",
fig.path = "fig/D20_pic25_thr05_all.png")## png
## 2
Figure D20 - Communes disposant de caractéristiques de centralité (2-5 km, + de 5 équipements, seuil du pic = 0.396)

Avec ce même rapport de potentiel, on décide maintenant d’extraire les communes qui intersectent les 1 % des pics de concentration d’équipements les plus importants (portée 2 km / portée 5 km > 0.618).
C’est donc une image des communes qui sont caractérisées par les différentiels de pic de concentration locale les plus importants qui s’offrent à nous ici.
MapCenter (x = lau, pot = pts, pot.min = "osm_2k", pot.max = "osm_5k", threshold = 0.618,
var = "EqSum", exclude.val.superior = FALSE, exclude.var.val = 5,
mask = nuts3, xcoords = "X", ycoords = "Y",
label = "LAU_LABEL",
text.pic = "Potentiel de Stewart\n(portée 2km /\nportée 5km)",
text.var = "Equipements (4 consolidés)",
text.x = "LAU2",
fig.path = "fig/D21_pic25_thr01_all.png")## png
## 2
Figure D21 - Communes disposant de caractéristiques de centralité (2-5 km, + de 5 équipements, seuil du pic = 0.618)

Le fait d’élargir la portée de ce rapport de potentiel (5-10 km contre 2-5 km précédemment) produit une toute autre image. Ce contexte géographique d’analyse illustre ici davantage des conurbations présentant des pics de centralité. Cette portée de lissage est d’ailleurs sûrement plus appropriée à comparer convenablement les LAU2 français et ceux des pays voisins et contourner les effets de MAUP évoqués plus haut.
On s’intéresse ici aux 10 % des valeurs les plus élevées dans ce contexte géographique (seuil 0.391). Les communes qui intersectent ces pics doivent comporter plus de 10 équipements OSM pour être considérées comme présentant des caractéristiques de centralité dans ce contexte géographique.
MapCenter (x = lau, pot = pts, pot.min = "osm_5k" , pot.max = "osm_10k",
var = "EqSum", threshold = 0.391, exclude.val.superior = FALSE,
exclude.var.val = 10, mask = nuts3, xcoords = "X", ycoords = "Y",
label = "LAU_LABEL",
text.pic = "Potentiel de Stewart\n(portée 5km /\nportée 10km)",
text.var = "Equipements (4 consolidés)",
text.x = "LAU2",
fig.path = "fig/D22_pic510_thr05_all.png")## png
## 2
Figure D22 - Communes disposant de caractéristiques de centralité dans un voisinage géographique large (5-10 km, + de 10 équipements, seuil du pic = 0.458)

Que se passe-t-il en déclinant cette approche en différenciant à présent les équipements les uns avec les autres ? Nous proposons ici deux sorties, l’une portant sur un équipement de proximité (les cafés-restaurants), et l’autre sur un équipement intermédiaire (les magasins d’électronique).
On souhaite pour ces analyses qu’une commune contiennent au moins 5 équipements cafés-restaurants pour être considérée comme une centralité et au moins 3 équipements pour les magasins d’électronique.
# Calcul rapports de potentiel
pts$resto_2_5K <- pts$resto_2k / pts$resto_5k
pts$elec_2_5K <- pts$elec_2k / pts$elec_5k
# Analyse distribution
quantile(pts$resto_2_5K, probs = seq(0.9,1,0.01), na.rm = TRUE)## 90% 91% 92% 93% 94% 95% 96% 97%
## 0.2911239 0.3044535 0.3208588 0.3395601 0.3606907 0.3865194 0.4201765 0.4599115
## 98% 99% 100%
## 0.5138534 0.5997663 1.0000000
## 90% 91% 92% 93% 94% 95% 96% 97%
## 0.2994971 0.3231116 0.3549421 0.3929167 0.4316268 0.4707005 0.5007325 0.5691829
## 98% 99% 100%
## 0.6660147 0.7696245 1.0000000
# Cafés Restaurants
MapCenter (x = lau, pot = pts, pot.min = "resto_2k" , pot.max = "resto_5k",
var = "restaurant", threshold = 0.387, exclude.val.superior = FALSE,
exclude.var.val = 10, mask = nuts3, xcoords = "X", ycoords = "Y",
label = "LAU_LABEL",
text.pic = "Potentiel de Stewart\n(portée 2km /\nportée 5km)",
text.var = "Nombre de cafés-restaurants",
text.x = "LAU2",
fig.path = "fig/D23_pic25_thr05_resto.png")## png
## 2
# Mafasins d'électronique
MapCenter (x = lau, pot = pts, pot.min = "elec_2k" , pot.max = "elec_5k",
var = "electronique", threshold = 0.471, exclude.val.superior = FALSE,
exclude.var.val = 5, mask = nuts3, xcoords = "X", ycoords = "Y",
label = "LAU_LABEL",
text.pic = "Potentiel de Stewart\n(portée 2km /\nportée 5km)",
text.var = "Nombre de magasins d'électronique",
text.x = "LAU2",
fig.path = "fig/D24_pic25_thr05_elec.png")## png
## 2
Le fait d’appliquer cette méthode à des équipements plus rares, comme les magasins d’électronique, impacte nécessairement l.
Figure D23 - Communes disposant de caractéristiques de centralité pour les équipements de type cafés-restaurants (2-5 km, + de 5 équipements, seuil du pic = 0.387)

Figure D24 - Communes disposant de caractéristiques de centralité pour les équipements de type magasins d’électronique (2-5 km, + de 3 équipements, seuil du pic = 0.471)

Après avoir discuté de l’importance de ces paramètres pour l’identification de potentielles centralités d’équipements frontalières, on propose ici une typologie de synthèse qui identifie les communes qui intersectent des pics de centralité (5 % des valeurs les plus élevées) pour les 2 groupes de paramètre suivants :
Le croisement de ces deux indicateurs de centralité aboutit à une typologie où l’on identifie les communes qui intersectent des pics de centralité au niveau régional et local (en rouge sur la carte), pour aucun des deux critères (en gris), pour le niveau de centralité régional uniquement (en vert), et pour le niveau de centralité local uniquement (en vert).
# Communes intersectant pics concentration à différents voisinages
lau$PIC_25k <- DataCenter (x = lau, pot = pts, pot.min = "osm_2k" , pot.max = "osm_5k",
var = "EqSum", threshold = 0.458, exclude.val.superior = FALSE,
exclude.var.val = 10, xcoords = "X", ycoords = "Y")
lau$PIC_510k <- DataCenter (x = lau, pot = pts, pot.min = "osm_5k" , pot.max = "osm_10k",
var = "EqSum", threshold = 0.391, exclude.val.superior = FALSE,
exclude.var.val = 10, xcoords = "X", ycoords = "Y")
# Extraction communes d'intérêt
tmp <- lau[,c("GISCO_ID", "LAU_LABEL", "POP_2011", "EqSum","PIC_25k", "PIC_510k")]
# Typo
tmp$PIC_25k <- ifelse(tmp$PIC_25k == "TRUE", 1, 0)
tmp$PIC_510k <- ifelse(tmp$PIC_510k == "TRUE", 2, 0)
tmp$typo <- tmp$PIC_25k + tmp$PIC_510k
tmp <- tmp[tmp$typo > 0,]
tmp$typo <- as.character(tmp$typo)
# Modalités
tmp$typo <- ifelse(tmp$typo == "1", "1 pic (2-5 km)",
ifelse(tmp$typo == "2", "1 pic (5-10 km)",
ifelse(tmp$typo == "3", "pics 2 voisinages", NA)))
# Carto
png(file = "fig/D25_synthesis.png", width = sizes[1], height = sizes[2], res = res)
par(mar = c(0,0,1.2,0))
plot(st_geometry(nuts3), col = "lightgrey", border = NA)
typoLayer(x = tmp, var ="typo",
col = c("#b20202", "#3b69bc","#318c49"),
legend.values.order = c("pics 2 voisinages", "1 pic (2-5 km)", "1 pic (5-10 km)"),
legend.pos = "n", border = "ivory1", add = TRUE)
plot(st_geometry(osmstudy), pch = 16, col = "white", cex = 0.25, add = TRUE)
plot(st_geometry(nuts3), col = NA, border = "black", lwd = 1, add = T)
labelLayer(x = tmp[tmp$typo == "pics 2 voisinages",], txt = "LAU_LABEL", halo=TRUE,
cex = 0.6, col= "#000000", bg = "#FFFFFF", overlap = FALSE)
legendTypo(pos = "topright",
title.txt = "LAU2 avec pics de\nconcentration d'équipements",
title.cex = 0.7, values.cex = 0.6,
col = c("#b20202", "#3b69bc","#318c49"),
categ = c("pics 2 voisinages", "1 pic (2-5 km)", "1 pic (5-10 km)"),
cex = 0.75, nodata = FALSE, frame = TRUE)
layoutLayer(title = "Concentration d'équipements dans 2 rapports de voisinage (communes dotés de plus de 10 équipements OSM)",
sources = "Contributeurs OpenStreetMap, 2019", posscale = c(4002561, 2879651), frame= FALSE,
author = "UMS RIATE, 2020", col = "#990000", horiz = FALSE)
dev.off()## png
## 2
Figure D25 - Cartographie de synthèse du croisement de 2 approches de voisinage (2-5 et 5-10 km)

Voici le listing des communes concernées, leur population respective et le nombre d’équipements OSM qu’elles regroupent.
Nous rappelons que cette image de la centralité transfrontalière est valable toute chose égale par ailleurs au regard des équipements sélectionnés, du niveau de complétude de la base OSM, de la méthode utilisée (rapports de potentiels) et des paramètres définis pour identifier les communes qui intersectent des pics de concentration.
tmp <- st_set_geometry(tmp, NULL)
tmp <- tmp[,c("GISCO_ID", "LAU_LABEL", "POP_2011", "EqSum", "typo")]
tmp <- tmp[order(tmp$POP_2011, decreasing = TRUE),]
knitr::kable(tmp, row.names = FALSE, digits = 1, padding = 0)| GISCO_ID | LAU_LABEL | POP_2011 | EqSum | typo |
|---|---|---|---|---|
| DE_10041100 | Saarbrücken, Landeshauptstadt | 175741.0 | 874 | pics 2 voisinages |
| FR_57463 | Metz | 120461.2 | 518 | pics 2 voisinages |
| DE_07211000 | Trier, Stadt | 105260.0 | 476 | pics 2 voisinages |
| LU_0304 | Luxembourg | 81804.0 | 862 | pics 2 voisinages |
| DE_10043114 | Neunkirchen, Kreisstadt | 47398.0 | 256 | pics 2 voisinages |
| FR_57672 | Thionville | 41025.0 | 89 | pics 2 voisinages |
| DE_10044115 | Saarlouis, Kreisstadt | 37136.0 | 145 | pics 2 voisinages |
| DE_07134045 | Idar-Oberstein, Stadt | 30379.0 | 88 | 1 pic (5-10 km) |
| DE_10042113 | Merzig, Kreisstadt | 30355.0 | 99 | pics 2 voisinages |
| BE_81001 | Arlon / Aarlen | 27986.0 | 120 | pics 2 voisinages |
| DE_10046117 | St. Wendel, Kreisstadt | 26208.0 | 146 | 1 pic (2-5 km) |
| FR_57480 | Montigny-lès-Metz | 22458.9 | 27 | 1 pic (5-10 km) |
| FR_57631 | Sarreguemines | 21392.6 | 35 | 1 pic (2-5 km) |
| DE_10044111 | Dillingen/ Saar, Stadt | 20808.0 | 49 | 1 pic (5-10 km) |
| DE_07235068 | Konz, Stadt | 17923.0 | 62 | 1 pic (5-10 km) |
| LU_0202 | Differdange | 17664.0 | 111 | 1 pic (5-10 km) |
| DE_10042112 | Losheim am See | 16415.0 | 57 | 1 pic (2-5 km) |
| FR_57757 | Yutz | 16315.4 | 10 | 1 pic (5-10 km) |
| FR_57606 | Saint-Avold | 16214.3 | 23 | pics 2 voisinages |
| BE_81004 | Aubange | 15835.0 | 56 | 1 pic (5-10 km) |
| FR_54431 | Pont-à-Mousson | 14497.0 | 28 | 1 pic (5-10 km) |
| LU_0209 | Pétange | 13757.0 | 58 | 1 pic (5-10 km) |
| FR_57751 | Woippy | 12982.4 | 14 | 1 pic (5-10 km) |
| LU_0213 | Sanem | 12946.0 | 41 | 1 pic (5-10 km) |
| LU_0303 | Hesperange | 10572.0 | 43 | 1 pic (5-10 km) |
| FR_57447 | Marly | 9668.0 | 10 | 1 pic (5-10 km) |
| DE_10044121 | Wallerfangen | 9527.0 | 16 | 1 pic (5-10 km) |
| FR_57283 | Hagondange | 9485.3 | 24 | 1 pic (2-5 km) |
| LU_0104 | Käerjeng | 8643.0 | 37 | 1 pic (5-10 km) |
| FR_54273 | Jarny | 8532.2 | 11 | pics 2 voisinages |
| BE_85046 | Habay | 8218.0 | 24 | 1 pic (2-5 km) |
| FR_54382 | Mont-Saint-Martin | 8105.6 | 18 | 1 pic (5-10 km) |
| DE_10042115 | Perl | 7593.0 | 45 | 1 pic (2-5 km) |
| LU_0409 | Mersch | 6941.0 | 48 | 1 pic (2-5 km) |
| DE_07134010 | Birkenfeld, Stadt | 6731.0 | 27 | 1 pic (2-5 km) |
| DE_10044123 | Ensdorf | 6605.0 | 16 | 1 pic (5-10 km) |
| LU_0310 | Walferdange | 6563.0 | 33 | 1 pic (5-10 km) |
| DE_07235118 | Saarburg, Stadt | 6445.0 | 46 | 1 pic (2-5 km) |
| FR_57474 | Mondelange | 6047.3 | 11 | 1 pic (2-5 km) |
| LU_0309 | Strassen | 6023.0 | 44 | 1 pic (5-10 km) |
| DE_07235045 | Hermeskeil, Stadt | 5623.0 | 30 | 1 pic (2-5 km) |
| LU_0305 | Niederanven | 5607.0 | 27 | 1 pic (5-10 km) |
| FR_54322 | Longuyon | 5550.2 | 16 | pics 2 voisinages |
| LU_0301 | Bertrange | 5255.0 | 42 | 1 pic (5-10 km) |
| FR_57487 | Moulins-lès-Metz | 5153.4 | 13 | 1 pic (5-10 km) |
| FR_57628 | Sarralbe | 4547.8 | 17 | pics 2 voisinages |
| LU_0211 | Roeser | 4480.0 | 29 | 1 pic (5-10 km) |
| FR_54415 | Pagny-sur-Moselle | 4037.6 | 10 | 1 pic (2-5 km) |
| FR_57620 | Sainte-Marie-aux-Chênes | 3841.3 | 13 | 1 pic (2-5 km) |
| FR_57413 | Longeville-lès-Saint-Avold | 3798.1 | 13 | pics 2 voisinages |
| LU_0302 | Contern | 3142.0 | 11 | 1 pic (5-10 km) |
| LU_0107 | Kopstal | 2983.0 | 10 | 1 pic (5-10 km) |
| FR_57616 | Saint-Julien-lès-Metz | 2978.1 | 18 | 1 pic (5-10 km) |
| LU_1205 | Remich | 2952.0 | 44 | 1 pic (2-5 km) |
| LU_0306 | Sandweiler | 2491.0 | 15 | 1 pic (5-10 km) |
| FR_57039 | Augny | 2285.3 | 13 | 1 pic (5-10 km) |
| LU_0207 | Leudelange | 1809.0 | 10 | 1 pic (5-10 km) |
| DE_07231123 | Thalfang | 1770.0 | 10 | 1 pic (2-5 km) |
| FR_57350 | Jouy-aux-Arches | 1561.2 | 15 | 1 pic (5-10 km) |
UMS 2414 RIATE (CNRS - Université de Paris)