首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中与同一多边形相交的几何图形面积的组合计算

R中与同一多边形相交的几何图形面积的组合计算
EN

Stack Overflow用户
提问于 2022-07-28 10:29:44
回答 1查看 82关注 0票数 -1

我的工作是洪水数据和选区,两者都是(多)多边形数据。我有不同类型的洪水数据:沿海洪水(蓝色)和河流洪水(以下绿色)。我必须计算每个被洪水淹没的选区的总表面。

我首先计算每种类型的洪水和选区之间的交集:

代码语言:javascript
复制
inters_c <- st_intersection(ireED_val, coast_val)
inters_r <- st_intersection(ireED_val, river_val)

这如下图所示,浅蓝色地区是海岸洪水影响特定教育署的部分。洪水和选区之间的交汇处。

一个选区可能会受到沿海和河流洪水的影响。这两种类型的洪水可以重叠,但不一定重合,如图所示。洪水类型重叠。

因此,我不能用每一种洪水类型的交叉口面积之和来计算被洪水淹没的选区的总面积,因为这将导致在两种洪水类型重叠的情况下重复计算。

我要做的是创建多边形,这些多边形是由每个选区的交叉口联合而成的。一开始,我认为st_union(inters_c, inters_r)会做到这一点,但这会创建每个多边形x与所有多边形y的结合,所以这不是我所需要的。如果st_union允许一个by=ED_ID选项,那就更好了,但这似乎是不可能的。对我怎么做有什么建议吗?

先谢谢大家。

EN

回答 1

Stack Overflow用户

发布于 2022-07-28 13:41:50

根据@社会科学家的建议,我提出了以下解决方案。

代码语言:javascript
复制
#Create intersection between flood areas and electoral districts
inters_c <- st_intersection(ireED_val, coast)
inters_r <- st_intersection(ireED_val, river)
inters_cr <- st_intersection(inters_c, inters_r)

#Compute flooding areas of intersection
inters_c$Area_flood_c <- st_area(inters_c)
inters_r$Area_flood_r <- st_area(inters_r)
inters_cr$Area_flood_cr <- st_area(inters_cr)

#Convert intersections to data frames
inters_c.df = data.frame(inters_c)
inters_r.df = data.frame(inters_r)
inters_cr.df = data.frame(inters_cr)

##Aggregate areas of all polygons of a certain flood type intersecting an ED
#Coast
flooded_areas_c = aggregate(
  x = inters_c.df$Area_flood_c,
  by = inters_c.df[c("ED_ID")],
  FUN = sum, na.rm = TRUE
)
#River
flooded_areas_r = aggregate(
  x = inters_r.df$Area_flood_r,
  by = inters_r.df[c("ED_ID")],
  FUN = sum, na.rm = TRUE
)
#Overlap coast-river
flooded_areas_cr = aggregate(
  x = inters_cr.df$Area_flood_cr,
  by = inters_cr.df[c("ED_ID")],
  FUN = sum, na.rm = TRUE
  )

#Merge flood areas to ED based on ID
ireED_val <-  merge(ireED_val, flooded_areas_c, by = "ED_ID", all.x= TRUE)
ireED_val <-  merge(ireED_val, flooded_areas_r, by = "ED_ID", all.x= TRUE)
ireED_val <-  merge(ireED_val, flooded_areas_cr, by = "ED_ID", all.x= TRUE)

#Replace NA from merge with 0 area
ireED_val$Area_flood_c[is.na(ireED_val$Area_flood_c)] <- 0
ireED_val$Area_flood_r[is.na(ireED_val$Area_flood_r)] <- 0
ireED_val$Area_flood_cr[is.na(ireED_val$Area_flood_cr)] <- 0

#Compute total flooded area removing double counting
ireED_val$Flooded_area <- ireED_val$Area_flood_c + ireED_val$Area_flood_r - ireED_val$Area_flood_cr

代码还没有优化。当我在我拥有的许多洪水组合(类型、场景、事件的可能性)上实现迭代时,我将更新它。但是,虽然不优雅,但至少现在还能用。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73151327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档