[GRASS-user] Add DB entries to vector line (after v.split)
Moritz Lennert
mlennert at club.worldonline.be
Thu May 7 02:54:23 PDT 2015
On 06/05/15 22:12, knussear wrote:
> Interestingly 4 years later and using V.split in grass7 and I'm still having
> the same problem....
>
> tried the v.category solution and the cats were never deleted.
Are you sure ? In the original thread, the check for success was wrong
[1]: v.db.select checks the attached attribute table (which v.split does
not modify), not the categories present in the features.
Here's a working example using a simple vector map with three lines:
v.split test_line out=line_test_split length=5000
v.category line_test_split op=report
Layer/table: 1/line_test_split
type count min max
point 0 0 0
line 46 2 4
boundary 0 0 0
centroid 0 0 0
area 0 0 0
face 0 0 0
kernel 0 0 0
all 46 2 4
Now, two options:
1) You want to keep the category values of the original lines, but also
add individual category values for the new segements. Here GRASS's layer
paradigm comes in handy, allowing you to create a second layer of
information:
#create second information layer containing new individual category
values for the segments
v.category line_test_split out=line_test_split_w_lay2 layer=2 op=add
v.category line_test_split_w_lay2 op=report
Layer/table: 1/line_test_split_w_lay2
type count min max
point 0 0 0
line 46 2 4
boundary 0 0 0
centroid 0 0 0
area 0 0 0
face 0 0 0
kernel 0 0 0
all 46 2 4
Layer/table: 2/line_test_split_w_lay2_2
type count min max
point 0 0 0
line 46 1 46
boundary 0 0 0
centroid 0 0 0
area 0 0 0
face 0 0 0
kernel 0 0 0
all 46 1 46
Now you can add a new attribute table to the second layer:
v.db.addtable line_test_split_w_lay2 layer=2
If you want to integrate the old categories (or anything else from the
original attribute table) into the attribute table of the new segments:
v.db.addcolumn line_test_split_w_lay2 col="old_cat int" layer=2
v.to.db line_test_split_w_lay2 layer=2 query_layer=1 op=query
query_col=cat col=old_cat
v.db.select line_test_split_w_lay2 layer=2
cat|old_cat
1|2
2|2
3|2
4|2
5|2
6|2
7|2
8|2
9|2
10|2
11|2
12|2
13|2
14|2
15|2
16|2
17|3
18|3
19|3
20|3
21|3
etc...
2) You just need the segments with individual category values, but not
the old line categories, nor the old attribute table:
#delete old cats, don't keep old attribute table to avoid confusion
v.category -t line_test_split op=del cat=-1 out=line_test_split_wo_cats
#add new cats
v.category line_test_split_wo_cats out=line_test_split_w_new_cats op=add
#now, if necessary create new attribute table prefilled with cat values
v.db.addtable line_test_split_w_new_cats
> My system
> will also not install the v.to.equidist add on.
Which version of GRASS are you using. The addon was developed for GRASS 6.
It is a simple shell script which you can download from [2], but I
haven't checked if it will run as-is in GRASS 7
Moritz
[1] http://lists.osgeo.org/pipermail/grass-user/2011-October/062318.html
[2]
https://raw.githubusercontent.com/amuriy/GRASS-scripts/master/v.to.equidist
More information about the grass-user
mailing list