Working with external data in GRASS 7: Difference between revisions
m (→Vector data) |
|||
Line 18: | Line 18: | ||
=== Link external data === | === Link external data === | ||
External vector data can be linked via {{cmd|version=70|v.external}}. List of supported formats can be determined by | External vector data can be linked via {{cmd|version=70|v.external}} using [http://gdal.org/ogr OGR library] or GRASS-PostGIS data driver (<tt>format=PostGIS</tt>). List of supported formats can be determined by | ||
{{cmd|v.external|version=70}} -f | {{cmd|v.external|version=70}} -f | ||
To link file-based data formats, eg. [http://gdal.osgeo.org/ogr/drv_shapefile.html ESRI Shapefile] | To link ''file-based data formats'', eg. [http://gdal.osgeo.org/ogr/drv_shapefile.html ESRI Shapefile] using OGR library | ||
{{cmd|v.external|version=70}} dsn=ncshape/ layer=railroads | {{cmd|v.external|version=70}} dsn=ncshape/ layer=railroads | ||
Line 28: | Line 28: | ||
Assuming that <tt>railroads.shp</tt> is located in directory <tt>ncshape</tt>. | Assuming that <tt>railroads.shp</tt> is located in directory <tt>ncshape</tt>. | ||
To link database-based data formats, eg. [http://gdal.osgeo.org/ogr/drv_pg.html PostGIS] | To link ''database-based data formats'', eg. [http://gdal.osgeo.org/ogr/drv_pg.html PostGIS] using OGR library | ||
{{cmd|v.external|version=70}} dsn=PG:dbname=pgis_nc -l | {{cmd|v.external|version=70}} dsn=PG:dbname=pgis_nc -l | ||
Line 38: | Line 38: | ||
{{cmd|v.external|version=70}} dsn=PG:dbname=pgis_nc layer=bridges output=b | {{cmd|v.external|version=70}} dsn=PG:dbname=pgis_nc layer=bridges output=b | ||
Assuming PostGIS layer named <tt>bridges</tt> is located in database <tt>pgis_nc</tt>. This layer is linked to GRASS mapset as vector map with name <tt>b</tt>. | Assuming PostGIS layer named <tt>bridges</tt> is located in database <tt>pgis_nc</tt>. This layer is linked to GRASS mapset as vector map with name <tt>b</tt>. {{cmd|v.external|version=70}} also builds pseudo-topology over simple features which enables GRASS to access linked vector data on level 2. Note that data are stored as simple features, so no full topology support can be build based on this data. | ||
=== Direct access to external data === | === Direct access to external data === |
Revision as of 11:23, 21 March 2012
This page explains how to work with external data in GRASS 7. See also PostGIS.
Raster data
External raster data can be linked via r.external. List of supported formats can be determined by
r.external -f
To link file-based data formats, eg. GeoTiff
r.external input=ncrast/urban.tif output=urban
Vector data
See trac OGR interface and PG interface page for development issues.
Link external data
External vector data can be linked via v.external using OGR library or GRASS-PostGIS data driver (format=PostGIS). List of supported formats can be determined by
v.external -f
To link file-based data formats, eg. ESRI Shapefile using OGR library
v.external dsn=ncshape/ layer=railroads
Assuming that railroads.shp is located in directory ncshape.
To link database-based data formats, eg. PostGIS using OGR library
v.external dsn=PG:dbname=pgis_nc -l
Data source <PG:dbname=pgis_nc> (format 'PostgreSQL') contains 4 layers:
bridges
...
v.external dsn=PG:dbname=pgis_nc layer=bridges output=b
Assuming PostGIS layer named bridges is located in database pgis_nc. This layer is linked to GRASS mapset as vector map with name b. v.external also builds pseudo-topology over simple features which enables GRASS to access linked vector data on level 2. Note that data are stored as simple features, so no full topology support can be build based on this data.
Direct access to external data
External data can be accessed using OGR library via virtual mapset OGR.
v.info map=PG:dbname=pgis_nc@OGR layer=bridges
Create new OGR layers using GRASS modules
v.extract showcase
OGR driver in GRASS 7 also supports write access to the external data. Showcase bellow:
v.external dsn=PG:dbname=pgis_nc layer=bridges output=b
v.out.ascii input=b where="cat < 10" --q
375171.4992779|317756.72097616|1
374247.5192779|317487.13697616|2
380230.2292779|316900.97897616|3
379191.4162779|316419.09697616|4
388958.8222779|316332.04697616|5
375875.2662779|316319.89597616|6
376393.5282779|316155.96797616|7
380647.5282779|316022.61797616|8
376739.6982779|315970.62597616|9
v.external.out dsn=PG:dbname=pgis_nc format=PostgreSQL
v.extract input=b output=b_9 where="cat < 10"
v.external dsn=PG:dbname=pgis_nc -l
Data source <PG:dbname=pgis_nc> (format 'PostgreSQL') contains 5 layers:
b_9
bridges
...
Example of direct access to external data without creating a link
v.out.ascii input=PG:dbname=pgis_nc@OGR layer=b_9
375171.4992779|317756.72097616|1
374247.5192779|317487.13697616|2
380230.2292779|316900.97897616|3
379191.4162779|316419.09697616|4
388958.8222779|316332.04697616|5
375875.2662779|316319.89597616|6
376393.5282779|316155.96797616|7
380647.5282779|316022.61797616|8
376739.6982779|315970.62597616|9
Create new empty OGR layer
Check connection settings:
v.external.out -p
dsn: PG:dbname=pgis_nc
format: PostgreSQL
options: <none>
New OGR layer can be created using v.edit, note that you need to specify feature type for newly created OGR layer (point, line or area).
v.edit map=pmap tool=create type=point
Check created OGR layer (direct access):
v.info -t map=PG:dbname=pgis_nc@OGR layer=pmap
...
points=0
...
Check created OGR layer (link):
v.external dsn=PG:dbname=pgis_nc layer=pmap v.info -t map=pmap
Adding new point feature:
cat point.txt P 1 1 375171.4992779 317756.72097616 1 1
v.edit -n map=pmap tool=add input=point.txt v.info -t map=pmap ... points=1 ...
v.select speed test
Testing data:
- DBF input (attributes only)
g.mapset user1 db.connect -p driver:dbf database:$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/
g.copy vect=bridges,b --o g.copy vect=urbanarea,u --o
- SQLite input (attributes only)
g.mapset sqlite db.connect -p driver:sqlite database:$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite.db
g.copy vect=bridges,b --o g.copy vect=urbanarea,u --o
- PostGIS input (geometry + attributes)
g.mapset pg v.out.ogr input=bridges dsn=PG:dbname=pgis_nc format=PostgreSQL --o v.external dsn=PG:dbname=pgis_nc layer=bridges output=b --o v.out.ogr input=urbanarea dsn=PG:dbname=pgis_nc format=PostgreSQL --o v.external dsn=PG:dbname=pgis_nc layer=urbanarea output=u --o
Writing output directly using OGR library:
v.external.out -p
dsn: PG:dbname=pgis_nc
format: PostgreSQL
options: <none>
- DBF input
time v.select ain=b@user1 atype=point bin=u@user1 btype=area out=b_u ope=overlap --o
real 0m6.059s
user 0m4.780s
sys 0m0.588s
- SQLite input
time v.select ain=b@sqlite atype=point bin=u@sqlite btype=area out=b_u ope=overlap --o
real 0m2.239s
user 0m1.084s
sys 0m0.524s
- PostGIS input
time v.select ain=b atype=point bin=u btype=area out=b_u ope=overlap --o
real 0m20.609s
user 0m7.920s
sys 0m1.644s
Note: Main reason of worse speed is random access used by v.select which is quite costly for OGR layers.
Note also speed of process for native output:
real 0m1.631s user 0m0.860s sys 0m0.768s
Digitize OGR layer using wxGUI
Using wxGUI
From menu
File -> Link external formats
or from toolbar in Layer Manager.