r - 如何在 R 中过滤大型 geojson 文件
问题描述
我在使用 R 过滤大型 geojson 文件时遇到问题。如果我只想显示一个国家/地区的地图,我不希望加载整个巨大的欧洲地图。所以我想过滤这个数据集,例如保加利亚——CNTR_CODE == "BG"
但我无法管理。请在下面找到要下载的代码以及未产生预期结果的初步努力
link <- 'https://ec.europa.eu/eurostat/cache/GISCO/distribution/v2/nuts/download/ref-nuts-2013-01m.geojson.zip'
temp <- tempfile()
download.file(link,temp)
mapdata <- readLines(unzip(temp, "NUTS_RG_01M_2013_4326_LEVL_3.geojson"))
mapdata <- jsonlite::fromJSON(mapdata, simplifyVector = FALSE)
#glimpse(mapdata)
mapdata$features[[100]]$properties$CNTR_CODE
[1] "BG"
library(sf)
mapdata2 <- copy(mapdata)
mapdata2 %>%
filter(CNTR_CODE %in% c('BG'))
谢谢。
解决方案
如果您使用正确的工具,这不是一个大文件。
library(geojsonsf)
可以直接读取geojson到一个sf
对象library(mapdeck)
可以绘制所有的多边形
link <- 'https://ec.europa.eu/eurostat/cache/GISCO/distribution/v2/nuts/download/ref-nuts-2013-01m.geojson.zip'
temp <- tempfile()
download.file(link,temp)
library(geojsonsf)
library(sf)
sf <- geojsonsf::geojson_sf(unzip(temp, "NUTS_RG_01M_2013_4326_LEVL_3.geojson"))
然后您可以过滤sf
对象并绘图
library(mapdeck)
set_token( "YOUR_MAPBOX_API_TOKEN" )
mapdeck(
style = mapdeck_style("dark")
) %>%
add_polygon(
data = sf[ sf$CNTR_CODE %in% c("BG"), ]
, fill_colour = "NUTS_NAME"
, legend = T
)
或绘制整个地段
mapdeck(
style = mapdeck_style("dark")
) %>%
add_polygon(
data = sf
, fill_colour = "NUTS_NAME"
, legend = T
)
推荐阅读
- python - 为什么我的原始二维数组在以下代码中被修改
- python - 如何使用 AWS Cognito 检索正确的凭证以访问 boto3 客户端上的 AWS SecretsManger - 身份池
- python - RPLY 解析器返回 ValueError
- python - 如何在滚动数据的子集上应用滚动聚合函数?
- javascript - 用 Java 下载带有 JavaScript Cookie 的文件
- angular - 即使在刷新页面后我也想禁用该按钮
- python - ValueError:长度不匹配:预期轴有 0 个元素,新值有 8 个元素
- javascript - 由于某种原因,我无法调用 setup()
- javascript - 有没有办法在创建 Firebase 云函数的同一文件中调用非云函数?
- docker - 使用 docker 远程执行 - 如何检索结果