[R-sig-Geo] convert a PBSmapping grid to shapefile

Armelle ROUYER Armelle.Rouyer at ifremer.fr
Fri Feb 18 11:16:08 CET 2011


Thanks for your answer Roger but it still doesn't work...
The problem is with mo, has you said it needs more study and I don't how 
to solve the problem.

Here is the problem :

library(PBSmapping)

PS0=makeGrid(x=seq(-5,-1,.2),y=seq(43,49,.2),projection="LL")
PD=read.table("pdata.txt",header=T) # text file attach

brks=c(fivenum(PD$Z))
cols=c("white","yellow","orange","red","darkred")
PD0=makeProps(PD,breaks=brks,"col",cols)

plotPolys(PS0, polyProps=as.PolyData(PD0), projection="LL",bg="lightblue")
sp1 <- PolySet2SpatialPolygons(PS0)
mo <- match(as.character(PD0$PID), row.names(sp1))
sp2 <- SpatialPolygonsDataFrame(sp1, data=data.frame(col=PD0$col[mo],
   stringsAsFactors=FALSE))
plot(sp2, col=sp2$col, axes=TRUE)


Many thanks in advance if you find a solution.
And if it is not possible I will do the same using only the sp package...

Regards.
Armelle Rouyer



Roger Bivand a écrit :
> On Thu, 17 Feb 2011, Armelle ROUYER wrote:
> 
>> Dear all,
>>
>> I used the PBSmapping package to make a grid with the abundance of 
>> fishes. Each cell has an allocated value. I want to convert this grid 
>> into a shapefile in order to export it on ArcGIS.
>>
>> So I tried the function "PolySet2SpatialPolygons". The grid is 
>> correctly transformed into polygons but the allocated value is 
>> ignored. Then I tried the function "SpatialPolygonsDataFrame" but it 
>> didn't work properly (only 13 values are associated with the 50 cells).
>>
>> I am not sure that I am using the right functions. So if you have any 
>> idea or suggestion thank you for your help.
> 
> library(PBSmapping)
> library(maptools)
> gt <- GridTopology(c(0.5, 0.5), c(1, 1), c(5, 10))
> sp <- as(gt, "SpatialPolygons")
> proj4string(sp) <- CRS("+proj=longlat")
> PS0 <- SpatialPolygons2PolySet(sp)
> PD0 <- as.PolyData(data.frame(PID=1:50, col=rep(rainbow(10), each=5),
>   stringsAsFactors=FALSE))
> plotPolys(PS0, polyProps=PD0, projection="LL")
> # the above to set up a PolySet opject, PolyData object, and plot them
> sp1 <- PolySet2SpatialPolygons(PS0)
> mo <- match(as.character(PD0$PID), row.names(sp1))
> # check mo - this is an easy match, in practice it may need more study
> sp2 <- SpatialPolygonsDataFrame(sp1, data=data.frame(col=PD0$col[mo],
>   stringsAsFactors=FALSE))
> plot(sp2, col=sp2$col, axes=TRUE)
> 
> seems to work. You match on the PolyData PID column and the row.names() 
> of the SpatialPolygons object, which are the unique PolySet PID values. 
> In this case, and probably in general, the PIDs in the PolyData and 
> PolySet match by design. If there isn't an exact match, you'll need to 
> construct an object of the correct length manually.
> 
> Roger
> 
>>
>> Regards.
>>
>>
>>
> 

-- 
Armelle Rouyer

IFREMER - Station de Lorient
Laboratoire Biologie Halieutique
8 rue Francois Toullec
56100 LORIENT
FRANCE
02 97 87 38 23
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: pdata.txt
URL: <https://stat.ethz.ch/pipermail/r-sig-geo/attachments/20110218/2ef60d6c/attachment.txt>


More information about the R-sig-Geo mailing list