[R-sig-Geo] Joining polygon and raster attributes
Empty Empty
phytophthorasb at yahoo.com
Mon Aug 5 21:18:47 CEST 2013
Hi.
I’m trying to develop a repeatable
process in R that I can use with a variety of data. Basically I'm trying to
join/merge/combine/intersect (I’m not sure technically which word is
right) a polygon and a raster so that I can do summaries on attributes from
both. I have A) a polygon shape file of terrestrial ecoregions (contains a
number of attributes that I am interested in) and B) a raster that is
categories (0-2), but later I might have a continuous raster. Specifically, I
want to ask things like what is the total area or proportion of area of biomes
(from polygon A) that are >0 (from raster B). [Note that zonal statistics
does Not seem to do what I want].
Below is some of the R code I have
tried and below that is the really cumbersome way I almost got it to work in
ArcGIS in case that clarifies what I’m trying to do – but I’m keen to do it in a
scripted way since I will be changing the data later.
I’m grateful for any suggestions.
Thanks!
Juliann
In R the closest I got is this, but I'm not sure I'm even on the right track. Perhaps I should be going about it in a completely different way.
#(I probably don't need all these libraries. I was trying a lot of different things.)
library(sp)
library(raster)
library(rgdal)
library(maptools)
library(rgeos)
dryras <- raster("~overlay1.tif") #cells have values 0-2.
teow <-readOGR(dsn=".", layer="teow_africa")
#Terrestrial Ecoregions of the World
pdf("quickplots.pdf")
plot(dryras)
plot(teow)
dev.off()
#Yup
looks about the same as in arcgis
# overlay points on raster and create new shapefile with extracted values in
attribute table
samp = extract(dryras, teow)
#sampsm<-extract(dryras, teow, small=TRUE) #maybe this would be better, but let’s see if it works first.
#So far so good, it looks as though
each polygon has different numbers of 0,1,2 associated with it (not sure how I'm going to get area from this,
which is what I really want), but then it falls apart. I don't have column
names on samp, for one thing (>names(samp) yields NULL)
# combine with polygon data
#One tangential
problem is that I'm trying to use merge from the base library and raster also
has merge, so I first removed raster before this step. I'm sure there's a simple and obvious solution!#
test1 <- cbind(as.data.frame(teow),
samp)
test2<-merge(teow, samp)
test3<-merge(teow, samp, by.x=[,1], by.y="OBJECTID", all.x=TRUE,
all.y=TRUE, sort=FALSE)
for test1& test2 the error is
"Error in data.frame(c(0, 0, 0, 0, 0, 0), c(0, 0, 0, 0, 0, 0, 0, 0,
0, : arguments imply differing number of rows: . . ."
for test 3 the error is "Error:
unexpected '[' in "test2<-merge(teow, samp, by.x=[""
Other things I've played with (over,
gIntersection, rasterize)
What I did in ArcGIS and JMP
I came up with a really cumbersome and
ugly brute force method (that I know for certain does not come out quite
right): In ARCGIS, I converted the raster to a polygon, then used a union to
combine this with the ecoregions polygon so that there were new polygons
for each polygon-rastervalue combination that have all the attributes together.
Then I added an area field to this new polygon table. This process didn't work
very well as it left a few hundred weird (v. small) polygons that don't make
sense and are missing attributes. Also, I don't think I used the right area
calculator. Nevertheless, I took the table into JMP (just for the fun of
looking at data) and was able to very easily do the sorts of summaries I was
interested in. But I’d really like to script this and I know I can do those
summaries in R if I get the first part working.
More information about the R-sig-Geo
mailing list