Thanks to all who replied to this vexing problem. My postdoc Isaac Ullah found 
what seems to be a good solution to part of this. 

v.net.path appears to extract a single object, single cat vector line from a 
stream network if we can give it a starting and ending point.

Michael

____________________
C. Michael Barton
Director, Center for Social Dynamics & Complexity 
Professor of Anthropology, School of Human Evolution & Social Change
Head, Graduate Faculty in Complex Adaptive Systems Science
Arizona State University

voice:  480-965-6262 (SHESC), 480-965-8130/727-9746 (CSDC)
fax: 480-965-7671 (SHESC),  480-727-0709 (CSDC)
www: http://www.public.asu.edu/~cmbarton, http://csdc.asu.edu




On Dec 1, 2014, at 11:21 AM, Michael Barton <michael.bar...@asu.edu> wrote:

> v.build.polylines is indeed part of what is needed. But it is not enough to 
> be able to use v.to.points in the data I have—and this is not a weirdly 
> meandering stream, just a Mediterranean barranco. 
> 
> A major part of the problem is in the raster to vector conversion. I’ve been 
> using r.to.vect. But it breaks the resulting line into multiple segments and 
> assigns different cat numbers to the segments. If the segments all connect 
> cleanly, v.build.polylines may combine the segments. But I’ve tried using 
> cat=first and it continues to assign multiple cats to the segments. To get a 
> single line, what I have to do currently is:
> 
> v.clean
> v.build.polylines with cats=no 
> v.category with option=del ## may not be necessary but I’ve had enough 
> inconsistent results to want to make sure on this
> v.category with option=add cat=1 step=0 ## this gets me a vector with cat=1 
> for all parts.
> 
> repeat the above a 2nd time
> 
> This gives a sufficiently clean single-object line with a single cat number 
> that I can run v.to.points on.
> 
> Maybe r.stream.order does a cleaner job in raster to vector conversion. It’s 
> worth a try. Unfortunately, I can’t use the stream order info to extract a 
> stream since I want the stream from its headwaters (stream order = 1) to its 
> outlet (stream order > 1).
> 
> Ideally, there would be a module where I could enter the coordinates of the 
> upstream end of a stream, it would extract the entire watercourse as a single 
> object to its downstream end, edge of map, or a defined outlet stop point. 
> Then I could run v.to.points and v.what.rast to get profile data. OR in a a 
> stream profile module, it would run these for me. I could do it in Python if 
> I could extract a clean vector (one object, one cat, no loops or 
> self-crossing) of a single stream from a stream network created with 
> r.watershed or r.stream.extract. AFAICT, there is nothing available in GRASS 
> that can do this. Kind of surprising.
> 
> Michael
> 
> 
> ____________________
> C. Michael Barton
> Director, Center for Social Dynamics & Complexity 
> Professor of Anthropology, School of Human Evolution & Social Change
> Head, Graduate Faculty in Complex Adaptive Systems Science
> Arizona State University
> 
> voice:  480-965-6262 (SHESC), 480-965-8130/727-9746 (CSDC)
> fax: 480-965-7671 (SHESC),  480-727-0709 (CSDC)
> www: http://www.public.asu.edu/~cmbarton, http://csdc.asu.edu
> 
> 
> 
> On Dec 1, 2014, at 9:31 AM, Moritz Lennert <mlenn...@club.worldonline.be> 
> wrote:
> 
>> On 30/11/14 06:28, Michael Barton wrote:
>>> 
>>> ____________________
>>> C. Michael Barton
>>> Director, Center for Social Dynamics & Complexity
>>> Professor of Anthropology, School of Human Evolution & Social Change
>>> Head, Graduate Faculty in Complex Adaptive Systems Science
>>> Arizona State University
>>> 
>>> voice: 480-965-6262 (SHESC), 480-965-8130/727-9746 (CSDC)
>>> fax: 480-965-7671 (SHESC),  480-727-0709 (CSDC)
>>> www: http://www.public.asu.edu/~cmbarton, http://csdc.asu.edu
>>> 
>>> 
>>> 
>>> 
>>> Thanks César,
>>> 
>>> This is pretty much what I’m doing. However, it is not that simple, it
>>> turns out.
>>> 
>>> First, for a stream profile, you want to isolate a single watercourse.
>>> r.stream.extract creates a stream network. Getting stream order does not
>>> help with profiling, however.
>>> 
>>> I looked at r.stream.distance. But this calculates distance from each
>>> stream junction. I want it for the entire course of the selected
>>> stream—from headwaters to outlet. That is the only way to graph a stream
>>> profile for the entire stream.
>>> 
>>> Once I have a set of points with the distance from the beginning or the
>>> end of the line stored as an attribute for each point, the rest is easy.
>>> It is getting to this step that is hard.
>>> 
>>> If a line is composed of multiple segments—as is the case for any line
>>> created with r.stream.extract or r.watershed, and also with r.drain
>>> surprisingly—there is nothing that will ignore all of these segments and
>>> just give me the distance along the line from one end to the other. This
>>> is the case with v.to.points
>> 
>> As MarkusN said: you have to use v.build.polylines with cats=first, but then 
>> it is easy to get total length with v.to.db or v.to.points if that is what 
>> you need (or many other options (get end node coordinates and use v.distance 
>> 'to_along' or MarkusM's suggestion: v.net.distance from start to end node 
>> along the stream).
>> 
>> Here's an example in the NC dataset, using r.stream.order to approximate the 
>> main stream:
>> 
>> g.region n=227440 s=221640 w=630220 e=637220 res=10
>> r.watershed --overwrite elevation=elevation@PERMANENT threshold=10000 
>> accumulation=accum drainage=direction stream=streams
>> r.stream.order --overwrite stream_rast=streams@user1 
>> direction=direction@user1 elevation=elevation@PERMANENT 
>> accumulation=accum@user1 stream_vect=streams horton=horton
>> v.extract --overwrite input=streams@user1 where=horton=3 output=main_stream
>> v.build.polylines --overwrite input=main_stream@user1 
>> output=main_stream_poly cats=first
>> 
>> then: v.to.db  (result=11312.5) or
>> 
>> v.to.points input=main_stream@user1 output=main_stream_points dmax=1
>> 
>> db.select sql="select round(max(along)) from main_stream_points_2"
>> round(max(along))
>> 11312.5
>> 
>> 
>> Moritz
> 

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

Reply via email to