Re: [GRASS-user] [GRASS-dev] [EXTERNAL] vector patching frustration
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 +, 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 > > 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 > > > 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@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
Re: [GRASS-user] [GRASS-dev] [EXTERNAL] vector patching frustration
Michael, Huidae thats's what I was just about to post... you need to care cats intervals don't overlap before patching. With the attached set of 2 vector maps you can have a try, typing : v.in.ogr input=/your/path/to/map1.gpkg output=map1 v.in.ogr input=/your/path/to/map2.gpkg output=map2 v.category input=map1 type=centroid option=report v.category input=map2 type=centroid option=report # Cats overlap, so : v.category --overwrite input=map2 type=centroid output=map200 option=sum cat=100 v.patch --overwrite input=map1,map200 output=map12 v.patch -e --overwrite input=map1,map200 output=map12 Yours, V. Le vendredi 15 mars 2024 à 09:51 -0600, Huidae Cho a écrit : > 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 > 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 > > > wrote: > > > > > > Have you tried a .csvt file for your .csv > > > file? https://gdal.org/drivers/vector/csv.html > > > > > > From: grass-dev on behalf of > > > Michael Barton via grass-dev > > > Sent: Wednesday, March 13, 2024 7:02 PM > > > To: GRASS developers ; GRASS user list > > > > > > 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 > >
Re: [GRASS-user] [GRASS-dev] vector patching frustration
Hello Michael, do you mean that you cannot assign a different cat number to the specific area you added, i.e. it has a cat number assigned ? I guess you tried the "sum" option of v.category. But are you sure that the new area actually has a category attached to ? (else you could achieve it with v.edit and its "catadd" tool, knowing the record number of the feature you want to cat). Hope I understood your issue, Vincent. Le mercredi 13 mars 2024 à 23:02 +, Michael Barton via grass-dev a écrit : > 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-...@lists.osgeo.org > https://lists.osgeo.org/mailman/listinfo/grass-dev ___ grass-user mailing list grass-user@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/grass-user