[GRASS-user] Connect additional dbf file based on layer 1 attribute column

Luigi Ponti lponti at infinito.it
Mon Mar 31 18:06:45 EDT 2008


Dear Moritz: that's a lot of options -- thanks!!!

Moritz Lennert wrote:
> On 31/03/08 16:04, Luigi Ponti wrote:
>> Dear list,
>>
>> I am trying to import the European Vector Database (ESDB) version 2 
>> to GRASS
>> [...]
>> Is it possible to connect those .dbf files to the imported GRASS 
>> vector based on an attribute column (not the 'cat' column) that is 
>> present both in layer 1 of the vector and in those additional (not 
>> connected) .dbf files?
>
> Several options:
>
> 1) Use a real database backend (sqlite, postgresql), import the other 
> dbf files with db.in.ogr, then either
>     a) link to the map attribute table with v.db.join
>     b) create a view combining the cat column from the map attribute 
> with the other table and use v.db.connect to link to that table
I suspected that joins and views were the way to go, because I had been 
reading philosophical threads some time ago about whether or not grass 
was supposed to support those. However, I am not a database expert, so 
thanks for indicating this path that may be a good primer to get more 
into real database backends for GRASS.
>
> 2) If the columns linking your map to the other tables are integer, 
> you can also do
>     - v.reclasse with 'column' option
>     - v.db.connect the result of the reclass to the relevant dbf table
Yes, the link columns are integers, luckily. I tried this -- easy and 
elegant. It works fine with DBF. Does the GRASS DBF engine has a size 
limitation for some operations? I got an error while trying the following:

    GRASS 6.2.2 (SoilEurope2):~ >d.vect -c sgdbe4_0_reclass display=attr
    attrcol=EAWC_TOP
    DBMI-DBF driver error:
    SQL parser error in statement:
    select EAWC_TOP from smu_ptrdb.dbf where cat = 330677
    Error in db_open_select_cursor()

    ERROR: Cannot select attributes:
           select EAWC_TOP from smu_ptrdb.dbf where cat = 330677

Note that cat=330677 is 2572th row of the .dbf table (if I change 
attribute column, I always get an error on the same cat).

>
> 3 More complicated:
>     - in your existing map create a new layer of cats with e.g. 
> v.category map=sgdbe4_0 option=add layer=2
>     - find the correspondance of the newly created cats with the cats 
> in layer 1 with v.build sgbde4_0 option=cdump
>     - use that information to create a new table which contains the 
> layer 2 cat and the key column needed to link to the other dbf tables
>     - then proceed as in 1)
This one is a bit out of my range: I need to do some homework. Of the 
three options, this was the hardest  for me to understand.
>
>
> We really could do with an enhancement to v.category to allow the 
> creation of a second layer of categories based on a column value of 
> the attributes linked to the first...
>
> Moritz
>
Thanks again for a great GRASS-database seminar.

Kind regards,

Luigi

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/grass-user/attachments/20080401/f88c6924/attachment.html


More information about the grass-user mailing list