我想在R中制作多边形的地图。我知道不同多边形的所有顶点,并知道如何使用以下方法创建多边形:
library(sp)
Polygonoutline1 <- rbind(c(x1,y1),c(x2,y2),c(x3,y3))
Polygonshape1 <- Polygon(Polygonoutline1)
Polygonoutline2 <- rbind(c(x1,y1),c(x2,y2),c(x3,y3))
Polygonshape2 <- Polygon(Polygonoutline2)
Polys1 <- Polygons(list(Polygonshape1),"Shape 1")
Polys2 <- Polygons(list(Polygonshape2),"Shape 2")
map <- SpatialPolygons(list(Polys1,Polys2))
plot(map)
现在我希望能够保存(导出)这个图并将其读入另一个可以搜索的R代码算法,即我想指定一个点(xy坐标)并想知道哪个多边形在那个点(即“形状1”或“形状2”。我该怎么做?实际上我的地图将有6个左右的多边形来搜索。
答案 0 :(得分:0)
首先定义你的多边形,例如:
Kaplanturbineoutline <- rbind(c(0,0),c(60,0),c(950,15),c(170,80),c(10,80),c(0,20))
Kaplanturbinepolygon <- Polygon(Kaplanturbineoutline)
Francisturbineoutline <- rbind(c(4.5,12),c(125,12),c(910,15),c(910,80),c(100,700),c(6,700),c(0,55))
Francisturbinepolygon <- Polygon(Francisturbineoutline)
Crossflowturbineoutline <- rbind(c(0.3,3.5),c(10,3.5),c(10,10),c(0.3,100))
Crossflowturbinepolygon <- Polygon(Crossflowturbineoutline)
然后定义多边形(注意添加的's'):
Kaplanpolys <- Polygons(list(Kaplanturbinepolygon),"Kaplan")
Francispolys <- Polygons(list(Francisturbinepolygon),"Francis")
Crossflowpolys <- Polygons(list(Crossflowturbinepolygon),"Crossflow")
然后定义空间多边形地图:
Turbinemap <- SpatialPolygons(list(Kaplanpolys,Francispolys,Crossflowpolys))
并定义数据框:
df <- data.frame(c("Kaplan","Francis","Crossflow"),row.names=c("Kaplan","Francis","Crossflow"))
然后创建一个空间多边形数据框:
Turbinemapdf <- SpatialPolygonsDataFrame(Turbinemap,df)
然后可以绘制此地图:
spplot(Turbinemapdf,xlim=c(0,1000),ylim=c(0,1000),scales=list(draw=T),col=c("blue","orange","magenta","green","red"),fill=FALSE,colorkey=FALSE)
然后可以使用以下方法搜索地图:
Turbineselection <<- over(Turbinemap,Turbinepoint)