2013-12-25 3 views
1

Код ниже является частью небольшой процедуры для хранения LEGEND цветов, используемых на карте.Как сохранить цвета SpatialPolygons в R

Основная функция заключается в том, чтобы не использовать функцию PLOT или функцию LEGEND, а генерировать полигоны, которые формируют LEGEND, и сохранять их шейп-файл.

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

+0

Это неясно или воспроизводимо. Некоторые из ваших функций не определены и не находятся в очевидных местах (maptools и sp). Возможно, вам просто нужно создать объект списка с полигонами и сохраненными цветами. Откуда вы все равно получаете цвета? – Spacedman

+0

Извините, я добавил две функции, которые я забыл. @Spacedman – jcarlos

+0

Цвета исходят из палитры, которую я использую для построения карты, в этом примере я использовал brewer.pal (7, «Reds») от RColorBrewer – jcarlos

ответ

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, чтобы затенять его в любом пакете, в который вы загружаете эти вещи. Я говорю «могу», потому что его возможная ваша ГИС не позволяет напрямую указывать цвета из атрибутов, и в этом случае вам, вероятно, придется создавать палитру в вашей ГИС, поэтому я также добавил туда атрибут id. Но в любом случае, это выходит за рамки вашего вопроса.