Search code examples
rggplot2geospatialrasterr-raster

Spatial data overlay selection in R


I'm trying to overlay some spatial data from a bigger SpatialPolygonsDataFrame (world size) to a smaller (country size), by doing these:

x <- c("rgdal", "dplyr",'ggplot2')
apply(x, library, character.only = TRUE) 

est<-readOGR(dsn='/estados_2010',layer='estados_2010')
est_f<-fortify(est)
est$id<-row.names(est)
est_f<-left_join(est_f,est@data)

zon<-readOGR(dsn='/Zonas Homogeneas/gyga_ed_poly.shp',layer='gyga_ed_poly')
zon_f<-fortify(zon)
zon$id<-row.names(zon)
zon_f<-left_join(zon_f,zon@data)     

t<-ggplot()+geom_polygon(data=zon_f,aes(x=long,y=lat,group=group,fill=GRID_CODE))

t+geom_polygon(data=est_f,aes(x=long,y=lat,group=group),fill=NA,color='red')+coord_fixed(xlim=est_f$long,ylim=est_f$lat,1)

Which is resulting in this:

I'm want to select only what is being plotted inside the polygon with the red lines. If someone could help me with this issue, I'll appreciate

PS.: For those who want to reproduce the example completely by yourselves, the files are available in the links above to my google drive:

https://drive.google.com/open?id=0B6XKeXRlyyTDakx2cmJORlZqNUE

Thanks in advance.


Solution

  • Since you are using polygons to display the raster values, you can use a spatial selection via [ like in this reproducible example:

    library(raster)
    library(rgdal)
    
    bra <- getData("GADM", country = "BRA", level = 1)
    
    r <- getData("worldclim", res = 10, var = "bio")
    r <- r[[1]]
    r <- crop(r, bra)
    
    r <- rasterToPolygons(r)
    # bra and raster (now as polygons) have to have the same projection, thusly reproject!
    bra <- spTransform(bra, CRSobj = proj4string(r))
    

    here comes the magic!!

    r <- r[bra, ]
    

    let's look at the results:

    library(ggplot2)
    t <- ggplot()+
      geom_polygon(data=r,aes(x=long,y=lat,group=group, fill = rep(r$bio1, each = 5)))
    t + 
      geom_polygon(data=bra,aes(x=long,y=lat,group=group),fill=NA,color='red') + coord_map()