[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