[R-sig-Geo] PostGIS layer to R using OGR driver imports unwanted raster column as String
Vilem Ded
Ded.V at seznam.cz
Thu Dec 1 13:11:10 CET 2016
>Hey Vil,
>I know it doesn't answer the problem of using rgdal to load PostGIS layers
>(especially rasters), but have you tried to use rpostgis::pgGetRast to load
>rasters in R? Might not be the most computer efficient, but should get you
>there...
>
>Mathieu.
Thanks for ideas. I have already managed to load PostGIS layers with postGIStools::get_postgis_query() which gives me more flexibility. But I would really expect that rgdal can do it too.
>OK, what does ogr2ogr do in GDAL2? I do not have any experience of the driver you are using, so others will have to try to repicate - do you have a >reproducible case? What does rgdal::ogrListLayers() say?
>
>Roger
Ok, sorry, I will try to make it more reproducible.
PostgreSQL database: version psql (9.6.1, server 9.5.5)
Postgis full version gave me:
POSTGIS="2.2.2 r14797" GEOS="3.4.2-CAPI-1.8.2 r3921" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.10.1, released 2013/08/26" LIBXML="2.9.1" LIBJSON="0.11.99" (core procs from "2.2.1 r14555" need upgrade) RASTER (raster procs from "2.2.1 r14555" need upgrade)
I have noticed that there is GDAL version 1.10.1 and RASTER need upgrade.
Thus I have upgraded postgis from source.
now Postgis full version gives me:
POSTGIS="2.3.1 r15264" GEOS="3.6.0-CAPI-1.10.0 r0" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 2.1.2, released 2016/10/24" LIBXML="2.9.1" RASTER
SQL command \d table gives:
Table "macfish.laketable"
Column | Type | Modifiers
-------------------------+-------------------------+-----------
lt_lake | character varying(40) | not null
lt_elevation | double precision |
lt_depthrast | raster |
lt_mac_exclude | geometry(Polygon,32633) |
lt_shoreline_pol_smooth | geometry(Polygon,32633) |
lt_shoreline_pol_simple | geometry(Polygon,32633) |
lt_shoreline_pol | geometry(Polygon,32633) |
Spatial columns are listed in list got by sql command "select * from geometry_columns;"
raster has also SRID 32633 (checked with ST_SRID()) and raster column is listed in list got by sql command "select * from raster_columns ;" as :
r_table_catalog | r_table_schema | r_table_name | r_raster_column | srid | scale_x | scale_y | blocksize_x | blocksize_y | same_alignment | regular_blocking | num_bands | pixel_types | nodata_values | out_db | extent | spatial_index
macfishdb | macfish | laketable | lt_depthrast | 0 | | | | | f | f | | | | | | f
command
ogr2ogr -f "ESRI Shapefile" abc.shp PG:"dbname=DB host=HOST user=USER password=PSSWD port=5432" "SHEMA.TABLE(SPATIAL_COLUMN)"
gives me (as before) lines:
Warning 6: Normalized/laundered field name: 'lt_elevation' to 'lt_elevati'
Warning 6: Normalized/laundered field name: 'lt_elevation' to 'lt_elevati'
Warning 1: Value '01000001004CB551378E00F03F4CB551378E00F..... loooong string of hexadecimal values '
After that, abc.shp contains the proper shp file. But there is still column named 'lt_depthra' of length 256 chars. These are the same hexadecimal characters as in Warning 1 of ogr2ogr commad.
In R:
library(rgdal) gives me :
Loading required package: sp
rgdal: version: 1.2-4, (SVN revision 643)
Geospatial Data Abstraction Library extensions to R successfully loaded
Loaded GDAL runtime: GDAL 2.1.2, released 2016/10/24
Path to GDAL shared files: /usr/local/share/gdal
Loaded PROJ.4 runtime: Rel. 4.8.0, 6 March 2012, [PJ_VERSION: 480]
Path to PROJ.4 shared files: (autodetected)
Linking to sp version: 1.2-3
Command
rgdal::ogrListLayers(dns = "dbname=DB host=HOST user=USER password=PSSWD port=5432" )
gives me:
[1] "macfish.shoreline" "macfish.position_old" "macfish.laketable" "macfish.firstpos"
[5] "macfish.loggerspos"
attr(,"driver")
[1] "PostgreSQL"
attr(,"nlayers")
[1] 5
which is list of all tables (SHEMA.TABLE) in my database which contain one or more spatial columns.
R version 3.3.2 (2016-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 8 (jessie)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] rgdal_1.2-4 sp_1.2-3
loaded via a namespace (and not attached):
[1] tools_3.3.2 grid_3.3.2 lattice_0.20-33
command
gdal-config --version
gives me: 2.1.2
I hope its better description. I really dont know what to provide next. I will let it be for some time (too much work). As Mathieu suggested, I can solve that by other packages than rgdal.
Thank you for everything :)
________________________________________
Fra: Vilem Ded [Ded.V at seznam.cz]
Sendt: 30. november 2016 2:56
Til: Roger Bivand
Kopi: R-Sig_Geo"
Emne: Re: [R-sig-Geo] PostGIS layer to R using OGR driver imports unwanted raster column as String
Hi,
thx for idea. When rgdal is attached:
Loading required package: sp
rgdal: version: 1.1-10, (SVN revision 622)
Geospatial Data Abstraction Library extensions to R successfully loaded
Loaded GDAL runtime: GDAL 1.10.1, released 2013/08/26
Path to GDAL shared files: /usr/share/gdal/1.10
Loaded PROJ.4 runtime: Rel. 4.8.0, 6 March 2012, [PJ_VERSION: 480]
Path to PROJ.4 shared files: (autodetected)
Linking to sp version: 1.2-3
gdal-config --version really showed version 1, so I have installed gdal2 from source.
Now the rgdal attaching gives me:
Loading required package: sp
rgdal: version: 1.2-4, (SVN revision 643)
Geospatial Data Abstraction Library extensions to R successfully loaded
Loaded GDAL runtime: GDAL 2.1.2, released 2016/10/24
Path to GDAL shared files: /usr/local/share/gdal
Loaded PROJ.4 runtime: Rel. 4.8.0, 6 March 2012, [PJ_VERSION: 480]
Path to PROJ.4 shared files: (autodetected)
Linking to sp version: 1.2-3
readOGR throws an error when running the same command as before:
obj <- rgdal::readOGR(dsn="PG:dbname=DB host=HOST user=USER password=PSSWD port=5432", layer = "SCHEMA.TABLE(LAYER)")
Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv, :
Layer not found
And now ,as expected from error, function ogrInfo() works differently. It throws the same error and work only without specification of LAYER (e.g. layer = "SCHEMA.TABLE")
Some more ideas? Thank you.
---------- Původní zpráva ----------
Od: Roger Bivand
Komu: Roger Bivand , Vilem Ded , Help
R-Sig_Geo
Datum: 30. 11. 2016 12:53:32
Předmět: Re: [R-sig-Geo] PostGIS layer to R using OGR driver imports
unwanted raster column as String
Briefly, could you add a copy of the startup messages when rgdal is attached, and the version of gdal shown by gdal-config --version? Maybe gdal2 would do better if you are on gdal1?
Roger
Roger Bivand
Norwegian School of Economics
Bergen, Norway
Fra: Vilem Ded
Sendt: onsdag 30. november, 11.11
Emne: [R-sig-Geo] PostGIS layer to R using OGR driver imports unwanted raster column as String
Til: Help R-Sig_Geo
Hi, right to the point. I am trying to load spatial layer from postgis database to R: obj
More information about the R-sig-Geo
mailing list