将 geojson 转换为 sf 以获得 clotopleth 地图

Converting geojson into sf for a clotopleth map

我最近一直在研究传单包,了解了添加标记的基础知识,reading/plotting 来自本地源的 shapefile 并在 Shiny 中显示最终输出。

我目前正在尝试更多地了解如何直接从网络访问 geojson 文件,因为我在 Shiny 中创建的地图在上传到 shinyapps.io 时没有正确显示(我认为这是因为本地文件未随应用程序本身上传,需要阅读更多内容)

话虽如此,我发现 this link 其中包含世界所有国家的政治地图。添加的文档建议使用以下代码获取多边形,但建议的方法似乎对我不起作用。

library(jsonlite)
json_file <- 'https://datahub.io/core/geo-countries/datapackage.json'
json_data <- fromJSON(paste(readLines(json_file), collapse=""))

我尝试使用 geojson_sf(json_data) 将提取的信息转换为 sf,但出现错误“UseMethod 错误”。从我读到的内容来看,处理空间信息的最佳格式似乎是 sf,它可以让我left_join 获得所需的信息并按名称向每个国家/地区添加人口数据。

我能得到一个关于如何提取多边形的指针,以便我可以将它们添加到我的传单地图中吗?

示例数据:

Countries <- structure(list(Canada = 37590000, UnitedStates = 328200000, Mexico = 127600000), row.names = c(NA, -1L), class = c("tbl_df", "tbl", "data.frame"))

感谢任何指向可以澄清我的问题的参考资料的指针或链接。谢谢!

你的问题中有几点表明你对 geojson 是什么以及你使用的函数应该做什么有误解:

  1. geojson_sf() 旨在处理原始 json/geojson。因此它不适用于您已经解析的 json_data.
  2. 你说你正在尝试使用 geojson 文件,但你提​​供的 link 不是 geojson

如果你去 link https://datahub.io/core/geo-countries/datapackage.json 你会看到它 JSON 描述数据,它给出了实际 geojson 文件的路径

library(sf)

json_file <- 'https://datahub.io/core/geo-countries/datapackage.json'
json_data <- jsonlite::fromJSON(json_file)

## The actual geojson is contained here
geojson <- json_data$resources$path[3]

geojson
# [1] "https://pkgstore.datahub.io/core/geo-countries/countries/archive/23f420f929e0e09c39d916b8aaa166fb/countries.geojson"

现在您知道了 geojson 的位置,您可以通过几种不同的方式阅读它:

  1. 使用geojsonsf
sf <- geojsonsf::geojson_sf(geojson)
  1. 使用sf
sf <- sf::st_read(geojson)

你可以/应该在这种情况下使用sf,因为数据不大,可以轻松处理。

我构建 geojsonsf 是为了在您需要更快的速度时使用它来处理 sf geojson reader 在 [= 上挣扎的情况22=]