Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions data-raw/comarques.R
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@ comarques <- utils::read.table(
encoding = "UTF-8"
)

comarques <- unique(comarques[order(comarques$regio, comarques$`name:ca`), ])
comarques <- unique(comarques[order(
comarques$regio, comarques$`name:ca`
), c("name:ca", "regio", "osm_id", "osm_type", "name", "wikipedia", "wikidata",
"border_type", "admin_level", "historic:admin_level", "ref:idescat")])
rownames(comarques) <- NULL

usethis::use_data(comarques, overwrite = TRUE, compress = "xz")
Expand All @@ -34,15 +37,15 @@ comarques_osm <- consulta_etiquetes_osm(
x = comarques,
etiquetes = c(
"name:ca", "osm_id", "osm_type", "name", "wikipedia", "wikidata",
"border_type", "admin_level", "historic:admin_level",
"border_type", "admin_level", "historic:admin_level", "ref:idescat", "ref:ine", "ref:INSEE"
)
)

lapply(comarques_osm, unique)

comarques <- comarques_osm[, c(
"name:ca", "regio", "osm_id", "osm_type", "name", "wikipedia", "wikidata",
"border_type", "admin_level", "historic:admin_level"
"border_type", "admin_level", "historic:admin_level", "ref:idescat" #, "ref:ine", "ref:INSEE" # etiquetes buides
)]


Expand Down
194 changes: 97 additions & 97 deletions data-raw/comarques.tsv

Large diffs are not rendered by default.

3,402 changes: 1,701 additions & 1,701 deletions data-raw/loc_admin_centre_municipis.tsv

Large diffs are not rendered by default.

4,997 changes: 4,997 additions & 0 deletions data-raw/loc_ref.tsv

Large diffs are not rendered by default.

143 changes: 0 additions & 143 deletions data-raw/localitats.R
Original file line number Diff line number Diff line change
Expand Up @@ -20,149 +20,6 @@ rownames(localitats_osm) <- NULL
load("data-raw/localitats_osm.RData", verbose = TRUE) # localitats_osm


## Ordena i desa localitats per tipus ----


### admin_centre de municipis ----

loc_admin_centre_municipis <- utils::read.table(
file = "data-raw/loc_admin_centre_municipis.tsv",
header = TRUE,
sep = "\t",
quote = "\"",
na.strings = "",
colClasses = "character", # osm_id no hi cap en variables de tipus enter
check.names = FALSE,
comment.char = "",
encoding = "UTF-8"
)

loc_admin_centre_municipis <- unique(loc_admin_centre_municipis[order(
loc_admin_centre_municipis$regio,
loc_admin_centre_municipis$comarca,
loc_admin_centre_municipis$municipi,
loc_admin_centre_municipis$`name:ca`
), ])
rownames(loc_admin_centre_municipis) <- NULL

usethis::use_data(loc_admin_centre_municipis, overwrite = TRUE, compress = "xz")

# utils::write.table(loc_admin_centre_municipis,
# file = "data-raw/loc_admin_centre_municipis.tsv",
# quote = TRUE,
# sep = "\t",
# na = "",
# row.names = FALSE,
# col.names = TRUE,
# qmethod = "double"
# )


#### Consulta dades a OSM ----

loc_admin_centre_municipis_osm <- consulta_etiquetes_osm(
x = loc_admin_centre_municipis,
etiquetes = c("name:ca", "osm_id", "osm_type", "name", "wikidata", "wikipedia", "place", "capital", "admin_level")
)
lapply(loc_admin_centre_municipis_osm, unique)

loc_admin_centre_municipis_osm <- loc_admin_centre_municipis_osm[, c(
"name:ca", "regio", "comarca", "osm_id", "osm_type", "name", "wikipedia", "wikidata",
"place", "capital", "admin_level"
)]

# Localitats sense etiqueta capital segons l'admin_level de la relació que fan d'admin_centre
edita <- loc_admin_centre_municipis_osm[is.na(loc_admin_centre_municipis_osm$capital), ]


#### Compara nova base de dades amb la del paquet instal·lat ----

library(compareDF)

cols <- intersect(names(loc_admin_centre_municipis_osm), names(monitorOSM::loc_admin_centre_municipis))
diff_loc_admin_centre_muni <- compare_df(
loc_admin_centre_municipis_osm[, cols], monitorOSM::loc_admin_centre_municipis[, cols],
group_col = c("osm_type", "osm_id")
)
view_html(diff_loc_admin_centre_muni)



#### Consulta admin_centre de municipis a OSM ----

municipis_osm <- by(municipis, municipis$comarca, function(x) {
osmapiR::osm_get_objects(osm_type = "relation", osm_id = x$osm_id)
})

admin_centre_list <- lapply(municipis_osm, function(x) {
admin_centres <- lapply(x$members, function(y) {
admin_centre <- y[y[, "role"] %in% "admin_centre", 1:2, drop = FALSE]
colnames(admin_centre) <- c("osm_type", "osm_id")
admin_centre
})

x$admin_centre <- admin_centres

return(x)
})

admin_centre <- do.call(rbind, admin_centre_list)
rownames(admin_centre) <- NULL

n_centres <- sapply(admin_centre$admin_centre, nrow)
table(n_centres)
admin_centre[n_centres == 2, ]

admin_centre_objs <- do.call(rbind, admin_centre$admin_centre)
admin_centre_osm <- consulta_etiquetes_osm(
x = admin_centre_objs,
etiquetes = c("name:ca", "osm_id", "osm_type", "name", "wikidata", "wikipedia", "place", "capital", "admin_level")
)


##### Afegeix municipi, comarca i regió ----

cols_area <- c("regio", "comarca", "municipi")
admin_centre_osm[, cols_area] <- NA_character_
for (i in seq_len(nrow(admin_centre))) {
admin_centre_id <- admin_centre$admin_centre[[i]]
sel_admin_centre <- admin_centre_osm$osm_type %in% admin_centre_id[, "osm_type"] &
admin_centre_osm$osm_id %in% admin_centre_id[, "osm_id"]
sel_municipi <- municipis$osm_type %in% admin_centre$type[i] & municipis$osm_id %in% admin_centre$id[i]
admin_centre_osm[sel_admin_centre, cols_area] <- municipis[sel_municipi, c("regio", "comarca", "name:ca")]
}

municipis_admin_centre <- admin_centre_osm[, c(
"name:ca", "regio", "comarca", "municipi", "osm_id", "osm_type", "name", "wikipedia", "wikidata",
"place", "capital", "admin_level"
)]

library(compareDF)
view_html(compare_df(municipis_admin_centre, loc_admin_centre_municipis, group_col = c("osm_type", "osm_id")))


#### FET: Afegeix capital a les localitats que no en tenen ----
sense_capital <- loc_admin_centre_municipis[is.na(loc_admin_centre_municipis$capital), ]

rels_obj <- list()
for (i in seq_len(nrow(sense_capital))) {
rels_obj[[i]] <- osmapiR::osm_relations_object(osm_type = sense_capital$osm_type[i], osm_id = sense_capital$osm_id[i])
}

sel_rels_obj <- rels_obj[sapply(rels_obj$tags, function(x) "admin_centre" %in% x$key), ]

sel_rels_obj <- lapply(rels_obj, function(x) {
x <- x[sapply(x$tags, function(y) "admin_level" %in% y$key), ]
})
capital <- sapply(sel_rels_obj, function(x) sapply(x$tags, function(y) y$value[y$key == "admin_level"]))

## CONCLUSIÓ: Tots corresponen a capital = "8"
loc_admin_centre_municipis$capital[is.na(loc_admin_centre_municipis$capital)] <- capital

# GOTO: admin_centre de municipis per actualitzar la BD local
# GOTO: exec/restaura_etiquetes per localitats


### TODO: altres tipus de localitat ----
sort(table(localitats_osm$place, useNA = "ifany"))
cols <- c("name:ca", "regio", "comarca", "municipi", "osm_type", "osm_id", "name", "wikipedia", "wikidata", "place")
Expand Down
209 changes: 209 additions & 0 deletions data-raw/localitats_admin_centre_municipis.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@

## Ordena i desa localitats per tipus ----


### admin_centre de municipis ----

loc_admin_centre_municipis <- utils::read.table(
file = "data-raw/loc_admin_centre_municipis.tsv",
header = TRUE,
sep = "\t",
quote = "\"",
na.strings = "",
colClasses = "character", # osm_id no hi cap en variables de tipus enter
check.names = FALSE,
comment.char = "",
encoding = "UTF-8"
)

loc_admin_centre_municipis <- unique(loc_admin_centre_municipis[order(
loc_admin_centre_municipis$regio,
loc_admin_centre_municipis$comarca,
loc_admin_centre_municipis$municipi,
loc_admin_centre_municipis$`name:ca`
), c("name:ca", "regio", "comarca", "municipi", "osm_type", "osm_id",
"name", "wikidata", "wikipedia", "place", "capital", "admin_level",
"ref:idescat", "ref:ine", "ref:INSEE"
)])
rownames(loc_admin_centre_municipis) <- NULL

usethis::use_data(loc_admin_centre_municipis, overwrite = TRUE, compress = "xz")

# utils::write.table(loc_admin_centre_municipis,
# file = "data-raw/loc_admin_centre_municipis.tsv",
# quote = TRUE,
# sep = "\t",
# na = "",
# row.names = FALSE,
# col.names = TRUE,
# qmethod = "double"
# )


#### Consulta dades a OSM ----

loc_admin_centre_municipis_osm <- consulta_etiquetes_osm(
x = loc_admin_centre_municipis,
etiquetes = c("name:ca", "osm_id", "osm_type", "name", "wikidata", "wikipedia", "place", "capital", "admin_level",
"ref:idescat", "ref:ine", "ref:INSEE")
)
lapply(loc_admin_centre_municipis_osm, unique)

loc_admin_centre_municipis <- loc_admin_centre_municipis_osm[, c(
"name:ca", "regio", "comarca", "municipi", "osm_id", "osm_type", "name", "wikipedia", "wikidata",
"place", "capital", "admin_level", "ref:idescat", "ref:ine", "ref:INSEE"
)]

# Localitats sense etiqueta capital segons l'admin_level de la relació que fan d'admin_centre
edita <- loc_admin_centre_municipis[is.na(loc_admin_centre_municipis$capital), ]


#### Compara nova base de dades amb la del paquet instal·lat ----

library(compareDF)

cols <- intersect(names(loc_admin_centre_municipis), names(monitorOSM::loc_admin_centre_municipis))
diff_loc_admin_centre_muni <- compare_df(
loc_admin_centre_municipis[, cols], monitorOSM::loc_admin_centre_municipis[, cols],
group_col = c("osm_type", "osm_id")
)
view_html(diff_loc_admin_centre_muni)



## Cerca localitats que són admin_centre de municipis a OSM ----

municipis_osm <- by(municipis, municipis$comarca, function(x) {
osmapiR::osm_get_objects(osm_type = "relation", osm_id = x$osm_id)
})

admin_centre_list <- lapply(municipis_osm, function(x) {
admin_centres <- lapply(x$members, function(y) {
admin_centre <- y[y[, "role"] %in% "admin_centre", 1:2, drop = FALSE]
colnames(admin_centre) <- c("osm_type", "osm_id")
admin_centre
})

x$admin_centre <- admin_centres

return(x)
})

admin_centre <- do.call(rbind, admin_centre_list)
rownames(admin_centre) <- NULL

n_centres <- sapply(admin_centre$admin_centre, nrow)
table(n_centres)
admin_centre[n_centres == 2, ]

admin_centre_objs <- do.call(rbind, admin_centre$admin_centre)
admin_centre_osm <- consulta_etiquetes_osm(
x = admin_centre_objs,
etiquetes = c("name:ca", "osm_id", "osm_type", "name", "wikidata", "wikipedia", "place", "capital", "admin_level")
)


### Afegeix municipi, comarca i regió ----

cols_area <- c("regio", "comarca", "municipi")
admin_centre_osm[, cols_area] <- NA_character_
for (i in seq_len(nrow(admin_centre))) {
admin_centre_id <- admin_centre$admin_centre[[i]]
sel_admin_centre <- admin_centre_osm$osm_type %in% admin_centre_id[, "osm_type"] &
admin_centre_osm$osm_id %in% admin_centre_id[, "osm_id"]
sel_municipi <- municipis$osm_type %in% admin_centre$type[i] & municipis$osm_id %in% admin_centre$id[i]
admin_centre_osm[sel_admin_centre, cols_area] <- municipis[sel_municipi, c("regio", "comarca", "name:ca")]
}

municipis_admin_centre <- admin_centre_osm[, c(
"name:ca", "regio", "comarca", "municipi", "osm_id", "osm_type", "name", "wikipedia", "wikidata",
"place", "capital", "admin_level"
)]

library(compareDF)
view_html(compare_df(municipis_admin_centre, loc_admin_centre_municipis, group_col = c("osm_type", "osm_id")))


### FET: Afegeix capital a les localitats que no en tenen ----
sense_capital <- loc_admin_centre_municipis[is.na(loc_admin_centre_municipis$capital), ]

rels_obj <- list()
for (i in seq_len(nrow(sense_capital))) {
rels_obj[[i]] <- osmapiR::osm_relations_object(osm_type = sense_capital$osm_type[i], osm_id = sense_capital$osm_id[i])
}

sel_rels_obj <- rels_obj[sapply(rels_obj$tags, function(x) "admin_centre" %in% x$key), ]

sel_rels_obj <- lapply(rels_obj, function(x) {
x <- x[sapply(x$tags, function(y) "admin_level" %in% y$key), ]
})
capital <- sapply(sel_rels_obj, function(x) sapply(x$tags, function(y) y$value[y$key == "admin_level"]))

## CONCLUSIÓ: Tots corresponen a capital = "8"
loc_admin_centre_municipis$capital[is.na(loc_admin_centre_municipis$capital)] <- capital


## Cerca localitats a OSM ----

localitats_osm <- by(municipis, municipis$osm_id, function(x) {
d <- osmdata::opq(bbox = paste0("relation(id:", x$osm_id, ")"), out = "tags", timeout = 500) |>
osmdata::add_osm_feature(key = "place") |>
osmdata::osmdata_data_frame()

area <- x[, c("regio", "comarca", "name:ca")]
names(area) <- gsub("^name:ca", "municipi", names(area))

out <- cbind(area, d)

return(out)
})

localitats_osm <- do.call(dbTools::rbind_addColumns, localitats_osm)
rownames(localitats_osm) <- NULL

# save(localitats_osm, file = "data-raw/localitats_osm.RData", compress = "xz")
load("data-raw/localitats_osm.RData", verbose = TRUE) # localitats_osm


### TODO: altres tipus de localitat ----
sort(table(localitats_osm$place, useNA = "ifany"))
cols <- c("name:ca", "regio", "comarca", "municipi", "osm_type", "osm_id", "name", "wikipedia", "wikidata", "place")
sel_place <- c(
"archipelago", "borough", "city", "city_block", "county", "hamlet", "island", "islet",
"municipality", "quarter", "region", "sea", "square", "state", "suburb", "town", "village"
)
setdiff(unique(localitats_osm$place), sel_place)
# Manten 1 place=locality que és admin_centre d'un municipi
# name:ca regio comarca municipi osm_type osm_id name place
# 9265 Sant Jordi Desvalls Principat Gironès Sant Jordi Desvalls node 1470839189 Sant Jordi Desvalls locality

localitats_osm_sel <- localitats_osm[
localitats_osm$place %in% sel_place | (localitats_osm$osm_type == "node" & localitats_osm$osm_id == "1470839189"),
cols
]

table(localitats_osm_sel$place)

sapply(localitats_osm_sel, function(x) sum(is.na(x)))

sense_nom <- localitats_osm_sel[is.na(localitats_osm_sel$name), ]
sense_nom <- sense_nom[, sapply(sense_nom, function(x) !all(is.na(x)))]
table(sense_nom$place)
table(sense_nom$osm_type)
table(sense_nom$`name:ca`)
sense_nom[!is.na(sense_nom$`name:ca`), ]

localitats_osm_sel <- localitats_osm_sel[!is.na(localitats_osm_sel$name), ]

sense_nom_ca <- localitats_osm_sel[is.na(localitats_osm_sel$`name:ca`), ]
sense_nom_ca <- sense_nom_ca[, sapply(sense_nom, function(x) !all(is.na(x)))]
table(sense_nom_ca$place)
table(sense_nom_ca$osm_type)
table(sense_nom_ca$regio)
sense_nom_ca$name

sense_nom[!is.na(sense_nom$`name:ca`), ]

#### TODO: afegeix name:ca que falten ----
# genera la base de dades de referència (1 taula o una per cada tipus de place?)
# elimina municipis[municipis$osm_type == "node", ] (tots presents a localitats_osm_sel)
Loading
Loading