[R-sig-Geo] overlay polygons (from shp) and raster (from geotif)
Roger Bivand
Roger.Bivand at nhh.no
Tue Oct 23 20:17:13 CEST 2007
On Tue, 23 Oct 2007, Agustin Lobo wrote:
> Thanks,
>
> but note that:
>
>> "Large cells and small
>> polygons is not really the usual case."
>
> ...except when you carry out ground work for satellite imagery!
>
> According to the doc, starspan counts pixels intersected by the vector
> provided the intersection is larger than a user-define threshold, thus would
> not solve the problem either (but have not actually tried it yet).
>
> In R, may be I could
> 1. Vectorize the raster cells (only those that are not NA in delme), thus
> creating av.
There are facilities in sp for this - to make SpatialPolygons from
SpatialPixels.
> 2. Intersect the 2 polygons, thus creating a new set of polygons (pols2)
This would possibly involve using gpclib directly - there is code in
maptools for going between SpatialPolygons and the gpclib representation,
but it is still inside functions.
> 3. Use overlay with the new polygon pols2 and the vectorized version (av) of
> the raster a.
There is no polygon/polygon overlay method in sp - you'd need to keep
track of which polygon is which in step 2.
I think I still prefer resampling a in a GIS to a higher resolution and
using what exists.
Roger
>
> What do you think?
>
> Agus
>
>
> Roger Bivand escribió:
>> On Tue, 23 Oct 2007, Agustin Lobo wrote:
>>
>> > Hi there!
>> >
>> > I'm trying to do the overlay of polygons on raster.
>> >
>> > I do:
>> >
>> > pols <- readOGR("../AllTransectPolygons02",
>> > layer="AllTransectPolygons02")
>> > a <- readGDAL("t1s2comb/t1s2combfim95.tif") #geotif file
>> >
>> > str(a) shows the correct proj info:
>> > ..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots
>> > .. .. ..@ projargs: chr " +proj=utm +zone=18 +south +ellps=WGS72
>> > +units=m +no_defs"
>> >
>> > My goal is to get, for each polygon in pols,
>> > the surface covered by each value of a.
>> >
>> > Then:
>> >
>> > delme <- overlay(pols, a)
>> > delme
>> > AREA PERIMETER Site
>> > NA NA NA <NA>
>> > NA.1 NA NA <NA>
>> >
>> > which is not too useful and
>> >
>> > delme2 <- overlay(a, pols)
>> >
>> > takes for ever and what I finally get is:
>> >
>> > > str(delme2)
>> > num [1:207024] NA NA NA NA NA NA NA NA NA NA ...
>> > > delme2[!is.na(delme2)]
>> > [1] 86 86 86 86 87 87 87 87 88 88 88 88 89 89 89 89
>> > 90 90
>> > [19] 90 90 90 91 91 92 92 93 93 93 93 94 94 94 95 95 95
>> > 96
>> > [37] 96 96 96 98 101 101 101 101 102 102 102 102 104 104 104 104 104
>> > 104
>> > [55] 104 104 105 105 105 105 105 105 106 106 106 106
>> >
>> > that is, just the ids of the polygons on the cells of a.
>>
>> This is what you would need, using this column to make a
>> SpatialPixelsDataFrame out of the input data, then doing a tapply or
>> similar to tabulate the categories.
>>
>> But with 200K cells, large cells, and small polygons, the point-in-polygon
>> approach is converting the cells to their cell centre points, and missing
>> most of the cell-polygon overlaps, that is those where the cell centre
>> falls outside the polygon. Large cells and small polygons is not really
>> the usual case. In addition, it might be helpful to subset pols first to
>> avoid looping over polygons that cannot belong to a.
>>
>> I'm not sure how starspan does polygon/cell overlay - if it measures the
>> overlap area, you might find that more helpful. If not, reduce pols to the
>> a area, and resample a to a finer resolution so that multiple cells fit
>> inside each polygon (change g.region in GRASS, for example). It will take
>> time to do, because it does a C point-in-polygon operation for each
>> polygon (in nested lapply() calls).
>>
>> Hope this helps,
>>
>> Roger
>>
>> >
>> > Note that the extent of pols is much larger than
>> > the one of a (i.e., may polygons are outside the raster and I'm not
>> > interested on those). Also, cells are much larger then the width of
>> > the polygons (I can send a jpg with an example).
>> >
>> > So it's clear I'm doing something wrong... any advice?
>> >
>> > Thanks
>> >
>> >
>> >
>>
>
>
--
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no
More information about the R-sig-Geo
mailing list