#3572: v.vect.stats creates cat & cat_ then fails
------------------------------+-------------------------
Reporter: simondedman | Owner: grass-dev@…
Type: defect | Status: new
Priority: normal | Milestone:
Component: Default | Version: 7.4.0
Keywords: | CPU: x86-64
Platform: MSWindows CygWin |
------------------------------+-------------------------
Within QGis, GRASS processing toolbox element v.vect.stats counts point
layer data within polygon areas layers & calculates statistics. If you
want to calculate stats & counts for multiple fields in the points layer
(e.g. you have data for various years) you have to repeat the process each
time, selecting the layer and field, giving the resultant count & stats
columns appropriate names, which produces a new polygon layer with the two
new data fields appended, AND a field called 'cat'. If you use this new
poly layer as the input for e.g. the next year's data, the output layer
will already have 'cat' from the first run, so will create 'cat_'. The
user likely doesn't care about these fields and there's no info presented
during the process about what this is - it looks like a counter but I
could very well be wrong. In any case: if you run the process a THIRD
time, the code is defeated (presumably) because 'cat' is present so it
tries 'cat_' which is also present, so it fails. Subsequently the user has
to deduce that this is the problem with no help, then go to layer
properties, source fields, edit, select cat & cat_, delete fields, unedit,
save.
Proposal:
1. have an option in the dialogue box to create 'cat' field (or not) and
explain what it is. Turned on by default.
2. Have cat field naming schema: cat0, cat1 etc, up to cat9999999 above
which point it'll break the 10 character limit. Notwithstanding if you ran
v.vect.stats 10 million times manually you'd experience the heat death of
the universe before you hit the 10 character limit.
Replying to [ticket:3572 simondedman]:
> Within QGis, GRASS processing toolbox element v.vect.stats counts point
layer data within polygon areas layers & calculates statistics. If you
want to calculate stats & counts for multiple fields in the points layer
(e.g. you have data for various years) you have to repeat the process each
time, selecting the layer and field, giving the resultant count & stats
columns appropriate names, which produces a new polygon layer with the two
new data fields appended, AND a field called 'cat'. If you use this new
poly layer as the input for e.g. the next year's data, the output layer
will already have 'cat' from the first run, so will create 'cat_'. The
user likely doesn't care about these fields and there's no info presented
during the process about what this is - it looks like a counter but I
could very well be wrong. In any case: if you run the process a THIRD
time, the code is defeated (presumably) because 'cat' is present so it
tries 'cat_' which is also present, so it fails. Subsequently the user has
to deduce that this is the problem with no help, then go to layer
properties, source fields, edit, select cat & cat_, delete fields, unedit,
save.
>
> Proposal:
> 1. have an option in the dialogue box to create 'cat' field (or not) and
explain what it is. Turned on by default.
> 2. Have cat field naming schema: cat0, cat1 etc, up to cat9999999 above
which point it'll break the 10 character limit. Notwithstanding if you ran
v.vect.stats 10 million times manually you'd experience the heat death of
the universe before you hit the 10 character limit.
The problem can be solved if QGIS uses `v.out.ogr -s` to skip export of
GRASS category ID ('cat') attribute.
Thanks Markus.
Am I right in thinking that QGis devs would have to code this switch into
the GUI as an option? As it stands it seems the only call to v.out.ogr is
to select the type, with a dropbown field that doesn't allow switches.
Replying to [comment:2 simondedman]:
> Thanks Markus.
> Am I right in thinking that QGis devs would have to code this switch
into the GUI as an option?
I think it is safe to hard-code this switch (-s) in QGIS, and don't make
it an option. While on it, the -m switch could also be hard-coded in QGIS.
Not make it an option i.e. general users probably don't need the cat
column and therefore the -s switch could be on by default at all times?
(Just want to make sure I understand correctly!)
What does the -m switch do? I was looking for v.out.ogr info in the
v.vect.stats help & code but I guess I'm looking in the wrong places.
Replying to [comment:4 simondedman]:
> Not make it an option i.e. general users probably don't need the cat
column and therefore the -s switch could be on by default at all times?
(Just want to make sure I understand correctly!)
Yes, because in the beginning (in the OGR vector) there is most probably
no cat column, therefore there is no need to export it. The cat column is
automatically generated by v.in.ogr when importing into GRASS.
>
> What does the -m switch do? I was looking for v.out.ogr info in the
v.vect.stats help & code but I guess I'm looking in the wrong places.
See G7:v.out.ogr. With the -m switch, multi-features (e.g..
multilinestrings, multipolygons) are exported from GRASS to OGR.