[GRASS-user] get vector table with unique feature id

I have a shapefile with overlapping polygons. After importing I thus end up with a vector layer with for each unique polygon (feature) one or more category values (i.e., one to many relationship).

Now I want to create a second attribute table linked to layer 2 with a cat column with for each polygon (for each internal feature id) an unique category.

Next, I want to use this to count the number of categories linked to each unique feature id.

I know this has been asked and answered before, but the solutions (copied below) do not work for me.

This worked, I think, in GRASS 6, but it doesn’t in G7 because a new vector map needs to be defined

v.category op=add layer=2 type=centroid
v.to.db type=centroid option=cat

The below does not create an attribute table with unique attributes for each unique feature.
> v.in.ogr dsn=test_polygones.shp out=polygons
> v.db.addtable polygons layer=2
> v.category polygons option=add layer=2 type=centroid out=polygons_tmp
> v.to.db polygons_tmp type=centroid option=cat layer=2 col=cat

On 03/04/15 14:42, Paulo van Breugel wrote:

I have a shapefile with overlapping polygons. After importing I thus
end up with a vector layer with for each unique polygon (feature) one
or more category values (i.e., one to many relationship).

Now I want to create a second attribute table linked to layer 2 with
a cat column with for each polygon (for each internal feature id) an
unique category.

Next, I want to use this to count the number of categories linked to
each unique feature id.

If you have overlapping polygons, after running v.in.ogr your map
already has layer 2 categories which represent for each feature where
there is overlap the number of overlapping polygons in that space. IIUC,
this is what you are looking for, or ?

I know this has been asked and answered before, but the solutions
(copied below) do not work for me.

This worked, I think, in GRASS 6, but it doesn't in G7 because a new
vector map needs to be defined

/v.category op=add layer=2 type=centroid/ /v.to.db type=centroid
option=cat/

And what is the problem with defining a new vector map. This new vector
map will contain all existing layers plus the new layer. But in this
case it should be:

v.category map op=add layer=3 type=centroid out=map2

You can then create a table for layer 3 with v.db.addtable:

v.db.addtable map2 layer=3 columns="cat2 integer"

and should be able to load the cat values of layer 2 into the table of layer 3 with v.to.db, but this does not seem to work at the moment:

v.to.db map22 layer=3 query_layer=2 op=cat columns=cat2

(there seems to be confusion between map layers, but I don't have time to check. Definitely worth a bug report.)

The below does not create an attribute table with unique attributes
for each unique feature. /> v.in.ogr dsn=test_polygones.shp
out=polygons
v.db.addtable polygons layer=2

> v.category polygons option=add

layer=2 type=centroid out=polygons_tmp

v.to.db polygons_tmp

type=centroid option=cat layer=2 col=cat/

For those features where there is overlap, this will not create new categories, but upload to the table the existing category which is the number of overlapping features.

Moritz

On Fri, Apr 3, 2015 at 3:11 PM, Moritz Lennert <mlennert@club.worldonline.be

wrote:

On 03/04/15 14:42, Paulo van Breugel wrote:

I have a shapefile with overlapping polygons. After importing I thus
end up with a vector layer with for each unique polygon (feature) one
or more category values (i.e., one to many relationship).

Now I want to create a second attribute table linked to layer 2 with
a cat column with for each polygon (for each internal feature id) an
unique category.

Next, I want to use this to count the number of categories linked to
each unique feature id.

If you have overlapping polygons, after running v.in.ogr your map
already has layer 2 categories which represent for each feature where
there is overlap the number of overlapping polygons in that space. IIUC,
this is what you are looking for, or ?

Yes, sorry, I was just about to write that this is indeed the case; you
were just ahead of me. In my initial attempt something went wrong, I should
have checked better, but was focused on getting a column with the unique
values per polygon (which as you write below does not seem to work?).

I know this has been asked and answered before, but the solutions
(copied below) do not work for me.

This worked, I think, in GRASS 6, but it doesn't in G7 because a new
vector map needs to be defined

/v.category op=add layer=2 type=centroid/ /v.to.db type=centroid
option=cat/

And what is the problem with defining a new vector map. This new vector
map will contain all existing layers plus the new layer. But in this
case it should be:

v.category map op=add layer=3 type=centroid out=map2

You can then create a table for layer 3 with v.db.addtable:

v.db.addtable map2 layer=3 columns="cat2 integer"

and should be able to load the cat values of layer 2 into the table of
layer 3 with v.to.db,

I knew (ok, I hoped) this should be simple. Thanks

but this does not seem to work at the moment:

v.to.db map22 layer=3 query_layer=2 op=cat columns=cat2

(there seems to be confusion between map layers, but I don't have time to
check. Definitely worth a bug report.)

I'll create one

The below does not create an attribute table with unique attributes

for each unique feature. /> v.in.ogr dsn=test_polygones.shp
out=polygons
v.db.addtable polygons layer=2

> v.category polygons option=add

layer=2 type=centroid out=polygons_tmp

v.to.db polygons_tmp

type=centroid option=cat layer=2 col=cat/

For those features where there is overlap, this will not create new
categories, but upload to the table the existing category which is the
number of overlapping features.

OK, I was confused here, thanks for the explanation

Moritz

On Fri, Apr 3, 2015 at 3:22 PM, Paulo van Breugel <p.vanbreugel@gmail.com>
wrote:

On Fri, Apr 3, 2015 at 3:11 PM, Moritz Lennert <
mlennert@club.worldonline.be> wrote:

On 03/04/15 14:42, Paulo van Breugel wrote:

I have a shapefile with overlapping polygons. After importing I thus
end up with a vector layer with for each unique polygon (feature) one
or more category values (i.e., one to many relationship).

Now I want to create a second attribute table linked to layer 2 with
a cat column with for each polygon (for each internal feature id) an
unique category.

Next, I want to use this to count the number of categories linked to
each unique feature id.

If you have overlapping polygons, after running v.in.ogr your map
already has layer 2 categories which represent for each feature where
there is overlap the number of overlapping polygons in that space. IIUC,
this is what you are looking for, or ?

Yes, sorry, I was just about to write that this is indeed the case; you
were just ahead of me. In my initial attempt something went wrong, I should
have checked better, but was focused on getting a column with the unique
values per polygon (which as you write below does not seem to work?).

I know this has been asked and answered before, but the solutions
(copied below) do not work for me.

This worked, I think, in GRASS 6, but it doesn't in G7 because a new
vector map needs to be defined

/v.category op=add layer=2 type=centroid/ /v.to.db type=centroid
option=cat/

And what is the problem with defining a new vector map. This new vector
map will contain all existing layers plus the new layer. But in this
case it should be:

v.category map op=add layer=3 type=centroid out=map2

You can then create a table for layer 3 with v.db.addtable:

v.db.addtable map2 layer=3 columns="cat2 integer"

and should be able to load the cat values of layer 2 into the table of
layer 3 with v.to.db,

I knew (ok, I hoped) this should be simple. Thanks

but this does not seem to work at the moment:

v.to.db map22 layer=3 query_layer=2 op=cat columns=cat2

(there seems to be confusion between map layers, but I don't have time to
check. Definitely worth a bug report.)

I'll create one

Created a ticket: Ticket #2641

The below does not create an attribute table with unique attributes

for each unique feature. /> v.in.ogr dsn=test_polygones.shp
out=polygons
v.db.addtable polygons layer=2

> v.category polygons option=add

layer=2 type=centroid out=polygons_tmp

v.to.db polygons_tmp

type=centroid option=cat layer=2 col=cat/

For those features where there is overlap, this will not create new
categories, but upload to the table the existing category which is the
number of overlapping features.

OK, I was confused here, thanks for the explanation

Moritz