[GRASS-dev] [EXTERNAL] vector patching frustration

Vincent Bain bain at toraval.fr
Fri Mar 15 23:12:15 PDT 2024


Hello Michael,

sorry if I misunderstand your issue, but before patching these two maps
are you sure that each has a set of cat values strictly distinct from
the other? If a vector feature in map A shares the same cat value as
another feature in map B then after patching these features will be
assigned a single record in the attribute table because their cat will
be indentical.

V.


Le samedi 16 mars 2024 à 00:37 +0000, Michael Barton a écrit :
> I got this to work *finally*. But there are still complications. Here
> is an example work flow:
> 
> 1. Create a map of vector features
> 2. Create a basic attribute table (e.g., with v.db.addtable). 
> 3. Export that table into a csv file using db.out.ogr
> 4. Add some attribute fields to that csv file
> 5. Try to import that csv file using db.in.ogr
> 6. Error: it won't import the cat field
> 7. Edit the csv file to rename cat to mycat
> 8. Try to import the csv file again using db.in.ogr
> 9. If you have not changed the sort order of the csv file, the new
> cat numbers that db.in.ogr automatically assigns (no option about
> this) will match the original cat numbers.
> 10. If cat does not match mycat, no problem because when you connect
> the attribute table to the vector with v.db.connect, you can specify
> mycat as the key field.
> 11. Try to patch this vector with another vector that has the same
> structure of attribute table. *Fail* Because patching creates new cat
> numbers in some order that is not necessarily related to the old
> linkage. The attribute table of the 2nd map is properly added to the
> first attribute table, but the second map is not linked properly to
> the attribute records. 
> 
> In my case, patching updated my non-cat keyfield to the max cat value
> of the original table (154) + the max cat value of the patched table
> (155) = 309. Very odd. This did not match any record. Fortunately,
> because I only have only one vector feature in the 2nd patched map, I
> could edit the cat field in the table (because it was not the key
> field) to match the new cat of the 2nd vector feature, and rejoin the
> table to the vector using cat. If I would have had multiple features
> in the 2nd file, it would have been difficult to impossible. 
> 
> I'm not sure how to fix this. It may need to be a combination of
> allowing various vector modification modules to specify a cat value
> for a feature, assuming no duplication. It may need some change to
> db.in.ogr to allow for importing a field named cat. Maybe more
> changes to patch (and other features that have legacy underlying
> assumptions from the old pre-version6 vector format). 
> 
> Michael
> _____________________________
> C. Michael Barton
> Associate Director, School of Complex Adaptive
> Systems (https://scas.asu.edu)
> Professor, School of Human Evolution & Social
> Change (https://shesc.asu.edu)
> Director, Center for Social Dynamics &
> Complexity (https://complexity.asu.edu)
> Arizona State University
> Tempe, AZ 85287-2701
> USA
> 
> Executive Director, Open
> Modeling Foundation (https://openmodelingfoundation.github.io)
> Director, Network for Computational Modeling in Social & Ecological
> Sciences (https://comses.net)
> 
> personal website: http://www.public.asu.edu/~cmbarton 
> 
> 
> > On Mar 15, 2024, at 5:05 PM, Michael Barton
> > <michael.barton at asu.edu> wrote:
> > 
> > Never mind. I figured it out when I saw the post. Now for the next
> > step. 
> > 
> > Michael
> > _____________________________
> > C. Michael Barton
> > Associate Director, School of Complex Adaptive
> > Systems (https://scas.asu.edu)
> > Professor, School of Human Evolution & Social
> > Change (https://shesc.asu.edu)
> > Director, Center for Social Dynamics &
> > Complexity (https://complexity.asu.edu)
> > Arizona State University
> > Tempe, AZ 85287-2701
> > USA
> > 
> > Executive Director, Open
> > Modeling Foundation (https://openmodelingfoundation.github.io)
> > Director, Network for Computational Modeling in Social & Ecological
> > Sciences (https://comses.net)
> > 
> > personal website: http://www.public.asu.edu/~cmbarton 
> > 
> > 
> > > On Mar 15, 2024, at 3:29 PM, Michael Barton
> > > <Michael.Barton at asu.edu> wrote:
> > > 
> > > Something is just not working here. 
> > > 
> > > I can't try the new PR until I can get the original cats fixed.
> > > v.category does not seem to be working as expected. I have a map
> > > with a single area. I clipped it out of another map (where it had
> > > cat=18) using v.select. When I check the categories, it looks
> > > like this:
> > > 
> > > v.category input=SA5 at SAA2024 type=centroid option=report 
> > > Layer/table: 1/SA5
> > > type       count        min        max
> > > point          0          0          0
> > > line           0          0          0
> > > boundary       0          0          0
> > > centroid       1         28         28
> > > area           0          0          0
> > > face           0          0          0
> > > kernel         0          0          0
> > > all            1         28         28
> > > 
> > > So I want to follow your example to first delete categories and
> > > then add them back in starting at 1. 
> > > 
> > > v.category --overwrite input=SA5 at SAA2024 output=NA5a option=del
> > > cat=-1
> > > 
> > > But delete does not seem to work. 
> > > 
> > > GRASS : ~ > v.category input=SA5a at SAA2024 option=report
> > > Layer/table: 1/SA5a
> > > type       count        min        max
> > > point          0          0          0
> > > line           0          0          0
> > > boundary       0          0          0
> > > centroid       1         28         28
> > > area           0          0          0
> > > face           0          0          0
> > > kernel         0          0          0
> > > all            1         28         28
> > > 
> > > It stays at cat=28. Oddly, when I display the map and query it,
> > > it has no cat number visible in the query output in the GUI. But
> > > v.category shows that it still has a category somewhere. And if I
> > > then use v.category to try to add a new cat, starting at 1, the
> > > result is a map with cat=28 again. And when I patch, using your
> > > PR, I get the same results I had before. 
> > > 
> > > Michael
> > > 
> > > _____________________________
> > > C. Michael Barton
> > > Associate Director, School of Complex Adaptive
> > > Systems (https://scas.asu.edu)
> > > Professor, School of Human Evolution & Social
> > > Change (https://shesc.asu.edu)
> > > Director, Center for Social Dynamics &
> > > Complexity (https://complexity.asu.edu)
> > > Arizona State University
> > > Tempe, AZ 85287-2701
> > > USA
> > > 
> > > Executive Director, Open
> > > Modeling Foundation (https://openmodelingfoundation.github.io)
> > > Director, Network for Computational Modeling in Social &
> > > Ecological Sciences (https://comses.net)
> > > 
> > > personal website: http://www.public.asu.edu/~cmbarton 
> > > 
> > > 
> > > > On Mar 15, 2024, at 8:51 AM, Huidae Cho <grass4u at gmail.com>
> > > > wrote:
> > > > 
> > > > Michael,
> > > > 
> > > > Just confirmed your issue.
> > > > 
> > > > v.random tmp100 npoints=100 seed=100
> > > > v.db.addtable tmp100 col="id varchar(20)"
> > > > v.db.update tmp100 col=id qcol="'tmp100_' || cat"
> > > > 
> > > > v.random tmp10 npoints=10 seed=10
> > > > v.db.addtable tmp10 col="id varchar(20)"
> > > > v.db.update tmp10 col=id qcol="'tmp10_' || cat"
> > > > 
> > > > v.patch tmp100,tmp10 out=tmp110 -e
> > > > 
> > > > v.category tmp110 op=report
> > > > Layer/table: 1/tmp110
> > > > type       count        min        max
> > > > point        110          2        112
> > > > line           0          0          0
> > > > boundary       0          0          0
> > > > centroid       0          0          0
> > > > area           0          0          0
> > > > face           0          0          0
> > > > kernel         0          0          0
> > > > all          110          2        112
> > > > 
> > > > In my case, all features in tmp10 are linked in tmp110.
> > > > 
> > > > You can recategorize it.
> > > > 
> > > > v.category tmp110 out=tmp110_nocats op=del cat=-1
> > > > v.category tmp110_nocats out=tmp110_recats op=add
> > > > 
> > > > npnts100=$(v.info tmp100 -t | sed '/points=/!d; s/points=//')
> > > > npnts10=$(v.info tmp10 -t | sed '/points=/!d; s/points=//')
> > > > 
> > > > v.db.update tmp110_recats col=cat qcol=cat-1
> > > > where="cat<=$npnts100+1"
> > > > v.db.update tmp110_recats col=cat qcol=cat-2
> > > > where="cat>$npnts100+1"
> > > > 
> > > > Yeah... I know what you may think... Please create an issue on
> > > > GitHub.
> > > > 
> > > > Regards,
> > > > Huidae
> > > > 
> > > > On Thu, Mar 14, 2024 at 4:42 PM Michael Barton via grass-dev
> > > > <grass-dev at lists.osgeo.org> wrote:
> > > > > Thanks Doug and Vincent. 
> > > > > 
> > > > > None of this works. I vaguely remember having this same kind
> > > > > of road block several years back. 
> > > > > 
> > > > > Nothing in v.category lets you change an existing cat value
> > > > > to a different value
> > > > > v.in.ogr MUST add a column that MUST be named cat (all else
> > > > > causes an error--this is a bug) that is a series of
> > > > > consecutive integers from 1-n. So I cannot create a file with
> > > > > a cat field that matches my vector areas. 
> > > > > 
> > > > > v.edit won't let you change an existing cat number AFAICT. No
> > > > > error but nothing changes. 
> > > > > 
> > > > > Once I've imported a table using v.in.ogr, I cannot use
> > > > > db.drop.column to delete the cat column--even if it is not
> > > > > being used as a key field. This raises an error.
> > > > > 
> > > > > No way to rename a column from cat to something else (or
> > > > > something else to cat) unless you've already connected it to
> > > > > a vector map even if cat is not the key field. So I can't
> > > > > create an integer column to link up my lost vector area with
> > > > > a record in my csv file. 
> > > > > 
> > > > > This simple task is just not possible in GRASS AFAICT. Or if
> > > > > it is possible, it can only be done by such non-obvious and
> > > > > convoluted means that I've yet to find a method that works in
> > > > > spite of asking a large number of very skilled GRASS users.
> > > > > 
> > > > > Michael
> > > > > _____________________________
> > > > > C. Michael Barton
> > > > > Associate Director, School of Complex Adaptive
> > > > > Systems (https://scas.asu.edu)
> > > > > Professor, School of Human Evolution & Social
> > > > > Change (https://shesc.asu.edu)
> > > > > Director, Center for Social Dynamics &
> > > > > Complexity (https://complexity.asu.edu)
> > > > > Arizona State University
> > > > > Tempe, AZ 85287-2701
> > > > > USA
> > > > > 
> > > > > Executive Director, Open
> > > > > Modeling Foundation (https://openmodelingfoundation.github.io
> > > > > )
> > > > > Director, Network for Computational Modeling in Social &
> > > > > Ecological Sciences (https://comses.net)
> > > > > 
> > > > > personal website: http://www.public.asu.edu/~cmbarton 
> > > > > 
> > > > > 
> > > > > > On Mar 14, 2024, at 7:10 AM, Newcomb, Doug
> > > > > > <doug_newcomb at fws.gov> wrote:
> > > > > > 
> > > > > > Have you tried a .csvt file for your .csv
> > > > > > file? https://gdal.org/drivers/vector/csv.html
> > > > > > 
> > > > > > From: grass-dev <grass-dev-bounces at lists.osgeo.org> on
> > > > > > behalf of Michael Barton via grass-dev
> > > > > > <grass-dev at lists.osgeo.org>
> > > > > > Sent: Wednesday, March 13, 2024 7:02 PM
> > > > > > To: GRASS developers <grass-dev at lists.osgeo.org>; GRASS
> > > > > > user list <grass-user at lists.osgeo.org>
> > > > > > Subject: [EXTERNAL] [GRASS-dev] vector patching
> > > > > > frustration 
> > > > > >  
> > > > > >  This email has been received from outside of DOI - Use
> > > > > > caution before clicking on links, opening attachments, or
> > > > > > responding.  
> > > > > > 
> > > > > > 
> > > > > > I am completely stymied in my attempt to do what should be
> > > > > > a simple task. I have a map of vector areas, linked with an
> > > > > > attribute table. I would like to patch in one more vector
> > > > > > area, for which I have equivalent attribute information. I
> > > > > > have tried this multiple ways and I cannot make this patch
> > > > > > happen so that the added area has attribute info. 
> > > > > > 
> > > > > > The closest I've come is to create and link a one line
> > > > > > table to the new area that has exactly the same fields as
> > > > > > the larger vector area map. The first map has 154 areas
> > > > > > (i.e., cat=1-155). When I patch the maps and look at the
> > > > > > resulting attribute table, I indeed see line and cat 155.
> > > > > > But it is not linked with the patched area--which has been
> > > > > > assigned a cat=183 for reasons I cannot fathom. The patch
> > > > > > also renumbers my cat field to cat=2-155 from the original
> > > > > > 1-154. 
> > > > > > 
> > > > > > This has been made more complicated by the fact that
> > > > > > v.in.ogr imports all columns of a *.csv as text, regardless
> > > > > > of what is in them and assigns cat numbers starting at 1.
> > > > > > So I can't specify an integer key field of 155 to try the
> > > > > > linking. Nor can I change the assigned cat of the single
> > > > > > area I am trying to patch from 1 to 155 using v.category
> > > > > > (or anything else I can find). 
> > > > > > 
> > > > > > I'm hoping that someone has a clever solution that I've not
> > > > > > seen or I'll just have to do this fairly simple and
> > > > > > straightforward vector operation in QGIS. 
> > > > > > 
> > > > > > Michael
> > > > > > _____________________________
> > > > > > C. Michael Barton
> > > > > > Associate Director, School of Complex Adaptive
> > > > > > Systems (https://scas.asu.edu)
> > > > > > Professor, School of Human Evolution & Social
> > > > > > Change (https://shesc.asu.edu)
> > > > > > Director, Center for Social Dynamics &
> > > > > > Complexity (https://complexity.asu.edu)
> > > > > > Arizona State University
> > > > > > Tempe, AZ 85287-2701
> > > > > > USA
> > > > > > 
> > > > > > Executive Director, Open
> > > > > > Modeling Foundation (https://openmodelingfoundation.github.io
> > > > > > )
> > > > > > Director, Network for Computational Modeling in Social &
> > > > > > Ecological Sciences (https://comses.net)
> > > > > > 
> > > > > > personal website: http://www.public.asu.edu/~cmbarton
> > > > > 
> > > > > _______________________________________________
> > > > > grass-dev mailing list
> > > > > grass-dev at lists.osgeo.org
> > > > > https://lists.osgeo.org/mailman/listinfo/grass-dev
> > > > > 
> > > > 
> > > > 
> > > > -- 
> > > > Huidae Cho, Ph.D., GISP, /hidɛ t͡ɕo/, 조희대, 曺喜大
> > > > GRASS GIS Developer
> > > > https://idea.isnew.info/
> > > 
> > 
> 



More information about the grass-dev mailing list