# OpenStreetMap

{/* Page générée par scripts/generate.mjs depuis le dépôt : ne pas modifier à la main. */}

Extrait d'OpenStreetMap tous les objets d'un tag donné (par défaut `amenity=restaurant`) sur l'Isère, répartis en points, lignes et polygones, et les exporte.

| | |
|---|---|
| **Script** | [OSM.R](https://github.com/maximehautin/hackathon_dge_gestion_des_flux/blob/main/OSM.R) |
| **Langage** | R |
| **Paquets** | `osmdata`, `sf`, `writexl` |
| **Authentification** | Aucune : API Overpass publique via le paquet osmdata. |
| **Documentation** | [https://wiki.openstreetmap.org/wiki/Map\_features](https://wiki.openstreetmap.org/wiki/Map_features) |

## Ce que fait le script

1. Modifier la clé et la valeur du tag OSM (`amenity`, `tourism`, `leisure`…).
2. Lancer la requête Overpass sur l'emprise de l'Isère.
3. Récupérer points, lignes, polygones et multipolygones, puis exporter (Excel, GeoPackage…).

## Code

```r title="OSM.R"
# ============================================================
#        RÉCUPÉRATION DE DONNÉES OPENSTREETMAP
# ============================================================
install.packages("osmdata")

library(osmdata)
library(sf)

# ----------- PARAMÈTRES À MODIFIER --------------------------

# Zone géographique
zone <- getbb(
  "Isère, Auvergne-Rhône-Alpes, France",
  format_out = "osm_type_id"
)

# Tag OpenStreetMap
cle <- "amenity"              #A modifier
valeur <- "restaurant"        #A modifier

# ------------------------------------------------------------

requete <- opq(bbox = zone) |>
  add_osm_feature(
    key = cle,
    value = valeur,
  )

donnees <- osmdata_sf(requete)

# Les objets sont répartis selon leur géométrie :
# Points
points <- donnees$osm_points

# Lignes
lignes <- donnees$osm_lines

# Polygones
polygones <- donnees$osm_polygons

# Multipolygones
multipolygones <- donnees$osm_multipolygons

# ------------------------------------------------------------
# Affichage
# ------------------------------------------------------------

plot(polygones["name"])
plot(multipolygones["name"])
plot(points["name"])

# ------------------------------------------------------------
# Exporter
# ------------------------------------------------------------

install.packages("writexl")
library(writexl)

# Export Excel
couches <- c(
  "osm_points", "osm_lines", "osm_multilines",
  "osm_polygons", "osm_multipolygons"
)

fichier_excel <- lapply(couches, function(nom) {
  couche <- donnees[[nom]]
  
  if (is.null(couche) || nrow(couche) == 0) {
    return(NULL)
  }
  
  as.data.frame(st_drop_geometry(couche))
})

names(fichier_excel) <- couches
fichier_excel <- Filter(Negate(is.null), fichier_excel)

write_xlsx(fichier_excel, "resultat_Isere.xlsx")
```
