Les analyses de complétude réalisées à l’échelle de la Grande Région pour la France ont permis de mettre en évidence des différentiels entre la présence d’équipements référencés du côté d’OSM et la base française de référence, la BPE. S’agissant des analyses menées dans un contexte transnational, nous avons pu apprécier les différentiels observés entre régions NUTS3 à partir d’une sélection d’équipements consolidés et en testant les résidus des relations avec la seule variable de contrôle disponible à une granularité géographique fine (1km), la population totale. Ces approches permettent de qualifier la sur et sous-représentations d’équipements OSM au regard de bases de données de référence. Mais elles se caractérisent aussi par certaines limites que les enquêtes Terrain se proposent de relever :
Disposer d’autres références que la BPE pour discuter de la complétude des points OSM. En effet, outre le fait que l’ensemble des équipements contenus dans la BPE ne sont pas tous géoréférencés ou parfois mal géoréférencés, la mesure de qualité menée par l’INSEE et mise à disposition depuis Progedo qui vise à quantifier d’éventuels excédents ou déficits d’équipements révèle notamment que certains petits commerces, assez volatils peuvent présenter un taux important de faux actifs (établissements fermés mais non encore radiés dans le répertoire SIRENE). La BPE, source institutionnelle de référence, ne peut donc idéalement pas être considérée comme l’unique base de référence pour qualifier la sur ou sous-représentation d’équipements OSM.
Dépasser les frontières. N’ayant pas de retours quant à l’existence de bases de données équivalentes à la BPE côté luxembourgeois, belge ou allemand, l’enquête de Terrain se révèle être le moyen de surmonter ce manque.
Confrontation d’échelles géographiques. L’ajout d’un contexte intra-urbain permet de qualifier les différences de contribution OSM, si elles existent, spatialement au sein de la ville.
On cherche donc ici à évaluer les écarts entre la présence d’équipements OSM dans un contexte international, à une granularité géographique fine (échelle de la rue ou d’hyper-centres). Cette approche reposant sur des enquêtes de terrain forcément coûteuses, ces relevés de terrains se basent sur une sélection d’espaces pertinents au regard de la thématique d’analyse : différentes situations dans la hiérarchie urbaine, concentrer les recherches sur des espaces à forte densité d’équipements (centres commerciaux, rues commerçantes) ou encore présentant un intérêt au regard de leur situation transfrontalière (Forbach-Vörklingen et Creutzwald-Uberherrn, distantes de quelques kilomètres seulement).
## Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
library(cartography)
library(reshape2) # Manipulation de données
library(leaflet) # Cartographie interactiveCinq zones d’étude sont ciblées pour les relevés de terrain : deux couples de communes frontalières franco-allemandes (Völklingen-Forbach et Überherrn-Creutzvald), plusieurs rues à vocation commerciales dans l’hypercentre de Metz (Metz-Centre), le quartier de la gare de Metz (Metz-Sablons) et enfin les commerces situés dans le périmètre de la vaste zone commerciale d’Actisud, qui recouvre partiellement les communes de Jouy-aux-Arches, Augny et Moulins-lès-Metz.
Les relevés de terrain ont été réalisés entre juillet 2018 et mars 2020 par les membres de l’équipe du LOTERR (université de Lorraine) : géoréférencement systématique de l’ensemble des locaux commerciaux observés suivant la classification du CNFG (cf partie préparation des données). L’UMS RIATE s’est ensuite chargé de définir des correspondances entre la classification du CNFG, la nomenclature de la BPE et les clés-valeurs OSM d’intérêt pour n’extraire que les 15 équipements pour l’étude.
Voici la localisation géographique générale des terrains d’enquête.
figure C01 - Périmètre des relevés de terrain

Les données consolidées issues de la partie dédiée à la préparation sont importées. L’analyse utilisera les couches d’informations géographiques suivantes :
La couche equipements contient l’ensemble des équipements consolidés, recouvrant les 15 équipements cibles (boulangeries, boucheries, pharmacies, banques, cafés-restaurant, salons de coiffure, opticiens, alimentation, magasins de vêtement, magasins d’électronique, magasins de chaussure, magasins d’ameublement, théâtres, cinémas et stations-service) et les trois sources d’information (OSM, BPE, relevés de terrain).
La couche releve contient les relevés de terrain réalisés par le LOTERR avec une revue exhaustive des équipements commerciaux sur les zones enquêtées. Cette couche contient également l’appartenance de l’équipement à la classification CNFG utilisée pour référencer chacun des équipements recensés.
La couche lau, qui contient les limites communales.
# Import de la couche équipement BPE - OSM
ptInput <- st_read("data/geom.gpkg", layer = "equipements", quiet = TRUE,
stringsAsFactors = FALSE)
lau <- st_read( "data/geom.gpkg", layer = "lau", quiet = TRUE,
stringsAsFactors = FALSE)
# Import des relevés de terrain
ter <- st_read( "data/geom.gpkg", layer = "releve", quiet = TRUE,
stringsAsFactors = FALSE)
# Ne garder que les 15 équipements cibles de l'étude
ter <- ter[!is.na(ter$categorie),]
# Palette de couleur par sources de données (BPE-OSM-Terrain)
palSource <- c("#7FC97F","#BEAED4","#FDC086")
res <- 400
sizes <- getFigDim(x = lau, width = 3000, mar = c(0,0,0,0), res = res)Une carte interactive utilisant la librairie leaflet est réalisée pour représenter la localisation et les catégories d’équipement des relevés de terrain. Ne sont ici considérés que les 15 équipements consolidés. Les tuiles utilisées en fond de carte sont issues d’OpenStreetMap, et permettent ainsi d’apprécier (pictogrammes OpenStreetMap) la correspondance entre les relevés de terrain et les équipements commerciaux saisis dans OSM.
# Gestion des couleurs
colvec <- c("#fb8072", "#fccde5","#80b1d3","#ffffb3", "#ffed6f",
"#bc80bd", "#969696", "#f768a1", "#bebada", "#b3de69",
"#33a02c","#fdb462","#a6cee3","#525252","#6a3d9a")
col2 <- c("alimentation", "ameublement", "banque" , "boucherie" , "boulangerie" ,
"chaussures" , "cinema", "coiffeur" , "electronique" , "opticien",
"pharmacie" , "restaurant", "station_service", "theatre", "vetements")
pal <- colorFactor(colvec, col2)
# Transformation en longitude/latitude
ter2 <- st_transform(ter, crs = 4326)
# Affichage interactif des relevés de terrain (popup = catégories consolidées)
leaflet(ter2) %>%
addTiles() %>%
addProviderTiles(providers$OpenStreetMap.HOT) %>%
addCircleMarkers(
radius = 6,
color = ~pal(categorie),
stroke = FALSE, fillOpacity = 1, popup = ~specialite,
) %>%
addLegend(pal = pal, values = ~categorie, group = "circles", opacity = 1,
title = "Relevés de terrain",
position = "bottomright")Pour les représentations cartographiques à venir et localiser au mieux les équipements, les tuiles OSM correspondant à l’emprise géographiques des relevés de terrain sont téléchargées et mises en cache grâce à la fonction getTiles. L’emprise géographique des points issus des relevés de terrain est calculée pour chaque cas d’étude (en prenant en compte un périmètre géographique autour), puis cette emprise est utilisée pour télécharger les tuiles OSM correspondant à un niveau de zoom défini (variable en fonction des cas d’étude).
# Télécharger les tuiles OSM pour représentations carto
# Metz Centre
tmp <- ter[ter$zone == "Metz-Centre",] # Sélection des points terrains
bb <- st_bbox(tmp) # Emprise géographique des points terrains
bb <- st_as_sfc(st_bbox(bb + c(-500,-500,500,500), crs = 3035)) # 500 m autour
# Charger les tuiles OSM sur cette emprise géograpique
metzC <- getTiles(x = bb, type = "cartolight", zoom = 17, crop = FALSE)
# Sablons
tmp <- ter[ter$zone == "Metz-Sablons",]
bb <- st_bbox(tmp)
bb <- st_as_sfc(st_bbox(bb + c(-500,-500,500,500), crs = 3035)) # Capter les tuiles autour du cas d'étude
metzS <- getTiles(x = bb, type = "cartolight", zoom = 17, crop = FALSE)
# Actisud
tmp <- ter[ter$zone == "Actisud",]
bb <- st_bbox(tmp)
bb <- st_as_sfc(st_bbox(bb + c(-1000,-1000,1000,1000), crs = 3035)) # Capter les tuiles autour du cas d'étude
actis <- getTiles(x = bb, type = "cartolight", zoom = 15, crop = FALSE)
# Creutzwald
tmp <- ter[ter$zone == "Creutzwald",]
bb <- st_bbox(tmp)
bb <- st_as_sfc(st_bbox(bb + c(-500,-500,500,500), crs = 3035)) # Capter les tuiles autour du cas d'étude
creutz <- getTiles(x = bb, type = "cartolight", zoom = 17, crop = FALSE)
# Uberherrn
tmp <- ter[ter$zone == "Uberherrn",]
bb <- st_bbox(tmp)
bb <- st_as_sfc(st_bbox(bb + c(-500,-500,500,500), crs = 3035)) # Capter les tuiles autour du cas d'étude
ube <- getTiles(x = bb, type = "cartolight", zoom = 17, crop = FALSE)
# Völklingen
tmp <- ter[ter$zone == "Völklingen",]
bb <- st_bbox(tmp)
bb <- st_as_sfc(st_bbox(bb + c(-500,-500,500,500), crs = 3035)) # Capter les tuiles autour du cas d'étude
volk <- getTiles(x = bb, type = "cartolight", zoom = 17, crop = FALSE)
# Forbach
tmp <- ter[ter$zone == "Forbach",]
bb <- st_bbox(tmp)
bb <- st_as_sfc(st_bbox(bb + c(-500,-500,500,500), crs = 3035)) # Capter les tuiles autour du cas d'étude
forb <- getTiles(x = bb, type = "cartolight", zoom = 17, crop = FALSE) Les cartes présentant les terrains d’étude sont ainsi générées.
tmp <- ter[ter$zone == "Metz-Centre",]
png(file = "fig/C02_MetzC_prez.png", sizes[1], height = sizes[2], res = res)
par(mar = c(0,0,1.2,0), mfrow = c(1,1))
plot(tmp$geom)
tilesLayer(metzC, add = TRUE)
plot(tmp$geom, pch = 16, cex = 0.8, col = "#FDC086", add = TRUE)
layoutLayer(title = paste0("Metz-Centre : ", nrow(tmp), " équipements recensés (sélection de 15 équipements)"),
sources = paste0("Metz-Centre : ", nrow(tmp), " équipements recensés (sélection de 15 équipements)"),
horiz = FALSE, frame= FALSE, posscale = "bottomleft", scale = 0.1,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
tmp <- ter[ter$zone == "Metz-Sablons",]
png(file = "fig/C02_MetzS_prez.png", width = sizes[1], height = sizes[2], res = res)
par(mar = c(0,0,1.2,0), mfrow = c(1,1))
plot(tmp$geom)
tilesLayer(metzS,add = TRUE)
plot(tmp$geom, pch = 16, cex = 0.8, col = "#FDC086", add = TRUE)
layoutLayer(title = paste0("Metz-Sablons : ", nrow(tmp), " équipements recensés (sélection de 15 équipements)"),
sources = "BPE : INSEE, 2018\nOSM : © OpenStreetMap contributors, 2019\nTerrain : LOTERR, RIATE, 2020",
horiz = FALSE, frame= FALSE, posscale = "bottomleft", scale = 0.1,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
Figures C2 - Equipements relevés sur Metz-Centre et Metz-Sablons

## png
## 2
## png
## 2
## png
## 2
## png
## 2
## png
## 2
Figure C3 - Equipements relevés sur Actisud

Figures C4 - Equipements relevés Creutzwald-Uberherrn

Figures C5 - Equipements relevés Forbach-Völklingen


Voici quelques caractéristiques des communes enquêtées. Pour les communes françaises et selon la classification communale de l’INSEE en unités urbaines, leur statut correspond à des communes centres (C) ou de banlieues (B).
# Création d'un champ définissant les zones
lau$ZONE <- "Other"
# Assigner les zones en fonction des communes
lau$ZONE [lau$LAU_LABEL %in% c("Metz")] <- "Metz-Centre"
lau$ZONE [lau$LAU_LABEL %in% c("Völklingen, Stadt", "Forbach")] <- "Völklingen-Forbach"
lau$ZONE [lau$LAU_LABEL %in% c("Creutzwald", "Überherrn")] <- "Creutzwald-Überherrn"
lau$ZONE [lau$LAU_LABEL %in% c("Augny", "Jouy-aux-Arches","Moulins-lès-Metz")] <- "Actisud"
# Extraction des communes en question
comter <- lau[lau$ZONE != "Other",]
# Indicateurs stats
comter$SURF <- as.numeric(st_area(comter) / 1000000)
comter$DENS_2011 <- comter$POP_2011 / comter$SURF
tab <- comter[,c("GISCO_ID","LAU_LABEL","ZONE","POP_2011","SURF","DENS_2011")]
tab <- tab[order(tab$POP_2011, decreasing = TRUE),]
tab <- st_set_geometry(tab, NULL)
knitr::kable(tab, row.names = F, digits = 0)| GISCO_ID | LAU_LABEL | ZONE | POP_2011 | SURF | DENS_2011 |
|---|---|---|---|---|---|
| FR_57463 | Metz | Metz-Centre | 120461 | 42 | 2840 |
| DE_10041519 | Völklingen, Stadt | Völklingen-Forbach | 39626 | 68 | 586 |
| FR_57227 | Forbach | Völklingen-Forbach | 21394 | 17 | 1274 |
| FR_57160 | Creutzwald | Creutzwald-Überherrn | 13405 | 27 | 494 |
| DE_10044119 | Überherrn | Creutzwald-Überherrn | 11687 | 34 | 344 |
| FR_57487 | Moulins-lès-Metz | Actisud | 5153 | 7 | 724 |
| FR_57039 | Augny | Actisud | 2285 | 15 | 154 |
| FR_57350 | Jouy-aux-Arches | Actisud | 1561 | 6 | 256 |
L’objectif ici consiste à définir une méthode permettant de comparer les 3 bases de données de référence (terrain, BPE, OSM) à partir de l’emprise géographique des relevés de terrain. Par nature, la localisation précise pour un même équipement issu de 3 sources de données peuvent varier : de l’endroit où a été géoréférencé l’équipement (Terrain), du centre de la parcelle cadastrale (BPE, souvent) ou de l’entrée du commerce (OSM, souvent).
Pour qualifier le déséquilibre entre le nombre d’équipements issus de différentes sources, nous proposons ici de créer un espace tampon d’une portée de 20 mètres autour des points terrain, et extraire les équipements BPE et OSM inclus dans ce périmètre.
Cette portée de 20 mètres autorise une capture suffisamment large pour englober les données OSM et BPE correspondant aux relevés terrains, sans pour autant « déborder » sur les autres équipements présents alentour. L’union de ces espaces tampons définit la zone d’extraction des équipements OSM (et BPE) à comparer aux relevés de terrain.
# Buffer 20m autour des points
buf <- st_buffer(ter, dist = 20)
# Aggregate by zone
buf <- aggregate(x = buf[,c("zone")],
by = list(zone = buf$zone),
FUN = head,1)
# Ne garder que les points qui intersectent ce buffer
pt <- st_intersection(ptInput, buf)
# Sélection des points sur Metz Centre
tmp <- ter[ter$zone == "Metz-Centre",]
pt$tmp <- 1 # Dummy variable
ptInput$tmp <- 1 # Dummy variable
# Représentation
png(file = "fig/C06_Multisource_Metz_centre.png", width = sizes[1], height = sizes[2], res = res)
par(mar = c(0,0,1.2,0), mfrow = c(1,1))
plot(tmp$geom)
tilesLayer(metzC,add = TRUE)
propSymbolsTypoLayer(ptInput, var2 = "type", var = "tmp", col = paste0(palSource,80),
border = NA, inches = 0.02,
legend.var.pos = "n",
legend.var2.pos = "n",
legend.var2.title.txt = "Sources de données",
add = TRUE)
propSymbolsTypoLayer(pt, var2 = "type", var = "tmp", col = palSource,
border = NA, inches = 0.04,
legend.var.pos = "n",
legend.var2.pos = "topleft",
legend.var2.title.txt = "Sources de données",
add = TRUE)
plot(buf$geometry, lty = 2, lwd = 0.5, add = TRUE)
layoutLayer(title = "Metz-Centre : Sélection des équipements en fonction de la distance aux relevés de terrain (20 mètres)",
sources = "BPE : INSEE, 2018\nOSM : © OpenStreetMap contributors, 2019\nTerrain : LOTERR, RIATE, 2020",
horiz = FALSE, frame= FALSE, posscale = "bottomleft", scale = 0.1,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
Figure C6 - Relevés de terrain, création d’une zone tampon et extraction des 15 catégories d’équipements dans OSM et dans la BPE : exemple dans l’hypercentre de Metz

Dans les zones d’activités commerciales, où les emprises spatiales des équipements sont vastes et les écarts de localisation sont potentiellement plus importants d’une source à l’autre, cette portée de 20 mètres n’est pas suffisante. Une procédure spécifique a donc été retenue pour la zone commerciale d’Actisud : l’ensemble de la zone ayant été couverte par l’enquête, c’est le périmètre de la zone commerciale qui a servi de périmètre d’extraction des données OSM et BPE.
# Retirer les points inclus dans le buffer d'actisud
tmp <- pt[pt$zone != "Actisud",]
# Import Actisud
actisud <- st_read( "data/geom.gpkg", layer = "actisudOSM", quiet = TRUE,
stringsAsFactors = FALSE)
# Intersection Actisud - Points consolidés
tmp2 <- st_intersection(ptInput, actisud)
tmp2$zone <- "Actisud"
# On combine les points issus de la sélection par buffer et par appartenance à la zone Actisud
selecVar <- c("categorie", "type", "LAU2", "gamme", "zone")
pt <- rbind(tmp[,selecVar], tmp2[,selecVar])
pt$tmp <- 1
# Représentation de la sélection avec buffer
png(file = "fig/C07_Multisource_Actisud.png", width = sizes[1], height = sizes[2], res = res)
par(mar = c(0,0,1.2,0), mfrow = c(1,1))
plot(actisud$geom, col = NA, border = NA)
tilesLayer(actis, add = TRUE)
plot(actisud$geom, add = TRUE)
propSymbolsTypoLayer(pt, var2 = "type", var = "tmp", col = palSource,
border = NA, inches = 0.04,
legend.var.pos = "n",
legend.var2.pos = "topleft",
legend.var2.title.txt = "Sources de données",
add = TRUE)
plot(buf, lty = 2, lwd = 0.5, col = NA, add = TRUE)
layoutLayer(title = "Actisud : sélection des équipements en fonction de l'appartenance à Actisud",
sources = "BPE : INSEE, 2018\nOSM : © OpenStreetMap contributors, 2019\nTerrain : LOTERR, RIATE, 2020",
horiz = FALSE, frame= FALSE, posscale = "bottomleft", scale = 0.1,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
Figure C7 - Utilisation de l’emprise d’Actisud (source OSM) pour comparer les échantillons OSM-BPE-Terrain

Sur les bases de cette sélection réalisée à partir des espaces tampons entourants les relevés de terrain, plusieurs dénombrements sont réalisés pour qualifier les différences existant entre les différents échantillons
df <- aggregate(pt[,"categorie"],
by = list(categorie = pt$zone, source = pt$type),
FUN = length)
df <- dcast(data = df, formula = categorie ~ source,
value.var = "categorie.1")
# Somme des lignes (total de l'espace d'étude)
tot <- apply(df[,c(2:4)], 2, sum, na.rm = TRUE)
tot$categorie <- "Total"
tot <- as.data.frame(tot)
# Part du total des équipements
df <- rbind(df, tot)
# Ecart relatif OSM - Terrain
df$`%(OSM/Terrain)` <- df$OSM / df$Terrain * 100
df$`%(OSM/BPE)` <- df$OSM / df$BPE * 100
knitr::kable(df, row.names = FALSE, digits = 1, padding = 0)| categorie | BPE | OSM | Terrain | %(OSM/Terrain) | %(OSM/BPE) |
|---|---|---|---|---|---|
| Actisud | 150 | 62 | 182 | 34.1 | 41.3 |
| Creutzwald | 27 | 1 | 46 | 2.2 | 3.7 |
| Forbach | 158 | 69 | 178 | 38.8 | 43.7 |
| Metz-Centre | 190 | 136 | 156 | 87.2 | 71.6 |
| Metz-Sablons | 27 | 28 | 35 | 80.0 | 103.7 |
| Uberherrn | NA | 5 | 29 | 17.2 | NA |
| Völklingen | NA | 77 | 146 | 52.7 | NA |
| Total | 552 | 378 | 772 | 49.0 | 68.5 |
La comparaison BPE-OSM n’est pas ici à considérer, car la BPE ne couvre pas les cas d’étude allemands.
df <- aggregate(pt[,"categorie"],
by = list(categorie = pt$categorie, source = pt$type),
FUN = length)
df <- dcast(data = df, formula = categorie ~ source,
value.var = "categorie.1")
# Somme des lignes (total de l'espace d'étude)
tot <- apply(df[,c(2:4)], 2, sum, na.rm = TRUE)
tot$categorie <- "Total"
tot <- as.data.frame(tot)
# Part du total des équipements
df <- rbind(df, tot)
# Ecart relatif OSM - Terrain
df$`%(OSM/Terrain)` <- df$OSM / df$Terrain * 100
knitr::kable(df, row.names = FALSE, digits = 1, padding = 0)| categorie | BPE | OSM | Terrain | %(OSM/Terrain) |
|---|---|---|---|---|
| alimentation | 15 | 12 | 73 | 16.4 |
| ameublement | 44 | 15 | 63 | 23.8 |
| banque | 21 | 30 | 40 | 75.0 |
| boucherie | 7 | 5 | 11 | 45.5 |
| boulangerie | 34 | 20 | 28 | 71.4 |
| chaussures | 34 | 17 | 28 | 60.7 |
| cinema | 1 | 1 | 2 | 50.0 |
| coiffeur | 59 | 26 | 76 | 34.2 |
| electronique | 6 | 18 | 41 | 43.9 |
| opticien | 21 | 12 | 20 | 60.0 |
| pharmacie | 8 | 13 | 15 | 86.7 |
| restaurant | 154 | 122 | 222 | 55.0 |
| station_service | 1 | 7 | 5 | 140.0 |
| theatre | 1 | NA | 1 | NA |
| vetements | 146 | 80 | 147 | 54.4 |
| Total | 552 | 378 | 772 | 49.0 |
tmp <- pt[pt$zone == "Metz-Centre",]
df <- aggregate(tmp[,"categorie"],
by = list(categorie = tmp$categorie, source = tmp$type),
FUN = length)
# Représentation graphique
png(file = "fig/C08_1_Denomb_Metz-centre.png", width = sizes[1], height = sizes[2], res = res)
par(mar=c(6,4,4,0), cex.main = 1.2, cex.lab = 0.9, cex.axis = 0.9)
barplot(categorie.1 ~ source + categorie,
data = df, beside = TRUE, las = 2 ,
col = palSource, border = FALSE, ylab = "Nombre d'équipements",
xlab = "", main = "Metz-Centre")
abline(h = seq(0,100,10), col = "grey", lty = 3)
legend("topleft", inset = 0.1, legend = levels(as.factor(pt$type)),
bty = "n", fill = palSource, border = FALSE, cex = 0.9)
dev.off()## png
## 2
# Représentation en table
df <- dcast(data = df, formula = categorie ~ source,
value.var = "categorie.1")
# Somme des lignes (total de l'espace d'étude)
tot <- apply(df[,c(2:4)], 2, sum, na.rm = TRUE)
tot$categorie <- "Total"
tot <- as.data.frame(tot)
# Part du total des équipements
df <- rbind(df, tot)
# Ecart relatif OSM - Terrain - BPE
df$`%(OSM/Terrain)` <- df$OSM / df$Terrain * 100
df$`%(OSM/BPE)` <- df$OSM / df$BPE * 100
df$`%(BPE/Terrain)` <- df$BPE / df$Terrain * 100
knitr::kable(df, row.names = FALSE, digits = 1, padding = 0)| categorie | BPE | OSM | Terrain | %(OSM/Terrain) | %(OSM/BPE) | %(BPE/Terrain) |
|---|---|---|---|---|---|---|
| alimentation | 4 | 8 | 18 | 44.4 | 200.0 | 22.2 |
| ameublement | 5 | 1 | 2 | 50.0 | 20.0 | 250.0 |
| banque | 3 | 5 | 4 | 125.0 | 166.7 | 75.0 |
| boucherie | 1 | 1 | 1 | 100.0 | 100.0 | 100.0 |
| boulangerie | 11 | 7 | 3 | 233.3 | 63.6 | 366.7 |
| chaussures | 18 | 12 | 11 | 109.1 | 66.7 | 163.6 |
| coiffeur | 21 | 7 | 15 | 46.7 | 33.3 | 140.0 |
| electronique | 1 | 4 | 4 | 100.0 | 400.0 | 25.0 |
| opticien | 6 | 2 | 5 | 40.0 | 33.3 | 120.0 |
| pharmacie | 3 | 2 | 3 | 66.7 | 66.7 | 100.0 |
| restaurant | 53 | 39 | 46 | 84.8 | 73.6 | 115.2 |
| vetements | 64 | 48 | 44 | 109.1 | 75.0 | 145.5 |
| Total | 190 | 136 | 156 | 87.2 | 71.6 | 121.8 |
## png
## 2
| categorie | BPE | OSM | Terrain | OSM/Terrain | OSM/BPE | BPE/Terrain |
|---|---|---|---|---|---|---|
| alimentation | 4 | 1 | 4 | 0.2 | 0.2 | 1.0 |
| banque | 5 | 5 | 5 | 1.0 | 1.0 | 1.0 |
| boucherie | 1 | 2 | 3 | 0.7 | 2.0 | 0.3 |
| boulangerie | 2 | 3 | 4 | 0.8 | 1.5 | 0.5 |
| chaussures | 1 | 1 | NA | NA | 1.0 | NA |
| coiffeur | 7 | 6 | 7 | 0.9 | 0.9 | 1.0 |
| electronique | NA | NA | 1 | NA | NA | NA |
| opticien | NA | 1 | 2 | 0.5 | NA | NA |
| pharmacie | 1 | 1 | 1 | 1.0 | 1.0 | 1.0 |
| restaurant | 5 | 6 | 8 | 0.8 | 1.2 | 0.6 |
| vetements | 1 | 2 | NA | NA | 2.0 | NA |
| Total | 27 | 28 | 35 | 0.8 | 1.0 | 0.8 |
## png
## 2
| categorie | BPE | OSM | Terrain | OSM/Terrain | OSM/BPE | BPE/Terrain |
|---|---|---|---|---|---|---|
| alimentation | 1 | 2 | 20 | 0.1 | 2.0 | 0.0 |
| ameublement | 39 | 11 | 56 | 0.2 | 0.3 | 0.7 |
| banque | 1 | 1 | 3 | 0.3 | 1.0 | 0.3 |
| boucherie | 2 | NA | 1 | NA | NA | 2.0 |
| boulangerie | 3 | 1 | 3 | 0.3 | 0.3 | 1.0 |
| chaussures | 7 | 2 | 9 | 0.2 | 0.3 | 0.8 |
| coiffeur | 3 | 1 | 4 | 0.2 | 0.3 | 0.8 |
| electronique | 5 | 9 | 8 | 1.1 | 1.8 | 0.6 |
| opticien | 7 | 1 | NA | NA | 0.1 | NA |
| restaurant | 41 | 21 | 33 | 0.6 | 0.5 | 1.2 |
| station_service | 1 | 2 | NA | NA | 2.0 | NA |
| vetements | 40 | 11 | 45 | 0.2 | 0.3 | 0.9 |
| Total | 150 | 62 | 182 | 0.3 | 0.4 | 0.8 |
## png
## 2
| categorie | OSM | Terrain | OSM/Terrain |
|---|---|---|---|
| alimentation | 1 | 10 | 0.1 |
| ameublement | 3 | 4 | 0.8 |
| banque | 8 | 8 | 1.0 |
| boucherie | 2 | 1 | 2.0 |
| boulangerie | 5 | 6 | 0.8 |
| chaussures | 2 | 2 | 1.0 |
| cinema | NA | 1 | NA |
| coiffeur | 8 | 12 | 0.7 |
| electronique | 4 | 13 | 0.3 |
| opticien | 3 | 5 | 0.6 |
| pharmacie | 5 | 6 | 0.8 |
| restaurant | 22 | 58 | 0.4 |
| station_service | 5 | 5 | 1.0 |
| vetements | 9 | 15 | 0.6 |
| Total | 77 | 146 | 0.5 |
## png
## 2
| categorie | BPE | OSM | Terrain | OSM/Terrain | OSM/BPE | BPE/Terrain |
|---|---|---|---|---|---|---|
| alimentation | 5 | NA | 11 | NA | NA | 0.5 |
| banque | 10 | 11 | 12 | 0.9 | 1.1 | 0.8 |
| boucherie | 3 | NA | 3 | NA | NA | 1.0 |
| boulangerie | 14 | 4 | 4 | 1.0 | 0.3 | 3.5 |
| chaussures | 7 | NA | 5 | NA | NA | 1.4 |
| cinema | 1 | 1 | 1 | 1.0 | 1.0 | 1.0 |
| coiffeur | 25 | 4 | 24 | 0.2 | 0.2 | 1.0 |
| electronique | NA | 1 | 12 | 0.1 | NA | NA |
| opticien | 7 | 5 | 8 | 0.6 | 0.7 | 0.9 |
| pharmacie | 4 | 4 | 5 | 0.8 | 1.0 | 0.8 |
| restaurant | 46 | 29 | 54 | 0.5 | 0.6 | 0.9 |
| theatre | 1 | NA | 1 | NA | NA | 1.0 |
| vetements | 35 | 10 | 38 | 0.3 | 0.3 | 0.9 |
| Total | 158 | 69 | 178 | 0.4 | 0.4 | 0.9 |
## png
## 2
| categorie | OSM | Terrain | OSM/Terrain |
|---|---|---|---|
| alimentation | NA | 5 | NA |
| ameublement | NA | 1 | NA |
| banque | NA | 2 | NA |
| boucherie | NA | 1 | NA |
| boulangerie | NA | 3 | NA |
| coiffeur | NA | 3 | NA |
| pharmacie | 1 | NA | NA |
| restaurant | 4 | 13 | 0.3 |
| vetements | NA | 1 | NA |
| Total | 5 | 29 | 0.2 |
## png
## 2
| categorie | BPE | OSM | Terrain | OSM/Terrain | OSM/BPE | BPE/Terrain |
|---|---|---|---|---|---|---|
| alimentation | 1 | NA | 5 | NA | NA | 0.2 |
| banque | 2 | NA | 6 | NA | NA | 0.3 |
| boucherie | NA | NA | 1 | NA | NA | NA |
| boulangerie | 4 | NA | 5 | NA | NA | 0.8 |
| chaussures | 1 | NA | 1 | NA | NA | 1.0 |
| coiffeur | 3 | NA | 11 | NA | NA | 0.3 |
| electronique | NA | NA | 3 | NA | NA | NA |
| opticien | 1 | NA | NA | NA | NA | NA |
| restaurant | 9 | 1 | 10 | 0.1 | 0.1 | 0.9 |
| vetements | 6 | NA | 4 | NA | NA | 1.5 |
| Total | 27 | 1 | 46 | 0.0 | 0.0 | 0.6 |
Figure C8 - Dénombrement par catégories d’équipement et zones d’étude

On souhaite ici évaluer les différentiels de concentration d’équipements d’une source de données à l’autre, notamment afin d’évaluer si les contributions OSM suivent globalement la concentration spatiale des équipements recensés sur le terrain.
Pour ce faire, les équipements OSM, BPE et Terrain sont dénombrés dans une grille régulière fine (50 m) qui intersecte les buffers (20 m autour des relevés de terrain). Pour chacune des sources de données séparément, est évaluée la part que représentent les points inclus dans chaque carreau de grille au regard de l’ensemble des points de l’espace d’étude, et donne ainsi une idée du niveau de concentration des équipements par zone d’étude.
La différence OSM/BPE et OSM/Terrain est ensuite réalisée afin d’évaluer les carreaux de grille où les contributions OSM sont plus ou moins concentrées au regard des autres sources de données.
Par cette méthode, on cherche à évaluer si des structures spatiales émergent de ces différentiels, qu’il serait possible d’interpréter (une rue plus contribuée qu’une autre, une localisation proche d’une gare qui favorise les contributions).
La fonction mygrid, combinée à la fonction CountPt sont créées pour faciliter la reproduction ou l’extension des analyses. La fonction requiert d’importer les polygones comprenant les espaces d’étude (x), définis dans notre cas par les buffer, une couche de points pt comprenant les coordonnées géographiques des équipements ciblés pour les différentes sources de données, le nom de la variable de x qui comprend le nom des zones d’étude (var), son nom (selecZone) et enfin la résolution de la grille désirée, exprimée en mètres (cellsize).
La fonction mygrid renvoie une grille régulière qui comptabilise par sources de données le nombre d’équipements que la cellule contient, le calcul de concentration d’équipements, ainsi que les différences inter-sources observées.
La fonction mygrid sera utilisée dans les différents exemples qui vont suivre.
# Fonction de décompte
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)
}
# Grille d'emprise 25 m (Metz)
mygrid <- function(x, pt, var, selecZone, cellsize){
selecBuf <- x[x[[var]] == selecZone,]
grid <- st_make_grid(x = selecBuf, cellsize = cellsize , crs = 3035)
grid <- st_intersection(selecBuf, grid)
# Dénombrements
grid$BPE <- CountPt(x = grid, pt = pt, var = "type", equip = "BPE")
grid$OSM <- CountPt(x = grid, pt = pt, var = "type", equip = "OSM")
grid$Terrain <- CountPt(x = grid, pt = pt, var = "type", equip = "Terrain")
grid$sum <- grid$BPE + grid$OSM + grid$Terrain
# Retirer valeurs nulles
grid <- grid[grid$sum != 0,]
# Calcul des concentrations
grid$BPE_conc <- grid$BPE / sum(grid$BPE) * 100
grid$Terrain_conc <- grid$Terrain / sum(grid$Terrain) * 100
grid$OSM_conc <- grid$OSM / sum(grid$OSM) * 100
# Différences terrain
grid$OSM_Terrain <- grid$OSM_conc - grid$Terrain_conc
grid$OSM_BPE <- grid$OSM_conc - grid$BPE_conc
return(grid)
} grid <- mygrid(x = buf, var = "zone", selecZone = "Metz-Centre", pt = pt, cellsize = 50)
# Metz Centre
## Part du total des équipements OSM
png(file = "fig/C09_grille_Metz_Centre.png", width = sizes[1], height = sizes[2], res = res)
par(mar = c(0,0,1.2,0), mfrow = c(1,1))
plot(grid$geometry, col = NA, border = NA)
tilesLayer(metzC,add = TRUE)
choroLayer(grid, var = "OSM_conc",
breaks = c(0,0.01, 2, 4, max(grid$OSM_conc)),
col = paste0(carto.pal(pal1 = "orange.pal", n1 = 4),80),
legend.values.rnd = 2, lwd = 0.5,
legend.pos = "topright",
legend.title.txt = "Nombre équipements OSM /\nTotal équipements OSM\nsur l'espace d'étude (%)",
add = TRUE)
plot(pt[pt$type == "OSM",]$geom, pch = 16, cex = 0.5, add = TRUE)
layoutLayer(title = "Concentration des équipements OSM sur Metz-Centre (grille de 50 m)",
sources = "BPE : INSEE, 2018\nOSM : © OpenStreetMap contributors, 2019\nTerrain : LOTERR, RIATE, 2020",
horiz = FALSE, frame= FALSE, posscale = "bottomleft", scale = 0.1,
author = "UMS RIATE, 2020", col = "#990000")
dev.off()## png
## 2
## Différence de concentration OSM - Terrain
png(file = "fig/C10_grille_diff_Metz_Centre.png", width = sizes[1]*2, height = sizes[2], res = res)
par(mfrow = c(1,2), mar = c(0,0,1.2,0))
plot(grid$geometry, col = NA, border = NA)
tilesLayer(metzC, add = TRUE)
choroLayer(grid, var = "OSM_Terrain",
breaks = c(min(grid$OSM_Terrain), -1, -0.5, 0, 0.5, 1, max(grid$OSM_Terrain)),
col = paste0(carto.pal(pal1 = "blue.pal", pal2 = "red.pal", n1 = 3, n2 = 3),80),
legend.values.rnd = 2,
legend.pos = "topright",
legend.title.txt = "Différences de concentration\nOSM - Terrain\n(points de pourcentage)",
add = TRUE)
layoutLayer(title = "Différence de concentration OSM - Terrain (grille de 50 m)",
sources = "BPE : INSEE, 2018\nOSM : © OpenStreetMap contributors, 2019\nTerrain : LOTERR, RIATE, 2020",
author = "UMS RIATE, 2020", frame= FALSE, scale = FALSE, col = "#990000")
# Différence de concentration OSM - BPE
plot(grid$geometry, col = NA, border = NA)
tilesLayer(metzC, add = TRUE)
choroLayer(grid, var = "OSM_BPE",
breaks = c(min(grid$OSM_BPE), -1, -0.5, 0, 0.5, 1, max(grid$OSM_BPE)),
col = paste0(carto.pal(pal1 = "blue.pal", pal2 = "red.pal", n1 = 3, n2 = 3),80),
legend.values.rnd = 2,
legend.pos = "topright",
legend.title.txt = "Différences de concentration\nOSM - BPE\n(points de pourcentage)",
add = TRUE)
layoutLayer(title = "Différence de concentration OSM - BPE (grille de 50 m)",
frame= FALSE, posscale = "bottomrigt", scale = 0.1, col = "#990000")
dev.off()## png
## 2
Figure C9 - Concentration des points OSM par carreau de grille de 50m intersectant le buffer de 20m

Appliqué au secteur de Metz-Centre, cette analyse (malgré les effets de bords induits par le carroyage) fait ressortir que la rue Serpenoise présente une concentration d’équipements OSM relativement plus élevée que les autres rues au vu des concentrations observées sur le terrain ou du côté de la BPE. A l’inverse, il la concentration d’équipements OSM sur la rue Fournirue semble significativement moins importante que pour les deux autres sources de données.
Figure C10 - Différences de concentration OSM - Terrain et BPE
Le cas de Forbach fait apparaître une autre configuration : la surreprésentation de concentrations d’équipements du côté d’OSM se situe à proximité de la gare de Forbach. On peut émettre l’hypothèse que les utilisateur d’OpenStreetMap ont ici davantage concentré leur contributions autour de cet endroit de fréquentation.
## png
## 2
Figure C11 - Différences de concentration OSM - Terrain et BPE (Forbach)
En revanche pour Vorklingen c’est moins clair.s
## png
## 2
Figure C12 - Différences de concentration OSM - Terrain (Vorklingen)
Les résultats pour Actisud confirment localement les observations réalisées à l’échelon régional : l’endroit qui correspond aux différences de concentration les plus élevées correspond à l’espace dédié à la restauration (Buffalo Grill, KFC, Ristorante Del Arte). Ce sont aussi des équipements qui sont contribués de façon plus privilégiée et systématique par les utilisateurs OpenStreetMap.
Figure C13 - Différences de concentration OSM - Terrain et BPE (Actisud)

Les précédentes analyses font de fait émerger des différences significatives entre ces trois bases de données de référence, qui vont au-delà de la simple absence de saisie par les contributeurs OpenStreetMap. On retrouve des situations types qui ont été présentées aux enquêteurs de terrain afin de valider les hypothèses soulevées par une analyse externe. Il s’agit d’extraits de rues présentant des densités et une hétérogénéité de situations (catégories d’équipements représentés) intéressante : - Des problèmes liés à la méthode (tampon trop large, qui capte des équipements situés en dehors du périmètre d’enquête) - Des problèmes de saisie OSM (catégorisation floue, saisie imprécise) - Des problèmes de mise à jour de la BPE (équipements anciens, toujours référencés dans la BPE)
## png
## 2
Figure C14 - Décalages liés à la méthode du tampon pour comparer les échantillons
## png
## 2
Figure C15 - Des problèmes de saisie dans OSM ?
## png
## 2
Figure C16 - Les données OSM plus à jour que celles de la BPE ?

UMS 2414 RIATE (CNRS - Université de Paris)