[GRASS-user] Averaging multiple vector lines

Michael Barton michael.barton at asu.edu
Thu Jun 4 12:36:59 EDT 2009

Try a cumulative path approach perhaps.

Transform each path to a raster path on a separate map.

Buffer each path a bit. You could also do declining value buffers  
(e.g., value=5 near the path, declining to 1 at some distance).

Change all background null values to 0

Add all the paths together.

The result will be a composite, cumulative path such that areas of  
considerable overlap have high values and areas of little or no  
overlap have low values.

C. Michael Barton, Professor of Anthropology
Director of Graduate Studies, School of Human Evolution & Social Change
Director, Center for Social Dynamics & Complexity
Arizona State University

Phone: 480-965-6262
Fax: 480-965-7671
www: <www.public.asu.edu/~cmbarton>

On Jun 4, 2009, at 9:00 AM, grass-user-request at lists.osgeo.org wrote:

> Message: 6
> Date: Wed, 3 Jun 2009 21:23:29 -0400
> From: Dwight Needels <needels at translucida.com>
> Subject: [GRASS-user] Averaging multiple vector lines
> To: ?GRASS? <grass-user at lists.osgeo.org>
> Message-ID: <AEF3F9BB-5929-4704-AECB-68D72A827229 at translucida.com>
> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes
> I have a GRASS vector that originated as multiple GPS tracks from
> walking a particular trail segment on several different days. Is there
> a good way to average these lines to get a single line? I want to
> minimize GPS accuracy errors by averaging across multiple days and
> also minimize precision errors (random jumping around on a single day)
> while still maintaining the shape of the trail with all of its twists
> and turns.
> I have been able to generate a composite vector by using a combination
> of v.to.rast, r.grow, r.thin, r.to.vect, v.clean, and v.generalize
> method=douglas. This method works pretty well when the lines remain
> close together, but it is very dependent on picking a value for the
> r.grow radius that fills in all of the gaps between the multiple
> tracks. If one track is quite different than the others in even a
> single region of the vector, this requires a relatively large radius
> value. Moreover, the final vector is located about midway between the
> two extremes rather than being weighted toward where the majority of
> tracks fall.
> It seems like there would be a way to calculate some sort of sliding
> average of the coordinates that fall within a certain size window,
> perhaps after using v.to.points with a small dmax (5 ft?) to generate
> a fairly dense set of points. Ideally, the calculation window could be
> wider perpendicular to the direction of the line than it is along the
> direction of the line. From day to day tracks are often within 10 to
> 20 ft of each other, but it is not uncommon for two tracks to be 30 ft
> away from each other at some points.
> Any ideas?
> -Thanks, -Dwight

More information about the grass-user mailing list