Version 48 (modified by cedric, 15 years ago) (diff) |
---|
Using GDAL - Geospatial Data Abstraction Library and rgdal
back to Recipes for EDA CookBook Eda
gdal
gdal url:http://www.gdal.org/
is a translator library for raster geospatial data formats that is released under an X/MIT style Open Source license by the Open Source Geospatial Foundation. As a library, it presents a single abstract data model to the calling application for all supported formats. It also comes with a variety of useful commandline utilities for data translation and processing.
Cédric => What I've found at this site is not really helpfull, it is only python and c++ code.
url:http://www.bostongis.com/?content_name=ogr_cheatsheet => Cedric: very good site !
url:http://trac.osgeo.org/gdal/ Cedric : not really usefull
Below we suppose that you have the Qgis tool installed, so your path is C:\OSGeo4W Qgis has gdal included. Gdal comes with two main tools (executable files), the files for gdal are in
C:\OSGeo4W\share\gdal
call >cmd
C:\OSGeo4W\bin\ogr2ogr
or
C:\OSGeo4W\bin\ogrinfo
Translating .mdb into shapes outside ESRI
C:\OSGeo4W\bin\ogr2ogr -f "ESRI Shapefile" C:\base\basesig\Czhyd.shp C:\base\basesig\Czhyd.mdb
Cedric : this one works but warning there should be no space in the path (ex : no "document and settings/"...)
Conversion from PostGIS to ESRI Shape
adapted from url: http://www.bostongis.com/?content_name=ogr_cheatsheet The pgsql2shp and shp2pgsql are usually the best tools for converting back and forth between PostGIS and ESRI for 2 main reasons.
- It has fewer idiosyncracies when converting data.
- It has a lot fewer dependencies so can fit on your floppy.
If you really want to use Ogr2Ogr for this kind of conversion, below is the standard way to do it
Here the example should export the table riversegments
Cedric
C:\OSGeo4W\bin\ogr2ogr -f "ESRI Shapefile" C:\base\basesig\essai.shp PG:"host=localhost user=postgres dbname=CCM password=postgres port=5433" "riversegments"
Celine (pwd to be precised)
C:\OSGeo4W\bin\ogr2ogr -f "ESRI Shapefile" C:\base\basesig\essai.shp PG:"host=localhost user=postgres dbname=CCM password=PWD" "riversegments"
Cedric : celui ci marche mais j'ai eu du mal, ne marche pas une deuxième fois si les shape sont déjà crées dans le répertoire
C:\OSGeo4W\bin\ogr2ogr -f "ESRI Shapefile" C:\base\basesig\essai PG:"host=localhost user=postgres dbname=CCM password=postgres port=5433" "riversegments"
Cedric : OK marche de nouveau
Selecting specific fields, sets of data and Geometry
Sometimes you have more than one geometry field in a table, and ESRI shape can only support one geometry field per shape. Also you may only want a subset of data. In these cases, you will need to select the geometry field to use. The most flexible way to do this is to use the -sql command which will take any sql statement.
C:\OSGeo4W\bin\ogr2ogr -f "ESRI Shapefile" C:\base\basesig\essai1 PG:"host=locahost user=postgres dbname=CCM password=postgres port=5433" -sql "SELECT gid, the_geom FROM riversegments"
Cedric : ne marche pas, j'obtiens un message du type Unable to open datasource with following drivers, celui là on l'a très très souvent, j'ai essayé plusieurs trucs je ne comprends pas, la requete marche dans pgadmin
One way in which ogr2ogr excels above using the pgsql2shp tool is that ogr2ogr can export multiple tables at once. This is pretty handy for sharing your postgis data with others who do not have a postgis database.
The code below will export all your postgis tables out into a folder called mydatadump in ESRI shape (shp) format.
C:\OSGeo4W\bin\ogr2ogr -f "ESRI Shapefile" essai2 PG:"host=locahost user=postgres dbname=CCM password=postgres port=5433"
Now most of the time you probably only want to output a subset of your postgis tables rather than all your tables. This code exports only the riversegments and rivernodes tables to a folder called c:/base/basesig/mydatadump in ESRI shapefile format
C:\OSGeo4W\bin\ogr2ogr -f "ESRI Shapefile" c:/base/basesig/mydatadump PG:"host=localhost user=postgres dbname=CCM password=postgres port=5433" riversegments rivernodes
Cedric Celui là marche même si il n'y a pas de guillemet"
Notes plus tard...
Dans Qgis, le Rgdal fait la même chose, mais je pense qu'il faut lancer le C:\OSGeo4W\bin\gdal16.bat pour mettre à niveau les classpath ...
Connecting PostGIS with R using Rgdal
The rddal is made of functions which point out to the c code functions of gdal, it seems to have been developped for intamap eu project which is also an R library and the most interesting page can be found at the following location url: http://wiki.intamap.org/index.php/PostGIS et bien sûr ça marche pas ...
A nice example script follows which I translated into the following code
library(rgdal) meuse = readOGR("PG:dbname=CCM", "riversegments")
but it doesn't work So after a quite long time spent in gdal, I can translate into the more complex dsn
require(rgdal) readOGR(dsn="PG:host=locahost user=postgres dbname=CCM password=postgres port=5433",layer="riversegments")
However the R invariably returns an absolutely not helpful code, and the same with R2.10 or R2.10.1
> require(rgdal) Le chargement a nécessité le package : rgdal Le chargement a nécessité le package : sp Geospatial Data Abstraction Library extensions to R successfully loaded Loaded GDAL runtime: GDAL 1.6.2, released 2009/07/31 Path to GDAL shared files: C:/Program Files/R/R-2.10.0/library/rgdal/gdal Loaded PROJ.4 runtime: Rel. 4.6.1, 21 August 2008 Path to PROJ.4 shared files: C:/Program Files/R/R-2.10.0/library/rgdal/proj Message d'avis : le package 'sp' a été compilé avec la version R 2.10.1 > readOGR(dsn="PG:host=localhost dbname=CCM user=postgres passwd=postgres port=5433",layer="riversegments") Erreur dans ogrInfo(dsn = dsn, layer = layer, input_field_name_encoding = input_field_name_encoding) : Cannot open file
Interestingly it is the pointer to ogrinfo() which fails so we will try this with ogrinfo (which is found at the same place than ogr2ogr
C:\OSGeo4W\bin\ogrinfo -f "PostgreSQL" PG:"host=locahost user=postgres dbname=CCM password=postgres port=5433"
which returns
C:\base\basesig>C:\OSGeo4W\bin\ogrinfo -f "PostgreSQL" PG:"host=locahost user=po stgres dbname=CCM password=postgres port=5433" Usage: ogrinfo [--help-general] [-ro] [-q] [-where restricted_where] [-spat xmin ymin xmax ymax] [-fid fid] [-sql statement] [-al] [-so] [--formats] datasource_name [layer [layer ...]]
There does not seem to be any problem and also nothing is returned ... The next example for writing
library(rgdal) writeOGR(meuse[1:10,], "PG:dbname=postgis", "meuse3", "PostgreSQL")
returns
Erreur dans writeOGR(meuse[1:10, ], "PG:dbname=postgis", "meuse3", "PostgreSQL") : No such driver: PostgreSQL
All examples which do not imply postgres work
logo <- system.file("pictures/logo.jpg", package="rgdal")[1] x <- new("GDALReadOnlyDataset", logo) x getDriverLongName(getDriver(x)) displayDataset(x) ogrDrivers() dsn <- system.file("vectors", package = "rgdal")[1] ogrInfo(dsn=dsn, layer="cities") cities <- readOGR(dsn=dsn, layer="cities") summary(cities) ogrInfo(dsn=dsn, layer="kiritimati_primary_roads") kiritimati_primary_roads <- readOGR(dsn=dsn, layer="kiritimati_primary_roads") summary(kiritimati_primary_roads) ogrInfo(dsn=dsn, layer="scot_BNG") scot_BNG <- readOGR(dsn=dsn, layer="scot_BNG") summary(scot_BNG) if ("GML" %in% ogrDrivers()$name) { dsn <- system.file("vectors/airports.gml", package = "rgdal")[1] airports <- try(readOGR(dsn=dsn, layer="airports")) if (class(airports) != "try-error") summary(airports) } dsn <- system.file("vectors/ps_cant_31.MIF", package = "rgdal")[1] ogrInfo(dsn=dsn, layer="ps_cant_31") ps_cant_31 <- readOGR(dsn=dsn, layer="ps_cant_31") summary(ps_cant_31) dsn <- system.file("vectors/Up.tab", package = "rgdal")[1] ogrInfo(dsn=dsn, layer="Up") Up <- readOGR(dsn=dsn, layer="Up") summary(Up) dsn <- system.file("vectors/test_trk2.gpx", package = "rgdal")[1] test_trk2 <- try(readOGR(dsn=dsn, layer="tracks")) if (class(test_trk2) != "try-error") summary(test_trk2) test_trk2pts <- try(readOGR(dsn=dsn, layer="track_points")) if (class(test_trk2pts) != "try-error") summary(test_trk2pts) dsn <- system.file("vectors", package = "rgdal")[1] ogrInfo(dsn=dsn, layer="trin_inca_pl03") birds <- readOGR(dsn=dsn, layer="trin_inca_pl03") summary(birds)
mmmh ... and PostgreSQL in not listed in ogrDrivers()
ogrDrivers()
> ogrDrivers() name write 1 AVCBin FALSE 2 AVCE00 FALSE 3 BNA TRUE 4 CSV TRUE 5 DGN TRUE 6 ESRI Shapefile TRUE 7 Geoconcept TRUE 8 GeoJSON TRUE 9 GML TRUE 10 GMT TRUE 11 GPX TRUE 12 KML TRUE 13 MapInfo File TRUE 14 Memory TRUE 15 REC FALSE 16 S57 TRUE 17 SDTS FALSE 18 TIGER TRUE 19 UK .NTF FALSE 20 VRT FALSE 21 XPlane FALSE
in url:http://cran.r-project.org/web/packages/rgdal/index.html rgdal.pdf read.ogr details we read :
"The drivers available will depend on the installation of GDAL/OGR, and can vary; the ogrDrivers()
function shows which are available, and which may be written (but all are assumed to be readable).
Note that stray files in data source directories (such as *.dbf) may lead to suprious errors that ac-
companying *.shp are missing.
"
After sending a mail to the R-Sig-Geo list, the answer is as follows (by Roger Bivand)
If you mean the Windows binary rgdal package, then the answer is in
file.show(system.file("README", package="rgdal")) file.show(system.file("README.windows", package="rgdal"))
The Windows binary package builds the minimal set of drivers, with only one external dependency (expat for reading GPX and KML). The file refered to describes how you might build rgdal from source, using FWTools or OSGEO4W as the provider of GDAL and its dependent DLLs. If you do try this out (look for the chunk beginning: "Initial notes for OSGeo4W"), and if:
source(system.file("OSGeo4W_test", package="rgdal"), echo=TRUE)
works, as well as PostGIS access, please let me know.
Installing FWTools is a convenient way to get started (but will be limited to the - extensive - range of drivers built into the binary package):
url:http://fwtools.maptools.org/
url:http://fwtools.maptools.org/windows-main.html
fwtools installations for windows are provided as a self contained installation executable. Just run it and follow the steps to install.
The installation will setup entries to launch an ffwtools shell and openev under an fwtools program group in the start / all programs menu.
the openev entry launch the openev application. the fwtools shell launchs a dos shell with the environment pre-initialized to use all the fwtools commands.
to use fwtools commands from other command shells just call the setfw.bat script in the fwtools install directory to setup the environment appropriately. by default the openev and fwtools shell icons on the desktop will start in the fwtools install directory but they can be safely changes to start in any user writable directory by editing the icon properties.
Setting the FWTools bin/ directory in the PATH environmental variable is
essential, (GDAL_DATA is set internally to the copy included in the rgdal
package).
cedric OK c'est dans panneau de configuration/systeme/variables d'environnement/path, on ajoute C:\Program Files\FWTools2.4.6\bin
The R Windows binary rgdal package can built against an FWTools Windows binary, using VC++.
Cédric j'installe le plugins eclipse cdt à l'aide du gestionnaire d'extensions d'éclipse http://download.eclipse.org/tools/cdt/releases/galileo http://www.microsoft.com/express/Downloads/#2008-Visual-CPP
################################################# Initial notes for OSGeo4W: RSB 090117-20 Run in OSGeo4W console, after setting: set OSGEO4W_BUILD=yes set GDAL_HOME=%OSGEO4W_ROOT% cd rgdal/src cedric ? cd C:\OSGeo4W\bin cl /MT /Ox /EHsc /D "WIN32" /c /I "C:/Program Files/R/R-2.10.1/include" /I C:/OSGeo4W/include /I "C:\Program Files\Microsoft Visual Studio 9.0\VC\include" /D OSGEO4W *.cpp cedric cl /MT /Ox /EHsc /D "WIN32" /c /I "C:/Program Files/R/R-2.10.1/include" /I C:/OSGeo4W/include /I C:\Rtools\MinGW\include /D OSGEO4W *.cpp link /dll /out:rgdal.dll /def:rgdal.def *.obj "C:\Program Files\R\R-2.8.1\bin\Rdll.lib" /libpath:"C:\Program Files\Microsoft Visual Studio 9.0\VC\lib" /libpath:"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib" /libpath:"C:\OSGeo4W\lib" gdal_i.lib proj_i.lib cd ../.. Set Makefile.win as below to all:!! R CMD INSTALL --build rgdal Post-installation, start R from the OSGeo4W console (command line). If you want to check that the OSGeo4W-aware rgdal is present, check the reported support file locations, and consider running: source(system.file("OSGeo4W_test", package="rgdal"), echo=TRUE) The initial version (0.6-6) is preliminary. ############################################################################### ## Building rgdal binary against FWTools binary using VC++ MDSumner 30 April 2007 Windows XP2, SP2, .NET 2.0 Rtools in C:/R/Rtools. Here I am using a source install of R 2.5.0 in C:/R/Rsrc/R-2.5.0 with a source install of sp 0.9-14, and binary install of FWTools 1.2.2 in C:/FWTools. gdalinfo --version GDAL 1.4.0.0, FWTools 1.2.2, released 2007/02/22 I have Visual C++ 2005, Express Edition. http://msdn.microsoft.com/vstudio/express/visualc/download/ Version 8.0.50727.42 (RTM.050727-4200) I obtain rgdal_0.5-9 source via CVS: cvs -d:pserver:anonymous@rgdal.cvs.sourceforge.net:/cvsroot/rgdal login cvs -z3 -d:pserver:anonymous@rgdal.cvs.sourceforge.net:/cvsroot/rgdal co -P rgdal [R]/bin, [FWTools]/bin and [Rtools]/bin (as per standard R windows) are all in the path. 1. Ensure you have Rdll.lib ## Build Rdll.lib and place in [R]\libs\ (see example below in link step, and see ## http://www.stats.uwo.ca/faculty/murdoch/software/compilingDLLs/readme.packages.t xt) ## [R]src\gnuwin32 make R.exp lib /def:R.exp /out:Rdll.lib 2. Ensure the configure.win, Makefile.win and RGDAL.def are all correct. ## set the location of GDAL_HOME in configure.win (mine is GDAL_HOME="C:/FWTools") ## Also change libgdal-1.dll to gdal_fw.dll in configure.win Specifically, mine looks like this: -//-- start configure.win #!/bin/sh if test -z "$GDAL_HOME" ; then GDAL_HOME="C:/FWTools" fi echo "GDAL_HOME=${GDAL_HOME}" > src/Makeconf.win echo "using GDAL_HOME: ${GDAL_HOME}" mkdir $DPKG/libs cp ${GDAL_HOME}/bin/gdal_fw.dll $DPKG/libs -//-- end configure.win ## [rgdal]/src ## - includes a Makefile.win with one line: all: ## - and RGDAL.def as supplied in rgdal/src Place Makefile.win in src/, containing a single line: all: ## run command window with VC++ (I can't see how else to include it in the path) ## First compile the C++ against R and FWTools include 3. Compile and link cl /MT /Ox /EHsc /D "WIN32" /c /I C:/R/Rsrc/R-2.5.0/include /I C:/FWTools/include *.cpp ## Then link the resulting files with R and gdal: ## (note that this includes all the present .obj files, and the gdal_ and proj_ libs from GDAL_HOME link /dll /out:rgdal.dll /def:rgdal.def *.obj C:\R\Rsrc\R-2.5.0\libs\Rdll.lib /libpath:"C:\FWTools\lib" gdal_i.lib proj_i.lib 4. Then build and install rgdal as normal. R CMD build --binary rgdal or (better) R CMD INSTALL --build rgdal to build a Windows binary package (zipfile) or R CMD INSTALL rgdal to install. This step will fail if src/Makefile.win is not in place. At this stage you will see errors if gdal_fw.dll (libgdal-1.dll) can't be found (I don't know the difference, it seems to work) R CMD INSTALL --library [path-to-[R]/library-of-choice] rgdal_[version#].tar.gz
...urlhttp://download.osgeo.org/fdo/3.4.1/binaries/
help for rgdal package
url:file:///C:/Program%20Files/R/R-2.10.0/library/rgdal/html/00Index.html
Céline : "J'ai recherché dans mes bouquin et sur le Applied Spatial Data Analysis with R de Roger Bivand dont tu peux retrouver (une partie) des codes sur ce site" : url:http://www.asdar-book.org/ Plus précisément sur cette page url:http://www.asdar-book.org/book/die.R ou à url:http://www.asdar-book.org/book/die_mod.R