从多边形中删除相交点
Remove intersecting points from polygon
我正在尝试从两个 sp
几何体的 gDifference
中创建一组新的 SpatialPoints
。假设如下:
你有两个SpatialPolygons
:
library(rgeos)
library(sp)
#Create SpatialPlygons objects
polygon1 <- readWKT("POLYGON((-190 -50, -200 -10, -110 20, -190 -50))")
#polygon 1
polygon2 <- readWKT("POLYGON((-180 -20, -140 55, 10 0, -140 -60, -180 -20))") #polygon 2
#Plot both polygons
par(mfrow = c(1,2)) #in separate windows
plot(polygon1, main = "Polygon1") #window 1
plot(polygon2, main = "Polygon2") #window 2
现在,您想得到它们之间的gDifference
:
polygon_set <- readWKT(paste("POLYGON((-180 -20, -140 55, 10 0, -140 -60, -180 -20),",
"(-190 -50, -200 -10, -110 20, -190 -50))"))
par(mfrow = c(1,1)) #now, simultaneously
plot(polygon_set, main = "Polygon1 & Polygon2")
clip <- gDifference(polygon2, polygon1, byid = TRUE, drop_lower_td = T) #clip polygon 2 with polygon 1
plot(clip, col = "red", add = T)
如何获得仅包含 polygon2
非交叉点(即下图中的红点)的 sp
几何图形?
提前致谢!
我认为比较 clip
和 polygon2
的坐标会给你 non-intersecting 分。
library(ggplot2) # as @shayaa commented, ggplot2::fortify is useful.
clip_coords <- fortify(clip)[,1:2] # or, clip@polygons[[1]]@Polygons[[1]]@coords
polygon2_coords <- fortify(polygon2)[,1:2] # or, polygon2@polygons[[1]]@Polygons[[1]]@coords
duplicated_coords <- merge(clip_coords, polygon2_coords)
# duplicated_coords is the non-intersecting points of the polygon2
res <- SpatialPoints(duplicated_coords)
plot(clip)
plot(res, col="red", pch=19, add=T)
[附加代码:版本。相交点(假设上面的代码有运行)]
## an independent method
library(ggplot2); library(dplyr)
clip2 <- gIntersection(polygon2, polygon1, byid = TRUE, drop_lower_td = T)
res2.1 <- fortify(clip2)[,1:2] %>% setdiff(polygon2_coords) %>% # not_duplicated_coords
SpatialPoints()
## a method usign a gDifference.sp.coords
res2.2 <- fortify(clip2)[,1:2] %>% merge(clip_coords) %>%
distinct() %>% SpatialPoints() # res2.2 is equal to res2.1 in elements.
plot(polygon_set, main = "Polygon1 & Polygon2")
plot(clip2, col="red", add=T)
plot(res2.1, col="blue", pch=19, add=T)
我正在尝试从两个 sp
几何体的 gDifference
中创建一组新的 SpatialPoints
。假设如下:
你有两个SpatialPolygons
:
library(rgeos)
library(sp)
#Create SpatialPlygons objects
polygon1 <- readWKT("POLYGON((-190 -50, -200 -10, -110 20, -190 -50))")
#polygon 1
polygon2 <- readWKT("POLYGON((-180 -20, -140 55, 10 0, -140 -60, -180 -20))") #polygon 2
#Plot both polygons
par(mfrow = c(1,2)) #in separate windows
plot(polygon1, main = "Polygon1") #window 1
plot(polygon2, main = "Polygon2") #window 2
现在,您想得到它们之间的gDifference
:
polygon_set <- readWKT(paste("POLYGON((-180 -20, -140 55, 10 0, -140 -60, -180 -20),",
"(-190 -50, -200 -10, -110 20, -190 -50))"))
par(mfrow = c(1,1)) #now, simultaneously
plot(polygon_set, main = "Polygon1 & Polygon2")
clip <- gDifference(polygon2, polygon1, byid = TRUE, drop_lower_td = T) #clip polygon 2 with polygon 1
plot(clip, col = "red", add = T)
如何获得仅包含 polygon2
非交叉点(即下图中的红点)的 sp
几何图形?
提前致谢!
我认为比较 clip
和 polygon2
的坐标会给你 non-intersecting 分。
library(ggplot2) # as @shayaa commented, ggplot2::fortify is useful.
clip_coords <- fortify(clip)[,1:2] # or, clip@polygons[[1]]@Polygons[[1]]@coords
polygon2_coords <- fortify(polygon2)[,1:2] # or, polygon2@polygons[[1]]@Polygons[[1]]@coords
duplicated_coords <- merge(clip_coords, polygon2_coords)
# duplicated_coords is the non-intersecting points of the polygon2
res <- SpatialPoints(duplicated_coords)
plot(clip)
plot(res, col="red", pch=19, add=T)
[附加代码:版本。相交点(假设上面的代码有运行)]
## an independent method
library(ggplot2); library(dplyr)
clip2 <- gIntersection(polygon2, polygon1, byid = TRUE, drop_lower_td = T)
res2.1 <- fortify(clip2)[,1:2] %>% setdiff(polygon2_coords) %>% # not_duplicated_coords
SpatialPoints()
## a method usign a gDifference.sp.coords
res2.2 <- fortify(clip2)[,1:2] %>% merge(clip_coords) %>%
distinct() %>% SpatialPoints() # res2.2 is equal to res2.1 in elements.
plot(polygon_set, main = "Polygon1 & Polygon2")
plot(clip2, col="red", add=T)
plot(res2.1, col="blue", pch=19, add=T)