OSM-Catalan / monitorOSM

Consulta canvis a OSM i genera informes de destrosses
https://osm-catalan.github.io/monitorOSM/
GNU General Public License v3.0
1 stars 5 forks source link

agafar història elements #1

Closed marcboschmatas closed 1 year ago

marcboschmatas commented 1 year ago

Bones, he aconseguit un codi que torni una taula amb cada element i cada tag d'un objecte per cada un dels seus changesets. Problema és que perdo els atributs en algun moment del procés, per tant, no sabem els valors de members i tags. El codi és el següent.

library(httr2)
library(tidyverse)
selva <- httr2::request("https://www.openstreetmap.org/api/0.6/relation/368462/history") |> 
  req_perform()

selvaxml <- resp_body_xml(selva)

resp_l <- selvaxml |> 
  xml2::as_list() |> 
  unlist(recursive = FALSE) |> 
  lapply(X = _, attributes) |>
  tibble::as_tibble(.name_repair = "unique") |> 
  janitor::clean_names()

resp_unnested <- resp_l |> 
  t() |> 
  as.data.frame() |> 
  setNames(c("elements", "osm_id", "visible", "version", "changeset", "timestamp", "user", "user_id")) |> 
  unnest(everything())

I queda tal com això.

# A tibble: 10,241 × 8
   elements osm_id visible version changeset timestamp            user         user_id
   <chr>    <chr>  <chr>   <chr>   <chr>     <chr>                <chr>        <chr>  
 1 member   368462 true    1       3430908   2009-12-22T22:50:41Z Blanes Lluis 172008 
 2 member   368462 true    1       3430908   2009-12-22T22:50:41Z Blanes Lluis 172008 
 3 member   368462 true    1       3430908   2009-12-22T22:50:41Z Blanes Lluis 172008 
 4 member   368462 true    1       3430908   2009-12-22T22:50:41Z Blanes Lluis 172008 
 5 member   368462 true    1       3430908   2009-12-22T22:50:41Z Blanes Lluis 172008 
 6 member   368462 true    1       3430908   2009-12-22T22:50:41Z Blanes Lluis 172008 
 7 member   368462 true    1       3430908   2009-12-22T22:50:41Z Blanes Lluis 172008 
 8 member   368462 true    1       3430908   2009-12-22T22:50:41Z Blanes Lluis 172008 
 9 member   368462 true    1       3430908   2009-12-22T22:50:41Z Blanes Lluis 172008 
10 member   368462 true    1       3430908   2009-12-22T22:50:41Z Blanes Lluis 172008 
# ℹ 10,231 more rows

D'altra banda, el procés per crear resp_l és molt lent, però només caldria agafar les dues últimes versions, de manera que seria més ràpid. A tu se t'acut on és el problema?

jmaspons commented 1 year ago

No faig servir tidyverse. Potser et pot inspirar https://github.com/ropensci/osmdata/blob/d920bdf7ce2a7227b1e1960b0586f8abe556f0b4/R/get-osmdata-df.R#L196

Quan tingui temps hi faré un cop d'ull a veure si trobo una solució.

marcboschmatas commented 1 year ago

Resolt! La solució era aquesta https://stackoverflow.com/questions/54631992/how-to-parse-xml-attributes-with-parent-attribute-into-data-frame-in-r