我有一个包含不同多边形的文件,定义为data.frame
,id
,lng
和lat
。使用以下代码,我可以在地图上绘制这些多边形。
library(ggmap)
library(ggplot2)
map <- get_googlemap(center = c(lon = 9.26, lat = 47.3), zoom=10)
xy <- data.frame(id = c(rep(1,4), rep(2,4)), lng = c(9,9.5,9.5,9,9.25,9.7,9.7,9.24), lat= c(47.1,47.1,47.4,47.4,47.2,47.2,47.5,47.5))
p <- ggmap(map) + geom_polygon(data=xy, aes(x=xy$lng, y=xy$lat,group=xy$id),fill='red',alpha= 0.2)
print(p)
在绘制多边形之前是否有合并多边形的功能? 我想绘制一个多边形,它覆盖了至少一个多边形下的所有东西。因此,我需要在交叉点创建新点,凸包不会切割。
答案 0 :(得分:0)
如果你的意思是:
我想绘制一个覆盖 AT 下所有内容的多边形 最少其中一个多边形。
然后chull
(凸包)可能就是你所追求的。
作为一个例子(虽然不是ggplot):
# create data: (x,y)-coords
x<-c(1:9,9:1)
y<-runif(length(x))*10
# plot `em
plot(x,y,type="l")
# these are the indexes of points that are the convex hull
print(chull(x,y))
these.idx<-chull(x,y)
# plot the convex hull using the indexes
lines(x[these.idx],y[these.idx],type="l",col="red",lwd=2)
对于你的ggplot场景,如果你的代码被修改如下,它会绘制一个多边形(尽管很难知道这是否是你所追求的):
library(ggmap)
library(ggplot2)
map <- get_googlemap(center = c(lon = 9.26, lat = 47.3), zoom=10)
xy <- data.frame(id = c(rep(1,4), rep(2,4))
, lng = c(9,9.5,9.5,9,9.25,9.7,9.7,9.24)
, lat= c(47.1,47.1,47.4,47.4,47.2,47.2,47.5,47.5))
ch.idx<-chull(xy$lng,xy$lat)
xy<-xy[ch.idx,]
# removing:: ,group=xy$id
p <- ggmap(map)
p <- p + geom_polygon(data=xy, aes(x=xy$lng, y=xy$lat),fill='red',alpha= 0.2)
print(p)
(这更多是评论而不是答案,但我没有“代表”这样做抱歉)