首页 > 解决方案 > 如何在 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'))

谢谢。

标签: rjsongeojsonr-highcharter

解决方案


如果您使用正确的工具,这不是一个大文件。

  1. library(geojsonsf)可以直接读取geojson到一个sf对象
  2. 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
    )

在此处输入图像描述


推荐阅读