2016-06-21 11 views
0

Ich habe eine PostgreSQL/PostGIS Tabelle mit 30 Zeilen (nur 3 dargestellt sind) und 3 Spalten wie folgt (raster ist ein PostGIS-Datentyp) - Es ist die EFSA CAPRI btw Datensatz, damit jemand fimilar wenn:Kann ich den PostGIS-Rasterdatentyp mit dem RPostgreSQL-Paket in R importieren?

enter image description here

// Kann ich importieren Sie die raster Datentyp von PostGIS in R mit Hilfe des RPostgreSQL-Paket (siehe Code unten) oder muss ich unweigerlich die rgdal-Paket verwenden, wie von @Jot eN ?

require(RPostgreSQL) 
drv <- dbDriver("PostgreSQL") 
con <- dbConnect(drv, dbname = "") 
dbGetquery(con, "SELECT rid, rast, filename FROM schema.capri") 

es ohne Transformation Importieren und St_AsText(rast) (die für den Geometriedatentyp PostGIS funktioniert) funktioniert nicht.

Antwort

1

Sie haben eine Antwort auf gis.stackexchange Seite - https://gis.stackexchange.com/a/118401/20955:

library('raster') 
library('rgdal') 

dsn="PG:dbname='plots' host=localhost user='test' password='test' port=5432 schema='gisdata' table='map' mode=2" 

ras <- readGDAL(dsn) # Get your file as SpatialGridDataFrame 
ras2 <- raster(ras,1) # Convert the first Band to Raster 
plot(ras2) 

Weitere Informationen hier gefunden werden konnte https://rpubs.com/dgolicher/6373

+0

Danke. Es funktioniert nicht mit dem RPostgreSQL-Paket? Ihr zweiter Link führt zu einer leeren Seite. – andrasz

+0

Seltsam - der zweite Link funktioniert für mich. Vielleicht versuchen Sie es erneut mit einem anderen Browser? –

+0

Kein zweiter Browser installiert. Ich benutze Firefox 46.0.1 auf Linux Mint. Ohne '/ 6373' komme ich auf die Website. Seltsamerweise - Alle Artikel führen zu leeren Seiten für mich. – andrasz

1

Wenn dies noch relevant ist, an der University of Florida, David Bucklin und ich haben ein rpostgis Paket veröffentlicht, das eine bidirektionale Übertragung zwischen PostGIS und R für Vektor- und Rasterdaten bietet. Das Paket basiert nicht auf GDAL (und rgdal) und sollte plattformunabhängig sein.

Unter der Annahme, dass man bereits eine funktionelle Verbindung hat con durch RPostgreSQL etabliert, können Sie PostGIS Rasterdatentyp in R mit der Funktion pgGetRast zum Beispiel importieren:

library(rpostgis) 
my_raster <- pgGetRast(con, c("schema", "raster_table")) 

Die Funktion geht davon aus, dass die Rasterplatten gespeichert sind, in der Spalte "rast" standardmäßig (wie es für Sie der Fall ist), aber Sie können das mit dem Argument rast ändern. Nun, abhängig von der Größe und anderen Überlegungen, kann dies deutlich langsamer sein (aber viel flexibler) als mit rgdal. Wir arbeiten immer noch daran, aber das sind die Kosten für die Bereitstellung einer "reinen R" -Lösung. Sie können auch das Argument boundary verwenden, wenn Sie nur an einer Teilmenge des gesamten Rasters interessiert sind (wodurch die Ladezeit erheblich verlängert wird).

Beachten Sie auch, dass es pgGetGeom für Punkte/Linien/Polygone gibt, anstatt St_AsText zu verwenden.