我已经抓取了一个 geoJSON 文件并设法找到了我需要获取的数据:
library(rvest)
raw_site <- "https://raw.githubusercontent.com/fogocruz/mapafc/main/index.html"
rvest_html <- read_html(raw_site, options = "HUGE")
script <- rvest_html %>% html_element("body") %>% html_element("script")
json <- script %>% html_text() %>% jsonlite::parse_json()
Crime2013 <- json$x$calls[[10]][["args"]]
Crime2013[[1]][[1]][[1]][[1]]
$lng
$lng[[1]]
[1] -43.26532
$lng[[2]]
[1] -43.26521
$lng[[3]]
[1] -43.26504
$lng[[4]]
[1] -43.26464
$lng[[5]]
[1] -43.26455
$lng[[6]]
[1] -43.26392
$lng[[7]]
[1] -43.26392
$lng[[8]]
[1] -43.26397
$lng[[9]]
[1] -43.26398
$lng[[10]]
[1] -43.26432
$lng[[11]]
[1] -43.26433
$lng[[12]]
[1] -43.26511
$lng[[13]]
[1] -43.26532
$lng[[14]]
[1] -43.26569
$lng[[15]]
[1] -43.26657
$lng[[16]]
[1] -43.26671
$lng[[17]]
[1] -43.26695
$lng[[18]]
[1] -43.26834
$lng[[19]]
[1] -43.26805
$lng[[20]]
[1] -43.26718
$lng[[21]]
[1] -43.26652
$lng[[22]]
[1] -43.26746
$lng[[23]]
[1] -43.26709
$lng[[24]]
[1] -43.266
$lng[[25]]
[1] -43.26566
$lng[[26]]
[1] -43.26552
$lng[[27]]
[1] -43.26532
$lat
$lat[[1]]
[1] -22.89113
$lat[[2]]
[1] -22.89114
$lat[[3]]
[1] -22.89105
$lat[[4]]
[1] -22.8908
$lat[[5]]
[1] -22.89079
$lat[[6]]
[1] -22.89117
$lat[[7]]
[1] -22.89117
$lat[[8]]
[1] -22.89124
$lat[[9]]
[1] -22.89123
$lat[[10]]
[1] -22.89185
$lat[[11]]
[1] -22.89187
$lat[[12]]
[1] -22.89143
$lat[[13]]
[1] -22.89164
$lat[[14]]
[1] -22.89202
$lat[[15]]
[1] -22.89264
$lat[[16]]
[1] -22.89266
$lat[[17]]
[1] -22.89263
$lat[[18]]
[1] -22.8917
$lat[[19]]
[1] -22.89119
$lat[[20]]
[1] -22.89175
$lat[[21]]
[1] -22.89091
$lat[[22]]
[1] -22.89043
$lat[[23]]
[1] -22.88976
$lat[[24]]
[1] -22.8903
$lat[[25]]
[1] -22.89072
$lat[[26]]
[1] -22.89098
$lat[[27]]
[1] -22.89113`
这是一个奇异的多边形形状;我有 3618 个这样的信息,然后有 3618 行信息,这样我还需要解析然后一对一匹配,然后在交互式地图上绘制
供参考,可以通过线定位需要匹配的数据
json$x$calls[[3]][["args"]][[5]][[1]] %>% read_html() %>% html_text()
返回
[1] "id 24 Triênio 2006-2008 Grupo Milícia Território CONJUNTO DO IAPC Tipo Conjunto habitacional Bairro CACHAMBI Município Rio de Janeiro "
这里,第一个参数是它是什么类别的信息(id)、(Trienio)、(Grupo),接下来是它需要显示的信息(24)、(2006-2008)、(Milicia)。 ..
我怎样才能解析它然后匹配它?
我尝试使用 unnest() 但我不知道如何先执行 tibble() - 或者这是否是正确的方向。
这可能会让你开始。
首先我循环浏览列表
Crime2013
(我只能到 2022 年),然后提取经度、纬度和位置名称。然后我rbind
列表有一个包含lng、lat和位置名称的data.frame。
geolist <- lapply(1:2022 ,function(x) {bind_cols(
lng = unlist(Crime2013[[1]][[x]][[1]][[1]]$lng),
lat = unlist(Crime2013[[1]][[x]][[1]][[1]]$lat),
location = json$x$calls[[3]][["args"]][[5]][[x]] %>% read_html() %>% html_text()) })
geodf <- do.call(rbind, geolist)