如何在R中存储SpatialPolygons的颜色

时间:2013-12-25 10:20:37

标签: r colors shapefile polygons

以下代码是存储地图上使用的颜色LEGEND的小例程的一部分。

主要功能是不使用PLOT功能或LEGEND功能,但生成构成LEGEND的多边形并保存shapefile。

contour <- bbox(mapa)
polBorder <- polygonBox(contour, scale=0.0002)
boxBorder <- bbox(polBorder)

polLeg <- list()

xmin <- boxBorder["x", "min"] + 0.0005
ymin <- boxBorder["y", "min"] + 0.0005
sizex = abs(boxBorder["x", "max"]-boxBorder["x", "min"])/20
sizey = abs(boxBorder["y", "max"]-boxBorder["y", "min"])/20

for (i in 1:7)
{
  polygon <- polygonBoxPos2(xmin, ymin, +sizex, +sizey, paste0("p",i))

  polLeg <- append(polygon, polLeg)

  ymin <- ymin + sizey

}

SdP = SpatialPolygons(polLeg)

plot(polBorder, border="black" )
plot(SdP, add=TRUE )
plot(mapa, col=colPalette,  add=TRUE)

polygonBox <- function (bbox, scale=0.0)
{

  bbox["x", "min"] <- bbox["x", "min"] + scale*bbox["x","min"]
  bbox["x", "max"] <- bbox["x", "max"] - scale*bbox["x","max"]

  bbox["y", "min"] <- bbox["y", "min"] + scale*bbox["y","min"]
  bbox["y", "max"] <- bbox["y", "max"] - scale*bbox["y","max"]

  Sr1 = Polygon(cbind(c(bbox["x","min"],bbox["x","max"],bbox["x","max"],bbox["x","min"],bbox["x","min"]),
                      c(bbox["y","min"],bbox["y","min"],bbox["y","max"],bbox["y","max"],bbox["y","min"]))
                , hole=TRUE)
  Srs1 = Polygons(list(Sr1), "s1")
  SdP = SpatialPolygons(list(Srs1))
  return(SdP)
}

polygonBoxPos2 <- function (xmin, ymin, sizex, sizey,id)
{

  xmax <- xmin + sizex
  ymax <- ymin + sizey

  Sr1 = Polygon(cbind(c(xmin , xmax , xmax , xmin, xmin ),c(ymin, ymin, ymax, ymax, ymin)), hole=TRUE)
  Srs1 = Polygons(list(Sr1), id)

  return(Srs1)
}

您可以在左下角看到它们。

我搜索的所有例子都在PLOT操作过程中设置了多边形颜色,但我想用Polygon存储颜色,如何实现呢?

enter image description here

1 个答案:

答案 0 :(得分:1)

从空间多边形创建SpatialPolygonsDataFrame,并根据颜色构建数据框:

spdf = SpatialPolygonsDataFrame(Sr=SdP,
                                data=data.frame(
                                  id=1:length(colPalette),
                                  colour=colPalette,
                                  stringsAsFactors=FALSE),
                                match.ID=FALSE)

然后您可以通过执行以下操作将其绘制到地图中:

plot(spdf,col=spdf$colour, add=TRUE)

然后如果你将它writeOGR保存到Shapefile,你可能可以使用colour属性在你加载这些内容的任何包中对其进行着色。我说“可能”,因为它可能你的GIS不允许直接指定属性中的颜色,在这种情况下你可能需要在你的GIS中构建一个调色板,这就是为什么我也放了一个id属性在那里。但无论如何,这超出了你现在问题的范围。