[GRASS-user] r.stream.order export to shapefile

Micha Silver micha at arava.co.il
Mon Sep 3 00:53:48 PDT 2012


Hi Markus:
Again, many thanks for the detailed explanation.

I am using your suggestion:  v.db.connect -o to overwrite and connect 
the r.streams.order table to the streams vector thru layer 1, 
overwriting the original connection. Works fine.
I guess if I had used layer=3 from the start it would also work correctly?


BTW: I missed the section you quoted from the man page, because I got no 
man page when compiling the extensions. The error was:

sudo make MODULE_TOPDIR=/usr/local/grass-6.4.2/
....
<compile goes OK>
....
GRASS_PERL=/usr/bin/perl VERSION_NUMBER=6.4.2 sh 
/usr/local/grass-6.4.2//tools/g.html2man 
/usr/local/grass-6.4.2/docs/html/r.stream.extract.html 
/usr/local/grass-6.4.2/man/man1/r.stream.extract.1 1
/usr/local/grass-6.4.2//tools/g.html2man: 
/usr/local/grass-6.4.2//tools/g.html2man: is a directory
make[2]: *** [/usr/local/grass-6.4.2/man/man1/r.stream.extract.1] Error 126
make[2]: Leaving directory 
`/home/micha/Downloads/grass-addons/r.stream.extract'
make[1]: *** [mancmd] Error 2
make[1]: Leaving directory 
`/home/micha/Downloads/grass-addons/r.stream.extract'
make: *** [cmd] Error 2

The g.html2man perl script is *under a directory* also called 
g.html2man. Is that correct? Do I need to change something in the addon 
Makefile?

Cheers,
Micha

On 09/02/2012 03:33 PM, Markus Metz wrote:
> On Wed, Aug 29, 2012 at 1:28 PM, Micha Silver<micha at arava.co.il>  wrote:
>> Hi Markus,
>> Thanks for responding. I still can't seem to get this to work.
>> Here are my steps:
>>
>>> r.stream.extract elev=dtm thresh=500000 stream_rast=stream_500
>>> stream_vect=stream_500 dir=fdir_500
>>> r.stream.order stream=stream_500 dir=fdir_500 table=stream_order
>>> v.db.connect map=stream_500 driv=sqlite table=stream_order key=cat layer=2
>> Here I get:
>> The table<stream_order>  is now part of vector map<stream_500>  and may be
>> deleted or overwritten by GRASS modules
>> DBMI-SQLite driver error:
>> Cannot create index:
>> create unique index stream_order_cat on stream_order ( cat )
>> index stream_order_cat already exists
>>
>> WARNING: Cannot create index
>> Select privileges were granted on the table
>>
>> Next:
>>> v.category stream_500 opt=report layer=2
>> Layer/table: 1/stream_500
>> type       count        min        max
>> point        248          1        237
>> line         237          1        237
>> boundary       0          0          0
>> centroid       0          0          0
>> area           0          0          0
>> all          485          1        237
>> Layer/table: 2/stream_order
>> type       count        min        max
>> point        248          0          2
>> line         237          0          1
>> boundary       0          0          0
>> centroid       0          0          0
>> area           0          0          0
>> all          485          0          2
>>
>> Why in layer 2 are there only 2 cat values?
> Because
> "In layer 1, categories are unique IDs,
> identical to the cell value of the raster output. The attribute table
> for layer 1 holds information about the type of stream segment: start
> segment, or intermediate segment with tributaries. Columns are cat int,
> stream_type varchar(), type_code int. The encoding for type_code is 0 =
> start, 1 = intermediate. In layer 2, categories are identical to
> type_code in layer 1 with additional category 2 = outlet for outlet
> points. Points with category 1 = intermediate in layer 2 are at the
> location of confluences."
>
>
>> Shouldn't I get all the cats as
>> in layer 1 when I use "key=cat" in the v.db.connect??
> No, v.db.connect connects a table to a vector layer. It does not
> modify the vector layer.
>
>> Do I need to delete
>> and recreate the cats in layer 2 ?
> No. Simply connect the table to layer 1, this should give you the
> desired result.
>> And finally, the export:
>> GRASS 6.4.2 (ITM):~/GIS/DEM/LIDAR_EinYahav>  v.out.ogr -c -e stream_500
>> type=line dsn=stream_500.shp layer=2
>> WARNING: 248 point(s) found, but not requested to be exported. Verify
>>           'type' parameter.
>> Exporting 485 geometries...
>> WARNING: 124 features without attributes were written
>> v.out.ogr complete. 237 features written to<stream_500>  (ESRI_Shapefile).
>>
>> Why am I getting 485 geometries?
> This is probably a bogus message. There are a total of 485 geometries
> in the vector, 248 points and 237 lines. As the last message of
> v.out.ogr says, 237 features were written.
>
>> and why are 124 with no attributes?
> Because you exported layer 2, where cat=0 is a valid cat, but the
> table you attached to layer 2 does not have an entry for cat=0.
>
> Markus M
>
>>
>>
>> On 08/28/2012 11:15 PM, Markus Metz wrote:
>>> On Tue, Aug 28, 2012 at 9:05 PM, Micha Silver<micha at arava.co.il>   wrote:
>>>> A few more details regarding v.out.ogr when layer=2
>>>> I see this ticket, possibly similar:
>>>> http://trac.osgeo.org/grass/ticket/991
>>>>
>>>> I tried to export to PostGIS, and again, all attribute fields are created
>>>> but all values are NULL. I also tried with the layer 2 database as a dbf
>>>> file, instead of sqlite. Same result.
>>>>
>>>> This was all with GRASS 6.4.2 on scientific linux 6
>>> What does v.category op=report say? Are there any categories in layer
>>> 2? If not, there is nothing to export.
>>>
>>> Markus M
>>>
>>>> Thanks,
>>>> Micha
>>>>
>>>>
>>>> On 08/28/2012 02:57 PM, Micha Silver wrote:
>>>>
>>>> I'm having two problems when exporting the output of r.stream.order to a
>>>> shapefile.
>>>> I have attached the created table (saved in my setup in sqlite) to the
>>>> 'streams' map thru layer 2. Then
>>>> v.db.select streams layer=2
>>>> shows all the details of strahler order, prev_str, etc.
>>>>
>>>>
>>>> First problem: When I try to do v.out.ogr, the column header named
>>>> "next_stream" fails because it's 10 characters long, too long for a
>>>> shapefile dbf. As a result all attributes are missing.  Here's a patch to
>>>> io.c in r.stream.order I put in place to correct this:
>>>>
>>>>    [micha at SL6 r.stream.order]$ diff -u io.c.orig io.c
>>>> --- io.c.orig    2012-08-28 12:21:46.020275045 +0300
>>>> +++ io.c    2012-08-28 12:22:17.951382882 +0300
>>>> @@ -292,7 +292,7 @@
>>>>        /* table definition */
>>>>        char *tab_cat_col_name = "cat integer";
>>>>        char *tab_stream = "stream integer";
>>>> -    char *tab_next_stream = "next_stream integer";
>>>> +    char *tab_next_stream = "next_str integer";
>>>>        char *tab_prev_streams;
>>>>        char *tab_strahler = "strahler integer";
>>>>        char *tab_horton = "horton integer";
>>>> @@ -300,7 +300,7 @@
>>>>        char *tab_hack = "hack integer";
>>>>        char *tab_length = "length double precision";
>>>>        char *tab_cumlength = "cum_length double precision";
>>>> -    char *tab_stright = "stright double precision";
>>>> +    char *tab_stright = "straight double precision";
>>>>        char *tab_fractal = "fractal double precision";
>>>>        char *tab_distance = "out_dist double precision";
>>>>        char *tab_topo_dim = "topo_dim integer";
>>>>
>>>> (Also corrects a small typo in the column name "stright")
>>>>
>>>> After recompiling, then rerunning the r.stream.order addon, the sqlite
>>>> table
>>>> now has all column headers<= 10 characters suitable to shapefile.
>>>>
>>>>
>>>> Problem 2, where I'm stuck. I export the vector map using :
>>>> v.out.ogr streams layer=2 dsn=streams.shp
>>>> The process finishes OK, and the shape is created with all attrib
>>>> columns,
>>>> but *all* values are NULL (including the cat). Any ideas what I've done
>>>> wrong?
>>>>
>>>> Thanks,
>>>> Micha
>>>>
>>>>
>>>> This mail was received via Mail-SeCure System.
>>>>
>>>>
>>>> _______________________________________________
>>>> grass-user mailing list
>>>> grass-user at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/grass-user
>>>>
>>>> This mail was received via Mail-SeCure System.
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Micha Silver
>>>> GIS Consultant, Arava Development Co.
>>>> http://www.surfaces.co.il
>>>>
>>>>
>>>> _______________________________________________
>>>> grass-user mailing list
>>>> grass-user at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/grass-user
>>>>
>>> This mail was received via Mail-SeCure System.
>>>
>>>
> This mail was received via Mail-SeCure System.
>
>



More information about the grass-user mailing list