如何在R语言中读取flatgeobuf(.fgb)文件?
在R中读取FlatGeobuf(.fgb)文件并获取底层数据
leafem::addFgb仅负责将FGB文件加载到leaflet地图中可视化,无法直接提取底层空间数据。要获取并操作FGB文件的原始数据,可参考以下两种实用方法:
方法1:使用sf + flatgeobuf包
这是最主流的方案,sf包支持通过FlatGeobuf驱动直接读取文件并转为可操作的空间对象:
# 首次使用先安装依赖包 install.packages(c("sf", "flatgeobuf")) # 加载包 library(sf) library(flatgeobuf) # 下载FGB文件到临时路径 temp <- tempfile(fileext = ".fgb") download.file("https://esa-worldcover.s3.eu-central-1.amazonaws.com/esa_worldcover_grid_composites.fgb", temp) # 读取FGB文件为sf对象(可直接查看、修改底层数据) fgb_data <- st_read(temp, driver = "FlatGeobuf") # 查看数据结构 str(fgb_data) # 查看前5行属性数据 head(fgb_data, 5)
方法2:使用geobuffer包
若遇到版本兼容性问题,可尝试geobuffer包的专用读取函数:
# 安装包 install.packages("geobuffer") library(geobuffer) # 读取FGB文件 fgb_data <- read_flatgeobuf(temp) # 转为sf对象(方便后续空间分析操作) fgb_sf <- st_as_sf(fgb_data)
优化建议
针对大型FGB文件,建议通过空间过滤减少加载数据量,提升效率:
# 定义目标边界(WGS84坐标系) bbox <- st_bbox(c(xmin = -10, ymin = 30, xmax = 10, ymax = 50), crs = st_crs(4326)) # 仅读取边界内的数据 fgb_filtered <- st_read(temp, driver = "FlatGeobuf", wkt_filter = st_as_text(st_as_sfc(bbox)))
内容的提问来源于stack exchange,提问作者smartse
相关产品推荐
相关产品推荐

