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 <adammichaelwils...@gmail.com <mailto:adammichaelwils...@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.wil...@uconn.edu


------------------------------------------------------------------------

_______________________________________________
grass-user mailing list
grass-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user


_______________________________________________
grass-user mailing list
grass-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user

Reply via email to