[GRASS-user] Integrating multi tables

Trying to work this one out, and not getting anywhere!

I have imported Shapefiles into vector maps.

I have "population" data (not people but using the same cat column IDs as in the shapefile attribute tables).

How do I integrate the population data so that the shapefiles can be coloured in thematic maps?

I can add columns to the vector attribute tables - but I can't find a command that would mass-populate the column
(in MySQL it would be a simple UPDATE Table 1, Table 2 set column=column where table 1.cat=table 2.cat).

(It probably doesn't help that the population data is in MySQL but I am happy to import)

I fear that I am missing something *really* simple but am just about going spare trying to find out!

If I get this sorted, I can stop bugging the list with newbie stuff for ages!

Richard Chirgwin

On 24/03/07 07:34, Richard Chirgwin wrote:

Trying to work this one out, and not getting anywhere!

I have imported Shapefiles into vector maps.

I have "population" data (not people but using the same cat column IDs as in the shapefile attribute tables).

How do I integrate the population data so that the shapefiles can be coloured in thematic maps?

I can add columns to the vector attribute tables - but I can't find a command that would mass-populate the column
(in MySQL it would be a simple UPDATE Table 1, Table 2 set column=column where table 1.cat=table 2.cat).

(It probably doesn't help that the population data is in MySQL but I am happy to import)

I fear that I am missing something *really* simple but am just about going spare trying to find out!

If you are using the default GRASS settings, your shapefile data gets imported as a dbf file. There is no way of combining this file with others, either in a database application or in GRASS (i.e. there is no equivalent of ArcView's "joining" tables).
However, you are not obliged to work with dbf files, you can import your shapefile attribute data into mysql and then either add the colums with your above 'update' command or just create a view combining the two tables and link your map to this view.

Use:

- db.connect to define a different database backend (Databases->Manage Databases->Connect to database in the GUI)
- db.copy to copy an existing table to another table, including between different backends, i.e. dbf to mysql (Databases->Manage Databases->Copy table)
- v.db.connect to link your map to the table or to the view (Vector->vector<->database connection->Set database connection...)

You can also begin by setting db.connect in a new location, and then import the shapefile with v.in.ogr. The attribute table is then automatically created in the database you connected to.

Moritz

I knew I was missing something really simple! - I guess more reading on my part into the data model is going to be important. I hadn't realised that it's okay to "split" the storage - to have the locations file in a database that didn't also contain the map outlines.

So now, my backside feels much safer, and next week the boss will have some lovely maps to use at a conference, and I will make damn sure that Grass-GIS gets identified as the source of the maps. So thanks again ...

A couple of things which should be asked/made known.

1) When importing CSVs (I tried from Excel and from MySQL), the dbf creates all the import tables as Character. I could not find any way to change column type to INT. Is this a limitation on the driver command set?

2) The Grass Manager db.copy seems to have a bug. With the "select" cursor empty, it tries to set a conditional default (where ...), generating the following error:
SQL parser error in statement:
select * from table where 0 = 1
Error in db_open_select_cursor ()

If I typed the command manually, it worked fine.

3) Are there programs known to create/edit/save "legal" DBF file formats? On the Mac, at least, creating straight textfiles for import does not work well. Open Office (NeoOffice) opens DBFs quite happily as spreadsheets, but Grass-GIS doesn't like the OO DBF save format (the same applies for Excel).

Cheers and thanks to everyone for the help!

Richard Chirgwin

Moritz Lennert wrote:

On 24/03/07 07:34, Richard Chirgwin wrote:

Trying to work this one out, and not getting anywhere!

I have imported Shapefiles into vector maps.

I have "population" data (not people but using the same cat column IDs as in the shapefile attribute tables).

How do I integrate the population data so that the shapefiles can be coloured in thematic maps?

I can add columns to the vector attribute tables - but I can't find a command that would mass-populate the column
(in MySQL it would be a simple UPDATE Table 1, Table 2 set column=column where table 1.cat=table 2.cat).

(It probably doesn't help that the population data is in MySQL but I am happy to import)

I fear that I am missing something *really* simple but am just about going spare trying to find out!

If you are using the default GRASS settings, your shapefile data gets imported as a dbf file. There is no way of combining this file with others, either in a database application or in GRASS (i.e. there is no equivalent of ArcView's "joining" tables).
However, you are not obliged to work with dbf files, you can import your shapefile attribute data into mysql and then either add the colums with your above 'update' command or just create a view combining the two tables and link your map to this view.

Use:

- db.connect to define a different database backend (Databases->Manage Databases->Connect to database in the GUI)
- db.copy to copy an existing table to another table, including between different backends, i.e. dbf to mysql (Databases->Manage Databases->Copy table)
- v.db.connect to link your map to the table or to the view (Vector->vector<->database connection->Set database connection...)

You can also begin by setting db.connect in a new location, and then import the shapefile with v.in.ogr. The attribute table is then automatically created in the database you connected to.

Moritz

I have had some success editing dbf files on the Mac using OpenOffice.org 2.1. I haven't tried NeoOffice. A recent edit involved adding a column of calculated values in OpenOffice. Grass recognized the new column. It doesn't work if you leave the formula in place. I changed them to text using copy and paste special as strings.

Dave

On Mar 26, 2007, at 5:24 PM, Richard Chirgwin wrote:

I knew I was missing something really simple! - I guess more reading on my part into the data model is going to be important. I hadn't realised that it's okay to "split" the storage - to have the locations file in a database that didn't also contain the map outlines.

So now, my backside feels much safer, and next week the boss will have some lovely maps to use at a conference, and I will make damn sure that Grass-GIS gets identified as the source of the maps. So thanks again ...

A couple of things which should be asked/made known.

1) When importing CSVs (I tried from Excel and from MySQL), the dbf creates all the import tables as Character. I could not find any way to change column type to INT. Is this a limitation on the driver command set?

2) The Grass Manager db.copy seems to have a bug. With the "select" cursor empty, it tries to set a conditional default (where ...), generating the following error:
SQL parser error in statement:
select * from table where 0 = 1
Error in db_open_select_cursor ()

If I typed the command manually, it worked fine.

3) Are there programs known to create/edit/save "legal" DBF file formats? On the Mac, at least, creating straight textfiles for import does not work well. Open Office (NeoOffice) opens DBFs quite happily as spreadsheets, but Grass-GIS doesn't like the OO DBF save format (the same applies for Excel).

Cheers and thanks to everyone for the help!

Richard Chirgwin

Moritz Lennert wrote:

On 24/03/07 07:34, Richard Chirgwin wrote:

Trying to work this one out, and not getting anywhere!

I have imported Shapefiles into vector maps.

I have "population" data (not people but using the same cat column IDs as in the shapefile attribute tables).

How do I integrate the population data so that the shapefiles can be coloured in thematic maps?

I can add columns to the vector attribute tables - but I can't find a command that would mass-populate the column
(in MySQL it would be a simple UPDATE Table 1, Table 2 set column=column where table 1.cat=table 2.cat).

(It probably doesn't help that the population data is in MySQL but I am happy to import)

I fear that I am missing something *really* simple but am just about going spare trying to find out!

If you are using the default GRASS settings, your shapefile data gets imported as a dbf file. There is no way of combining this file with others, either in a database application or in GRASS (i.e. there is no equivalent of ArcView's "joining" tables).
However, you are not obliged to work with dbf files, you can import your shapefile attribute data into mysql and then either add the colums with your above 'update' command or just create a view combining the two tables and link your map to this view.

Use:

- db.connect to define a different database backend (Databases->Manage Databases->Connect to database in the GUI)
- db.copy to copy an existing table to another table, including between different backends, i.e. dbf to mysql (Databases->Manage Databases->Copy table)
- v.db.connect to link your map to the table or to the view (Vector->vector<->database connection->Set database connection...)

You can also begin by setting db.connect in a new location, and then import the shapefile with v.in.ogr. The attribute table is then automatically created in the database you connected to.

Moritz

_______________________________________________
grassuser mailing list
grassuser@grass.itc.it
http://grass.itc.it/mailman/listinfo/grassuser

Richard Chirgwin wrote:

1) When importing CSVs (I tried from Excel and from MySQL), the dbf
creates all the import tables as Character. I could not find any way
to change column type to INT. Is this a limitation on the driver
command set?

v.in.ascii first scans through the data. if it only finds integer data
it will make a integer column, floating point -> double precision, and
if it finds any non-numeric data in the column it will treat it as a
varchar() string column. You can set the column types with the columns=
option, but it should happen automatically.

This works well (and we'd be hearing about it every day if it didn't) so
check your input data for stray characters. (e.g. I'm not sure how it
handles "nan")

IIRC Excel for OSX still exports using OS9 newlines instead of UNIX
newlines, but regardless it should handle those ok (DOS newlines too).
Try opening the .csv file in a smart editor like nedit or bbedit and
save as UNIX filetype instead of MacOS9.
(I've just tested a MacOS9 text file with v.in.ascii, table was created
fine)
?

http://www.nedit.org

maybe the .csv has column titles and you didn't use skip= or "#" ?

Hamish

Richard Chirgwin wrote:

but Grass-GIS doesn't like the OO DBF save format (the
same applies for Excel).

What do you mean? I have been ediditing my dbfs with Oo.org Calc quite
offten and no problems. Only that it turns columns names into uppercase
always. But that's not a big deal I guess.

Maciek