如何在R中制作可搜索的多边形地图?

时间:2016-03-21 23:02:28

标签: r dictionary polygon spatial

我想在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个左右的多边形来搜索。

1 个答案:

答案 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)