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

R语言空间多边形交集处理:为国家匹配主导气候区

国家主导气候区匹配解决方案

核心思路

通过计算国家与气候区的交集面积,统计每个国家内各气候区的面积占比,最终筛选占比最高的气候区作为该国的主导气候区。

具体实现步骤(基于R语言)

假设国家边界数据框为countries(需包含唯一标识列,如country_id或country_name),气候区边界数据框为climate_zones(需包含气候区类型列,如climate_type)。

1. 数据格式转换与交集计算

使用sf包处理空间数据,它比over和raster::union更适合多边形交集运算,且对大型数据支持更好:

library(sf)

# 转换为sf格式(若原数据不是)
countries_sf <- st_as_sf(countries)
climate_sf <- st_as_sf(climate_zones)

# 统一坐标系(若两者不一致)
climate_sf <- st_transform(climate_sf, st_crs(countries_sf))

# 计算多边形交集,保留双方属性列
intersection <- st_intersection(countries_sf, climate_sf)

# 计算每个交集区域的面积
intersection$intersect_area <- st_area(intersection)

2. 统计各气候区在国家内的总面积

用dplyr分组统计每个国家下各气候区的总面积:

library(dplyr)

climate_area_summary <- intersection %>%
  st_drop_geometry() %>%  # 移除几何列,简化数据框操作
  group_by(country_id, climate_type) %>%
  summarise(total_climate_area = sum(intersect_area)) %>%
  ungroup()

3. 计算占比并筛选主导气候区

# 先计算每个国家的总面积
country_total_area <- countries_sf %>%
  st_drop_geometry() %>%
  mutate(total_country_area = st_area(countries_sf)) %>%
  select(country_id, total_country_area)

# 合并数据、计算占比,筛选占比最高的气候区
dominant_climate <- climate_area_summary %>%
  left_join(country_total_area, by = "country_id") %>%
  mutate(area_ratio = as.numeric(total_climate_area / total_country_area)) %>%
  group_by(country_id) %>%
  slice_max(area_ratio, n = 1) %>%  # 提取占比最高的行
  ungroup() %>%
  select(country_id, climate_type, area_ratio)

4. 将主导气候区映射回国家数据

# 合并到原始国家数据框
countries_with_climate <- countries_sf %>%
  left_join(dominant_climate, by = "country_id")

常见问题修复

  • 若交集计算报错,先修复无效多边形:
countries_sf <- st_make_valid(countries_sf)
climate_sf <- st_make_valid(climate_sf)
  • 大型数据可启用sf的并行计算优化速度:
sf_use_s2(FALSE)  # 关闭S2球面几何,提升计算效率(根据数据场景选择)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:45:06