[GRASS-stats] Why does rgrass7::writeVECT() silently add a cat column if it doesn't exist?
Tobias Pilz
topilz at pik-potsdam.de
Tue Oct 26 04:28:52 PDT 2021
Hi Roger,
thanks for clarification. I understand why it happens but I still think
this is somewhat unexpected behaviour.
However, to wrap it up, I guess it's always best to have a 'cat' column
in the attribute table as then this won't happen.
Tobias
Am 21.10.21 um 09:55 schrieb Roger Bivand:
> On Thu, 21 Oct 2021, Tobias Pilz wrote:
>
>> Hi Vero,
>>
>> as I understand it, vector files in GRASS need a key column if they
>> have an attribute table. But I don't see that this has to be a column
>> named 'cat'. However, GRASS is quite inconsistent here. Some
>> functions ensure the existence of a 'cat' column, such as
>> v.db.dropcolumn (just gives an error if you try to remove the 'cat'
>> column), whereas other functions let one define other columns as key
>> column (e.g. manually in the GUI or v.db.addtable).
>>
>> The latter happened with my vector map, i.e. a different column was
>> defined as key column. Therefore it is confusing why
>> rgrass7::writeVECT() just adds the cat column and without any
>> notification. This makes no sense to me and is annoying as my
>> subsequent workflow produced unexpected results and I had to trace
>> back the error which took a while.
>
> In sf vector objects, there is no concept of key column, I think. In
> sp vector objects (used before, should be avoided from now on as sf is
> actively maintained), the geometry ID is keyed to the row.names of the
> data slot data.frame object, but is also not seen as a user-facing key
> column.
>
> So you are adding (as a user) a concept not present in the R-side
> objects.
>
> In practice, cat can be useful where cleaning has split line or
> polygon objects imported into GRASS into multiple features, which can
> then be unioned back after exporting from GRASS to R, but this isn't a
> concept, it is a pragmatic fix.
>
> Hope this clarifies,
>
> Roger
>
>
>>
>> From my perspective as user it would be great if a more consistent
>> solution regarding the treatment of key columns could be found, i.e.
>> either always ensure the existence of a column named 'cat' or just
>> accept if the user specifies a different key column.
>>
>> Regards,
>>
>> Tobias
>>
>> Am 20.10.21 um 20:41 schrieb Veronica Andreo:
>>> Hello Tobias,
>>>
>>> The cat colum is the ID that GRASS uses for vectors, hence this is
>>> expected
>>> and right. The same happens if you import a gpgk or shape or any other
>>> vector file into GRASS. See
>>> https://grass.osgeo.org/grass78/manuals/vectorintro.html for
>>> further info
>>>
>>> HTH,
>>> Vero
>>>
>>>
>>>
>>> El mié, 20 oct 2021 a las 9:34, Tobias Pilz (<topilz at pik-potsdam.de>)
>>> escribió:
>>>
>>>> Dear list,
>>>>
>>>> when I use in R the writeVECT() command the resulting map in GRASS
>>>> got
>>>> the 'cat' column silently added to its attribute table if it didn't
>>>> exist.
>>>>
>>>> The vector object in question was previously imported to R via
>>>> readVECT() and had a different column defined as key column.
>>>>
>>>> Is this behaviour of writeVECT() intentional? If yes, why so and
>>>> wouldn't it make sense to give a warning?
>>>>
>>>> Note: I used rgrass7 version 0.2-6 together with GRASS 7.8.5 under
>>>> Linux
>>>> (opensuse).
>>>>
>>>> Regards,
>>>>
>>>> Tobias
>>>>
>>>>
>>>> _______________________________________________
>>>> grass-stats mailing list
>>>> grass-stats at lists.osgeo.org
>>>> https://lists.osgeo.org/mailman/listinfo/grass-stats
>>>>
>>
>
--
Dr. Tobias Pilz
Climate Resilience - Research Department 2
Tel: +49 331 288 2539
E-mail: tobias.pilz at pik-potsdam.de
Potsdam Institute for Climate Impact Research
Telegraphenberg A 31
P.O. Box 60 12 03
D-14412 Potsdam
www.pik-potsdam.de/members/topilz
You are welcome to send me PGP/GnuPG encrypted messages. Please find my public key on the common servers.
More information about the grass-stats
mailing list