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

Adam Wilson adammichaelwilson2 at gmail.com
Thu Dec 11 08:56:20 EST 2008


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.  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(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>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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/grass-user/attachments/20081211/b79d9468/attachment.html


More information about the grass-user mailing list