wiki:Grass7/VectorLib/PostGISInterface

Version 28 (modified by martinl, 12 years ago) ( diff )

--

PostGIS data provider in GRASS 7

PostGIS data can be accessed in GRASS 7 using GRASS-OGR data provider or preferably by native GRASS-PostGIS data provider. Note that GRASS-OGR data provider supports only simple feature access.

Development of PostGIS data provider has been supported by Fondazione Edmund Mach and Comune di Trento (Italy).

This data provider allows GRASS to read (see read_pg.c) and write (see write_pg.c) PostGIS data directly without any external library (like in the case of GRASS-OGR data provider). GRASS-PostGIS data provider is implemented using libpq library.

Note that GRASS-PostGIS data provider is compiled only when GRASS is configured with --with-postgres switch.

Overview of subroutines to read PostGIS data:

LevelSequantial accessRandom access
1 (without topology)V1_read_next_line_pg()V1_read_line_pg()
2 (with pseudo-topology/topology)V2_read_next_line_pg()V2_read_line_pg()

Overview of subroutines to write PostGIS data:

LevelWrite new featureDelete existing featureRewrite existing feature
1 (without topology)V1_write_line_pg()V1_rewrite_line_pg()V1_delete_line_pg()
2 (with pseudo-topology - simple feature access)V2_write_line_sfa()V2_rewrite_line_sfa()V2_delete_line_sfa()
2 (with topology - PostGIS Topology)V2_write_line_pg()

By default data are read/write as simple features. If PostGIS Topology schema is defined then the data provider reads/writes topological elements from provided schema.

Note that direct access like for GRASS-OGR data provider is not currently implemented. In other words to access PostGIS data (using GRASS-PostGIS data provider) is required to create a link using v.external command.

Simple features access

GRASS-PostGIS provider allows to read and write PostGIS data stored as simple features on level 1 (without topology) and also on level 2 (in this case a pseudo-topology is built over simple features).

Note: To force GRASS to use GRASS-OGR data provider when accessing/creating PostGIS must be specified environmental variable GRASS_VECTOR_OGR (before creating a link).

Export GRASS vector data to PostGIS as simple features:

v.out.postgis input=urbanarea dsn=PG:dbname=grass

Read example:

# create a link to PostGIS table
v.external dsn=PG:dbname=grass layer=urbanarea
# access data as normal vector map in GRASS
v.info map=urbanarea
...
|----------------------------------------------------------------------------|
 | Map format:      PostGIS (PostgreSQL)                                      |
 | DB table:        public.urbanarea                                          |
 | DB name:         grass                                                     |
 | Geometry column: geom                                                      |
 | Feature type:    polygon                                                   |
 | Topology:        pseudo (simple features)                                  |
 |----------------------------------------------------------------------------|
...

Write example:

# define output vector format
v.external.out dsn=PG:dbname=grass format=PostgreSQL
# create random points map
v.random out=test_points n=1000
# access created external data
v.info test_points
...
 |----------------------------------------------------------------------------|
 | Map format:      PostGIS (PostgreSQL)                                      |
 | DB table:        public.test_points                                        |
 | DB name:         grass                                                     |
 | Geometry column: geom                                                      |
 | Feature type:    point                                                     |
 | Topology:        pseudo (simple features)                                  |
 |----------------------------------------------------------------------------|
...

For more examples see wiki page from GRASS Wiki.

Topological access

For more information see PostGIS Topology page.supports

Note: See TracWiki for help on using the wiki.