[GRASS-user] Re: Overlapping polygons and v.distance

Moritz Lennert mlennert at club.worldonline.be
Mon Dec 15 10:42:02 EST 2008


On 11/12/08 14:56, Adam Wilson wrote:
> I figured out a solution to my problem using R, which is posted below 
> for any future user's benefit (though this is specific to my dataset, 
> some changes will be needed).  I would still like to know if it is 
> possible in GRASS, though.  


At this stage, I don't think it is, but it shouldn't be too hard to add
'to_id' as one of the upload options to v.distance. Please file a
feature request to the bug tracker, so we keep that in mind.

Moritz



Thanks,
> 
> Adam
> 
> ###################  This code intersects a set of points with any 
> number of polygons (which may be overlapping)
> 
> library(sp);library(rgdal)
> fires=readOGR("/media/Data/Work/Regional/CFR/FireAnalysis/FireData/fires_15072008","all_fires_07_08")  
> #read in shapefile
> d=as.data.frame(cbind(slot(fires,"data")[1,],point=1))  #use first row 
> as template, add "point" as placeholder to be filled later
> nfires=nrow(slot(fires,"data")) #get the number of polygons
> for(i in 1:nfires) {  #loop through each polygon one at a time
>   d2=overlay(fires[i,],points)  #do overlay of all points for each fire 
> polygon (this may result in lots of NAs)
>   d2$point=as.factor((1:nrow(d2))+100)  #add point ID - my point IDs 
> start at 101 and go up, you will have to adjust this
>   d=rbind(d,d2)  #bind this polygon's overlay to the previous one
>   print(paste(i," out of ",nfires))  #print progress
> }
> 
> d=d[-1,] #remove first line - used to start dataframe
> d=d[!is.na <http://is.na>(d$FIREREFERE),] #get rid of all the NAs using 
> a field that is always populated
> d2=merge(d,slot(points,"data"),by.x="point",by.y="Locality_n",all.x=T)  
> #merge with point data to get point attributes for each point
> 
> #########################################
> 
> 
> On Wed, Dec 10, 2008 at 9:13 AM, Adam Wilson 
> <adammichaelwilson2 at gmail.com <mailto:adammichaelwilson2 at gmail.com>> wrote:
> 
>     Greetings all,
> 
>     Summary:  I would like to request that the v.distance function be
>     updated (with a flag?) to allow reporting of multiple categories in
>     one layer.
> 
>     Example of why this can be important:
> 
>     I am working with historical forest fire data and want to extract
>     histories for different points.   I start with a shapefile that
>     contains many (1000s) of polygons, many of which overlap in x-y
>     space but vary over time (time information is in the attribute
>     table). I could separate this into separate shapefiles (one for each
>     year) prior to importing to GRASS, but this would result in almost
>     100 different layers and I would rather avoid it.  When I import it
>     into grass using v.in.ogr, it is topologically cleaned and the
>     result is a layer of (intersected) polygons, many of which have
>     multiple categories that link to the attribute table.  For example,
>     a single polygon could have burned in multiple years, so it is
>     linked to multiple rows in the attribute table.  These multiple
>     categories are visible with "v.category -g input=fire option=print"
>     which results in something like this:
>     2452
>     2452/2540
>     2452/2526/2540/2543
>     2540/2575
>     2406/2420/2517/2563/2581/2584
>     2406/2420/2517/2563/2581
>     2416/2452/2536
>     Where each row is a unique polygon and the different elements are
>     the various categories (rows in the attribute table) that are linked
>     to it.  So far so good.  But what I want to do is extract the fire
>     history for a number of points, but v.distance only reports the last
>     category for each polygon (which in my case is usually only the most
>     recent fire) and reports "*WARNING: more cats of to_layer*."  So
>     there seems to be a hidden ID value for each polygon (which would
>     correspond to the invisible row number in the output above) but I
>     cannot seem to access it directly.  If I could, then it would be
>     possible to v.distance to that ID, then use the output above to link
>     a given point to several fire records.  
> 
>     If v.distance was updated to include multiple categories in the same
>     layer, I would be able to do this easily. This has been proposed
>     before:
>     http://www.mail-archive.com/grass-user@lists.osgeo.org/msg02056.html. 
>     I would like to encourage this revision (though maybe with a -m flag
>     so you could turn this feature on if wanted).  It would ideally (for
>     me) return a table with multiple records for each point, each with
>     an attribute from the polygon layer.  For example, something like this:
> 
> 
>     point | fireyear
>     1           1950
>     1           1975
>     1           2002
>     2           1960
>     2           1972
>     3           1954
> 
>     In the short term, does anyone have any ideas on how I can get 
>     extract this data?
> 
> 
>     Thanks for any ideas,
> 
>     Adam Wilson
> 
> 
> 
> 
> -- 
>                 Adam Wilson
>   __o       http://hydrodictyon.eeb.uconn.edu/people/wilson/
> _`\<,_     Department of Ecology and Evolutionary Biology
> (*)/ (*)    BioPharm 223
>               University of Connecticut
>               Tel: 860.486.4157
>               Adam.Wilson at UConn.edu
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> grass-user mailing list
> grass-user at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/grass-user




More information about the grass-user mailing list