Hi Johannes,

On Friday 14 Jun 2013 11:03:04 Johannes Radinger wrote:
> Hi,
> 
> as I am not very familiar with GRASS' vector capabilities maybe someone of
> you has some ideas. Is there the concept of directed vector networks e.g
> describing river networks with flow direction implemented in GRASS?

Each line in GRASS is just an array of points, therefore for each line you 
have a direction from the first point to the last. 
If the direction is not correct you can change with reverse.

A possible way to check the right direction using pygrass is (note, not 
tested, and pygrass is only available in grass7):

{{{
from grass.pygrass.vector import VectorTopo
from grass.pygrass.raster import RasterRow
from grass.pygrass.gis.region import Region


def check_line(line, elevation, region):
    first = elevation.get_value(line[0], region)
    last = elevation.get_value(line[-1], region)
    if first < last:
        line.reverse()
    return line


def check_direction(vectorname, elevname, outputname):
    """Check if the direction of a river network is correct"""
    river = VectorTopo(vectorname)
    river.open()
    newriver = VectorTopo(outputname)
    newriver.open('w', tab_cols=river.table.columns.items())
    elevation = RasterRow(elevname)
    elevation.open()
    region = Region()
    for line in river:
        newline = check_line(line, elevation, region)
        newriver.write(newline, attrs=line.attrs.values())
    newriver.table.conn.commit()
    river.close()
    newriver.close()
    elevation.close()

check_direction('river', 'elevation', 'river_checked')

}}}

Of course you can implement the same in C.

For the other questions I'm not sure which is the best way to follow.

All the best.

Pietro
_______________________________________________
grass-user mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/grass-user

Reply via email to