如何在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")
常见问题说明
- 原代码失败原因:混用
sf与Spatial类对象,且未统一坐标系,导致交集计算出错。 st_area优势:针对地理坐标系(如WGS84)会自动使用椭球体计算真实面积,比raster::area更准确。
内容的提问来源于stack exchange,提问作者RechercheKing
相关产品推荐
相关产品推荐

