Extraction commerces alimentaires avec R OSMDATA

Bonjour,
J’ai extrait des données en utilisant le package OSMDATA (langage R).
Je recherche des commerces alimentaires : key = « shop »,
value = c( « bakery », « convenience », « frozen food », « supermarket », « butcher »,
« greengrocer », « alcohol », « deli »)
Cette extraction sur le département du Bas-Rhin me donne environ 10 000 lignes.
Or, sur ces 10 000 lignes, dans la variable « shop » j’ai 8500 lignes « NA ».
Je me demande comment OSM me transmet ces données qui semblent exactes mais sans les catégoriser. Je n’ai pas trouvé dans le tableau de résultats d’autres variables pouvant indiquer que j’ai à faire à tel ou tel type de commerces.
Merci pour votre aide,
Olivier

Cela peut ressembler au fait de récupérer tous les noeuds (node) composants les chemins (way). Si 1 chemin est tagué, les noeuds le composant ne le sont pas.

Je ne connais pas vraiment R… peut être @rcarto ?

Pour compléter voici une partie du code que j’utilise :

shop ← opq(bbox = st_bbox(bas_rhin)) %>%
add_osm_feature(key = « shop », value = c( « bakery », « convenience », « frozen food », « supermarket », « butcher », « greengrocer », « alcohol », « deli »))
shop_sf ← osmdata_sf(shop)$osm_points

L’objet « shop_sf » contient 256 variables. La variable « shop » est intéressante mais ne renseigne pas sur la nature de tous les commerces.

Bonjour,
Comme le dit @vinber, il s’agit sans doute des points composants les polygones.
Pour obtenir des résultats plus propres il faut utiliser la fonction unique_osmdata() avant l’extraction des points.
Un exemple ici : Chapitre 6 Focus sur OpenStreetMap | Géomatique avec R

Merci, cela semble bien fonctionner !

shop ← opq(bbox = st_bbox(bas_rhin)) %>%
add_osm_feature(key = « shop », value = c(
« bakery », « convenience », « frozen food », « supermarket », « butcher »,
« greengrocer », « alcohol », « deli »))
shop_sf ← osmdata_sf(shop)
shop ← unique_osmdata(shop_sf)
shop_polygon ← shop$osm_polygons
shop_polygon_point ← st_centroid(shop_polygon)

Sinon, avec Overpass Turbo, ça donne ça :

[out:json][timeout:25];
{{geocodeArea:Bas-Rhin}}->.searchArea;
(
  nwr["shop"~"convenience|frozen food|supermarket|butcher|greengrocer|alcohol|deli"](area.searchArea);
);
out body;
>;
out skel qt;

Et ça retourne 554 commerces :

Avec OSMDATA, sur le Bas-Rhin, et comme vous sans « bakery », j’obtiens 231 résultats:

pacman::p_load(osmdata, sf, dplyr, httr)

Chargement de tous les départements France Métropole

url ← « https://wxs.ign.fr/topographie/geoportail/wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetCapabilities »
parse_url ← parse_url(url)
parse_url$query <-list(service = « wfs », version = « 2.0.0 », crs = 4326,
request = « GetFeature », typename = « BDTOPO_V3:departement »)
departements ← st_read(build_url(parse_url))
departements_metro ← departements %>%
filter(!grepl(« ^(971|972|973|974|976) », code_insee))

i ← 1 # Bas-Rhin
print(i)

Spécification de la requête pour extraire les commerces alimentaires pour chaque département

shop ← opq(bbox = st_bbox(departements_metro[i,])) %>%
add_osm_feature(key = « shop », value = c(
#« bakery »,
« convenience », « frozen food », « supermarket », « butcher », « greengrocer », « alcohol », « deli »))
shop_sf ← osmdata_sf(shop)
shop ← unique_osmdata(shop_sf)
shop_polygon ← shop$osm_polygons
shop_polygon_point ← st_centroid(shop_polygon)
shop_sf_light ← shop_polygon_point %>%
select(name, shop, geometry)

shop_67 ← st_intersection(departements[i,], shop_sf_light)
dim(shop_67)

Ah oui, désolé, j’avais oublié « bakery ».
En l’ajoutant, j’obtiens 967 POI :

Étrange que OSMDATA (que je ne pratique pas) en retourne moins ?

Edit :
vérifiez si votre export OSMDATA contient bien les données où shop prend plusieurs valeurs, par exemple ce nœud où shop=convenience;gas

Merci pour votre réponse.
Je ne prends effectivement pas en compte les données ou shop prends plusieurs valeurs.
Mais, après avoir révisé mon code, (j’ai ajouté les points et le centroïde de chaque polygone), j’obtiens 1244 éléments :
https://otheureaux.gitpages.huma-num.fr/transfood/test_osm.html
Je me demande si certains centroïdes ne doublonnent pas certains points ?

J’ai continué mes explorations sur les données avec le package OSMEXTRACT qui semble être beaucoup plus rapide que OSMDATA.

J’obtiens 927 points (pas si éloigné de votre 967 qui intègre des éléments où "shop "prend plusieurs valeurs, est-il possible d’avoir le résultat de cette requête avec des valeurs uniques ?) et 319 polygons.
J’ai 16 points dans des polygons. Ce qui me donne sur le Bas-Rhin, après dédoublonnage, 1230 points de commerces alimentaires.

J’ai complété ici : https://otheureaux.gitpages.huma-num.fr/transfood/test_osm.html