这是有关清理邮政编码区域的部分答案。假设您使用凸包来获取一堆定义多边形的顶点。
library(polyclip)
library(ggplot2)
canada <- data.frame(x = c(0,1,1,0),
y = c(0,0,1,1))
postcode1 <- data.frame(x = c(0.5, 1.5, 1.5, 0.8),
y = c(0.5, 0.8, 1.5, 1.5))
postcode2 <- data.frame(x = c(0.25, 0.75, 0.75, 0.25),
y = c(0.25, 0.25, 0.75, 0.75))
ggplot() +
geom_polygon(data = canada, aes(x,y), fill = "lightblue", color = "blue", alpha = 0.5) +
geom_polygon(data = postcode1, aes(x,y), fill = "lightgreen", color = "green", alpha = 0.5) +
geom_polygon(data = postcode2, aes(x,y), fill = "pink", color = "red", alpha = 0.5)
您可以看到邮政编码区域的凸包彼此重叠,其中之一延伸到国外。这polyclip
包允许您对顶点所包围的区域进行交集、并集、异或和 setdiff。
clip1 <- polyclip(postcode1, canada, "intersect")[[1]] |> as.data.frame()
clip2 <- polyclip(postcode2, clip1, "minus")[[1]] |> as.data.frame()
ggplot() +
geom_polygon(data = canada, aes(x,y), fill = "lightblue", color = "blue", alpha = 0.5) +
geom_polygon(data = clip1, aes(x,y), fill = "lightgreen", color = "green", alpha = 0.5) +
geom_polygon(data = clip2, aes(x,y), fill = "pink", color = "red", alpha = 0.5)
剪报快乐!