[GRASS-user] v.external pg alternative geometry column
Moritz Lennert
mlennert at club.worldonline.be
Mon Jul 29 10:56:35 PDT 2013
On 29/07/13 18:13, António M. Rodrigues wrote:
> Hi Moritz,
>
> Thanks for your reply.
>
> In http://www.gdal.org/ogr/drv_pg_advanced.html, it says:
>
> "Starting with GDAL 1.6.0, the PostgreSQL driver supports accessing
> tables with multiple PostGIS geometry columns. For such a table, there
> will be as many layers reported as the number of geometry columns listed
> for that table in the geometry_columns table."
>
> Now, I have one postgis table with two geometry fields, the_geom and
> the_geo3763. I opened both in qgis to make sure the geometries were
> correctly transformed and everything was in place.
>
> I set a connection with pg from grass7 using db.connect, db.login,
> db.connect -p, db.tables -p (details below).
>
> db.tables returns only one base.geoi1 table (should be 2, since it has 2
> geometry columns, no?).
No, the db.* modules are completely independent of the geometry issues
in Postgis and do not use gdal/ogr. They are database management modules
and as such it is correct that db.tables returns one table, as there is
only one table.
If you want to see which layers are available in a PostGIS database, use
v.in.ogr -l :
v.in.ogr -l dsn="PG:host=localhost user=marxco password=********
dbname=geocontacto"
>
> Then I imported both geometries with v.external. For the second geometry
> I specified the field the_geometry3763.
Note that v.external does not import files, it links external files to
allow you to work directly with them as if they were imported. However
you do not get full topology handling. If you really want to import
files, use v.in.ogr.
>
> Both tables are imported into grass, showing the same geometry (the
> orginal, with crs=20790).
>
> Is this a bug or I'm doing something wrong?
>
[...]
> ----------------------------
> (Mon Jul 29 16:39:23 2013) Command finished (0 sec)
> (Mon Jul 29 16:40:06 2013)
> db.connect driver=pg database=host=localhost,dbname=geocontacto,port=5432
> (Mon Jul 29 16:40:06 2013) Command finished (0 sec)
> ----------------------------
> (Mon Jul 29 16:41:02 2013)
> db.login user=marxco password=********
> The password was stored in file (.grass7/dblogin)
You do not have to change the db.connect and db.login settings for
importing / linking external files.
> (from postgis)
> select st_srid(the_geom3763) from base.geoi;
> Returns 3763
I suppose that this should read 'from base.geoindex_jan13_v3' ?
Are the two columns in the geometry_columns table/view ?
> -------------------------------------------------------------
> v.external dsn=PG:host=localhost user=marxco password=********
> dbname=geocontacto layer=base.geoindex_jan13_v3.the_geom3763
> output=geoindex2
I suppose that this is result of an attempt via the GUI wizard ?
AFAIK, this should actually not work at all. As the OGR documentation
states:
"For example, if a table 'foo' has 2 geometry columns 'bar' and 'baz', 2
layers will be reported : 'foo(bar)' and 'foo(baz)'."
So, your layer should be base.geoindex_jan13_v3(the_geom3763).
However, did you use the ogr connection, or did you use the PostGIS(PG)
type of source in the v.external GUI wizard ?
In any case, I don't think that the GUI wizard has foreseen this case,
so please file a bug against the GUI. In the meantime, you can use
v.external directly, not via the wizard (just type v.external in the
command console).
I am not sure, however, if v.external can handle this case correctly, as
it uses the layer name directly in select queries and select * from
layer(geomcolumn) does not work... Try it, and if it doesn't work,
please file another bug against v.external.
Moritz
More information about the grass-user
mailing list