我的工作是洪水数据和选区,两者都是(多)多边形数据。我有不同类型的洪水数据:沿海洪水(蓝色)和河流洪水(以下绿色)。我必须计算每个被洪水淹没的选区的总表面。
我首先计算每种类型的洪水和选区之间的交集:
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选项,那就更好了,但这似乎是不可能的。对我怎么做有什么建议吗?
先谢谢大家。
发布于 2022-07-28 13:41:50
根据@社会科学家的建议,我提出了以下解决方案。
#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代码还没有优化。当我在我拥有的许多洪水组合(类型、场景、事件的可能性)上实现迭代时,我将更新它。但是,虽然不优雅,但至少现在还能用。
https://stackoverflow.com/questions/73151327
复制相似问题