在 sf - R 中保持不相交多边形的交集
Intersection keeping non-intersecting polygons in sf - R
我希望与 2 个空间层相交,同时保留所有不相交的特征。
我的第一层是澳大利亚新南威尔士州的SA2,看起来像
enter image description here
我的第二层是区域考拉重要区域 (ARKS):
enter image description here
当我将它们相交时,我得到了我想要的结果的一部分,即用 ARKS 细分 SA2。
enter image description here
问题是我还想拥有其余不相交的 SA2 多边形。期望的结果将是 SA2 的地图,其中相交的将根据它们与 ARKS 层相交的位置进行细分,不相交的将包含 NA。类似于下一张图片,但在单个数据集中而不是两个:
enter image description here
我 post 我的代码如下:
library(sf)
SA2 <- st_read('C:/Users/Maxi/Desktop/NSW Planning/Koala/Data/SA2_2021_GDA94/SA2_2021_AUST_GDA94.shp')
ARKS <- st_read('C:/Users/Maxi/Desktop/ARKS_data/ARKS_renamedv6_PriorityPopulations_GDA94geog.shp')
ARKS <- st_transform(ARKS, 3577)
SA2 <- st_transform(SA2, 3577)
SA2 <- SA2[SA2$STE_CODE21=='1',]
intersection <- st_intersection(SA2, ARKS)
数据获取自:
方舟:https://datasets.seed.nsw.gov.au/dataset/areas-of-regional-koala-significance-arks
希望这些信息足够了!
请考虑这种方法:一旦你有了 intersection
,你就可以删除与 st_difference
相交的部分。这将有效地将相交的 SA2 基于 ARKS 划分为多个区域,而其余部分保持原样。之后,您可以使用 dplyr::bind_rows
重新加入数据集,将 ARKS 层、SA2 相交分割和 SA2 non-intersected 保持原样:
library(sf)
library(ggplot2)
library(dplyr)
SA2 <- st_read("./SA2_2021_AUST_SHP_GDA94/SA2_2021_AUST_GDA94.shp")
ARKS <-
st_read(
"./Biodiversity_KoalaPrioritisationProjectNSW_ARKS/KoalaPrioritisationProjectNSW_ARKS.shp"
)
ARKS <- st_transform(ARKS, 3577)
SA2 <- st_transform(SA2, 3577)
SA2 <- SA2[SA2$STE_CODE21 == "1", ]
intersection <- st_intersection(SA2, ARKS)
# Control var, you can remove this
intersection$koala <- "Yes"
# Difference
SA2_diff <-
st_difference(SA2, st_union(st_geometry(intersection)))
# Check visually, we should see the gaps
ggplot(SA2_diff) +
geom_sf(fill = "green")
# Join all back
SA2_end <- dplyr::bind_rows(
SA2_diff,
intersection
)
ggplot(SA2_end) +
geom_sf(aes(fill = koala))
我希望与 2 个空间层相交,同时保留所有不相交的特征。
我的第一层是澳大利亚新南威尔士州的SA2,看起来像
enter image description here
我的第二层是区域考拉重要区域 (ARKS):
enter image description here
当我将它们相交时,我得到了我想要的结果的一部分,即用 ARKS 细分 SA2。
enter image description here
问题是我还想拥有其余不相交的 SA2 多边形。期望的结果将是 SA2 的地图,其中相交的将根据它们与 ARKS 层相交的位置进行细分,不相交的将包含 NA。类似于下一张图片,但在单个数据集中而不是两个: enter image description here
我 post 我的代码如下:
library(sf)
SA2 <- st_read('C:/Users/Maxi/Desktop/NSW Planning/Koala/Data/SA2_2021_GDA94/SA2_2021_AUST_GDA94.shp')
ARKS <- st_read('C:/Users/Maxi/Desktop/ARKS_data/ARKS_renamedv6_PriorityPopulations_GDA94geog.shp')
ARKS <- st_transform(ARKS, 3577)
SA2 <- st_transform(SA2, 3577)
SA2 <- SA2[SA2$STE_CODE21=='1',]
intersection <- st_intersection(SA2, ARKS)
数据获取自:
方舟:https://datasets.seed.nsw.gov.au/dataset/areas-of-regional-koala-significance-arks
希望这些信息足够了!
请考虑这种方法:一旦你有了 intersection
,你就可以删除与 st_difference
相交的部分。这将有效地将相交的 SA2 基于 ARKS 划分为多个区域,而其余部分保持原样。之后,您可以使用 dplyr::bind_rows
重新加入数据集,将 ARKS 层、SA2 相交分割和 SA2 non-intersected 保持原样:
library(sf)
library(ggplot2)
library(dplyr)
SA2 <- st_read("./SA2_2021_AUST_SHP_GDA94/SA2_2021_AUST_GDA94.shp")
ARKS <-
st_read(
"./Biodiversity_KoalaPrioritisationProjectNSW_ARKS/KoalaPrioritisationProjectNSW_ARKS.shp"
)
ARKS <- st_transform(ARKS, 3577)
SA2 <- st_transform(SA2, 3577)
SA2 <- SA2[SA2$STE_CODE21 == "1", ]
intersection <- st_intersection(SA2, ARKS)
# Control var, you can remove this
intersection$koala <- "Yes"
# Difference
SA2_diff <-
st_difference(SA2, st_union(st_geometry(intersection)))
# Check visually, we should see the gaps
ggplot(SA2_diff) +
geom_sf(fill = "green")
# Join all back
SA2_end <- dplyr::bind_rows(
SA2_diff,
intersection
)
ggplot(SA2_end) +
geom_sf(aes(fill = koala))