[GRASS-user] Profile from a random path

Dylan Beaudette dylan.beaudette at gmail.com
Wed Dec 20 18:14:33 EST 2006


On Wednesday 20 December 2006 05:55, Hamish wrote:
> Luca Casagrande wrote:
> > I have got a path described by a vector line; i'd like to create the
> > elevation profile for that line without using GUI.
>
> maybe something with v.drape?
>
> > 3) Use r.profile as described in the example 3 to create the profile
> > for the ascii file.
> >
> > I focused on the 3rd problem:
> >
> > In the r.profile man page, in the example 3 section, it says this:
> > [..]
> > Example 3
> > Extract a profile with coordinates provided from standard input or an
> > external file: First create a points file with d.where
> > d.where > saved.points
> > Then pipe the points file into r.profile
> > cat saved.points | r.profile input=elev.rast output=profile.pts
> > [..]
> >
> > The matter is that if i run the command line shown in the example, it
> > doesn't work, cause it need -i flag or to set the profile= one with
> > the coordinates of points.
> >
> > Any idea?
>
> The error message is wrong. That's been broken for ~6 years..
> thanks for pointing it out. fixed in CVS + 6.2 branch.
>
>
> Added this example to the help page:
>
> #spearfish
> r.profile elevation.dem res=1000 << EOF
>   591243,4926344
>   592509,4922156
>   594100,4920793
>   599910,4919365
>   602929,4919235
>   604844,4918391
>   606468,4917190
>   607766,4915664
> EOF
>
>
> this now works too:
>  d.where | r.profile elevation.dem
>
>
> Hamish
>

Luca:

did this solve your problem? I recall doing something like this a while back 
using v.drape.

If you like R here is the code I usually use for plotting distance along line 
(3d) vs elevation: (grass and R code):

# make new line
v.digit -n map=t bgcmd="d.rast elev_meters"
# convert to points
v.to.points in=t out=tp type=line dmax=50 -i -v -t 
# set resolution
g.region -pa res=4
# make 3d
v.drape in=tp out=tpz type=point rast=elev_4m method=cubic 
# export
v.out.ascii tpz > tpz.txt

# start R
R

# read in the data, note that there is no header, and the columns are pipe 
delimited
x <- read.table('tpz.txt', header=F, sep="|", 
col.names=c('easting','northing','elev','f'))

# use attach for simple access to columns
attach(x)

# compute the length minus 1 ; i.e. the number of points - 1
# use for the lagged distance calculation
s <- length(easting) - 1 

# calculate the lagged distance along each component of the 3D vector
dx <- easting[2:(s+1)] - easting[1:s]
dy <- northing[2:(s+1)] - northing[1:s]
dz <- elev[2:(s+1)] - elev[1:s]

# combine the vector components
# 3D distance formula
c <- sqrt( dx^2 + dy^2 + dz^2)

# create the cumulative distance along line:
dist <- cumsum(c[1:s])

# plot the results
plot(dist, elev[1:s], type='l', xlab='Distance from start (m)', 
ylab='Elevation (m)', main='Profile')

# cleanup
detach(x)


see attached figure for output

I can put this up on the R-wiki for later use. it might be fun to code this 
into something, so that there are fewer steps involved...

Cheers,

Dylan


-- 
Dylan Beaudette
Soils and Biogeochemistry Graduate Group
University of California at Davis
530.754.7341
-------------- next part --------------
A non-text attachment was scrubbed...
Name: profile.png
Type: image/png
Size: 4613 bytes
Desc: not available
Url : http://lists.osgeo.org/pipermail/grass-user/attachments/20061220/bb3bb7e2/profile.png


More information about the grass-user mailing list