You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中将两个Simple Feature Collection合并为单个GeoJSON FeatureCollection

合并区级与地区级Simple Feature Collection为单个GeoJSON FeatureCollection

我在R中有两个由Shapefile转换而来的Simple Feature Collection,分别对应区级(districts)和地区级(regions)数据。需要将它们合并为单个GeoJSON FeatureCollection,且两者属性名不同,以便后续在MapBox地图中过滤数据图层(例如一个图层为区级人口数据,另一个为地区级人口数据)。当前代码如下:

library(sf)
library(dplyr)
library(sfheaders)
library(geojsonio)

path_to_data <- "Ghana_261"

sf_use_s2(FALSE)

districts <-
  read_sf(path_to_data) %>% 
  select(DIST_NAME = Name, REGION = Pcode) %>% 
  st_make_valid()  %>% 
  sf_remove_holes()

regions <-
  districts %>%  
  group_by(REGION) %>% 
  summarise() %>%
  sf_remove_holes()

plot(regions)

# how do I combine these into a single geojson?
districts_json <- geojson_json(districts)
regions_json <- geojson_json(regions)

解决方案

要合并两个属性结构不同的sf对象并导出为单个GeoJSON,核心是先统一两者的属性列结构,再合并导出:

  1. 添加层级标识与补全属性列:给每个数据集添加用于区分层级的标记列(比如admin_level),同时补全对方缺失的属性列(用NA填充),确保两个sf对象的列名完全一致。
  2. 合并sf对象:用bind_rows()合并处理后的两个数据集。
  3. 导出为GeoJSON:直接将合并后的sf对象导出为GeoJSON文件。

修改后的完整代码:

library(sf)
library(dplyr)
library(sfheaders)
library(geojsonio)

path_to_data <- "Ghana_261"

sf_use_s2(FALSE)

districts <-
  read_sf(path_to_data) %>% 
  select(DIST_NAME = Name, REGION = Pcode) %>% 
  st_make_valid()  %>% 
  sf_remove_holes() %>%
  # 添加区级标识,保留原有属性
  mutate(admin_level = "district")

regions <-
  districts %>%  
  group_by(REGION) %>% 
  summarise() %>%
  sf_remove_holes() %>%
  # 添加地区级标识,补全区级特有的DIST_NAME列(用NA填充)
  mutate(admin_level = "region",
         DIST_NAME = NA_character_)

# 合并两个sf对象
combined_sf <- bind_rows(districts, regions)

# 导出为GeoJSON文件
geojson_write(combined_sf, file = "combined_ghana.geojson")

关键说明

  • admin_level列可以在MapBox中作为过滤条件,快速区分区级和地区级要素图层。
  • 补全缺失属性列是为了让bind_rows()正常合并两个sf对象,GeoJSON会保留这些NA值,不影响后续过滤逻辑。
  • 最终导出的GeoJSON是标准FeatureCollection,包含所有区级和地区级要素,每个要素都带有admin_level、DIST_NAME、REGION属性。

内容的提问来源于stack exchange,提问作者L Smeets

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:05:38