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

如何在R语言中计算两个Spatial多边形的重叠面积占比?

解决方案:计算两个空间多边形的重叠面积占比

问题背景

拥有鲸鱼分布多边形与北大西洋多边形,需计算两者重叠区域的面积占比,尝试raster::intersect和gIntersection未成功。

推荐方案(使用sf包)

推荐全程使用sf包处理空间数据,无需转换为Spatial类,操作更简洁且不易出错:

步骤1:加载依赖包

library(sf)
library(dplyr) # 可选,用于数据整理

步骤2:读取空间数据

直接读取为sf对象,无需转换:

# 读取北大西洋KML数据
Nordatlantik <- st_read("Daten/Nordatlantik.kml") %>% 
  st_zm(drop = TRUE) # 移除Z/M维度

# 读取鲸鱼分布SHP数据
Shp_Minke_whale <- st_read("Daten/Minky_Whale/data_0.shp")

步骤3:统一坐标系

关键:确保两个图层坐标系一致,先查看当前坐标系:

st_crs(Nordatlantik)
st_crs(Shp_Minke_whale)

若不一致,将鲸鱼数据转换为北大西洋数据的坐标系:

Shp_Minke_whale <- st_transform(Shp_Minke_whale, st_crs(Nordatlantik))

步骤4:计算重叠区域

# 计算两个多边形的交集
overlap_area <- st_intersection(Nordatlantik, Shp_Minke_whale)

步骤5:计算面积与占比

# 计算各区域面积(自动使用椭球体计算地理坐标系面积,单位为平方米)
whale_total_area <- sum(st_area(Shp_Minke_whale))
overlap_total_area <- sum(st_area(overlap_area))

# 计算重叠面积占鲸鱼分布区的比例
overlap_ratio <- overlap_total_area / whale_total_area
cat("重叠面积占比:", round(overlap_ratio * 100, 2), "%\n")

# 若需要计算占北大西洋的比例
atlantic_total_area <- sum(st_area(Nordatlantik))
overlap_ratio_atlantic <- overlap_total_area / atlantic_total_area
cat("重叠面积占北大西洋的比例:", round(overlap_ratio_atlantic * 100, 2), "%\n")

常见问题说明

  1. 原代码失败原因:混用sf与Spatial类对象,且未统一坐标系,导致交集计算出错。
  2. st_area优势:针对地理坐标系(如WGS84)会自动使用椭球体计算真实面积,比raster::area更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:45:37