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

如何在R中比较并合并两个sf对象?以赫尔辛基蓝绿覆盖数据为例

赫尔辛基250m网格蓝绿覆盖数据对比与合并需求

我制作了芬兰赫尔辛基250m网格下的两类蓝绿覆盖百分比数据:

  • 一类基于Corine土地覆盖数据(芬兰地区数据可从Syke获取)
  • 另一类基于Open Street Map数据

预处理后的gpkg格式数据集可从GitHub仓库获取。

我希望对这两个版本的数据进行比较与合并(假设OSM在市中心区域的植被绿度和水域预测表现更优),想知道是否存在可用于比较两个不同sf对象的空间命令——类似raster包中overlay的功能。同时需要保留网格ID的关联,方便后续与社会经济数据关联。


数据导入与可视化代码

# 加载R包 ####
library(sf)
library(tmap)

# 加载2014年数据 ####
Corine.bg.2014 <- st_read("COR.2014.gpkg")
OSM.bg.2014 <- st_read("OSM.2014.gpkg")

# 绘制数据 ####
tmap_mode("view")

tm_shape(Corine.bg.2014) + 
  tm_polygons("area.pct", palette="Greens") +
  tm_layout(title= "Corine 2014", legend.outside=TRUE)

tm_shape(OSM.bg.2014) + 
  tm_polygons("area.pct", palette="Greens") +
  tm_layout(title= "OSM 2014", legend.outside=TRUE)

可视化结果

Corine 2014
OSM 2014


当前尝试的合并与差值计算方法

# 提取OSM数据中用于关联的变量 ####
library(tidyverse)

tmp <- OSM.bg.2014 %>%
       dplyr::select(ID, area.OSM=area.pct) %>%
       as.tibble()

# 将OSM数据关联到Corine表 ####
test <- Corine.bg.2014 %>%
          left_join(tmp)

# 计算Corine与OSM蓝绿覆盖百分比的差值 ####
test$diff <- test$area.pct-test$area.OSM

# 可视化差值结果 ####
tm_shape(test) + 
  tm_polygons("diff", palette="RdYlGn", 
              style="fisher") +
  tm_layout(title= "difference 2014", legend.outside=TRUE)

差值可视化结果

difference


内容的提问来源于stack exchange,提问作者Joanne Demmler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:05:25