将 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 是什么以及你使用的函数应该做什么有误解:
geojson_sf()
旨在处理原始 json/geojson。因此它不适用于您已经解析的 json_data
.
- 你说你正在尝试使用 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 的位置,您可以通过几种不同的方式阅读它:
- 使用
geojsonsf
sf <- geojsonsf::geojson_sf(geojson)
- 使用
sf
sf <- sf::st_read(geojson)
你可以/应该在这种情况下使用sf
,因为数据不大,可以轻松处理。
我构建 geojsonsf
是为了在您需要更快的速度时使用它来处理 sf
geojson reader 在 [= 上挣扎的情况22=]
我最近一直在研究传单包,了解了添加标记的基础知识,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 是什么以及你使用的函数应该做什么有误解:
geojson_sf()
旨在处理原始 json/geojson。因此它不适用于您已经解析的json_data
.- 你说你正在尝试使用 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 的位置,您可以通过几种不同的方式阅读它:
- 使用
geojsonsf
sf <- geojsonsf::geojson_sf(geojson)
- 使用
sf
sf <- sf::st_read(geojson)
你可以/应该在这种情况下使用sf
,因为数据不大,可以轻松处理。
我构建 geojsonsf
是为了在您需要更快的速度时使用它来处理 sf
geojson reader 在