Bazy danychGISProjekt RTele-FotoUAV

RPostGIS – działamy z rastrami

We wcześniejszym poście zaprezentowaliśmy Wam jak używać biblioteki rpostgis do wczytywania i zapisu danych wektorowych do bazy PostgreSQL/PostGIS. Biblioteka ta pozwala również archiwizować dane rastrowe w bazie. Najpierw wczytajmy bibliotekę:

library(rpostgis)

Do ćwiczenia wykorzystamy Numeryczny Model Terenu wygenerowany w poprzednim poście. Wczytajmy go:

library(raster)
dem = raster("d:/GIS_in_R/uav_dem.tif")

Zdefiniujmy połączenie do naszej bazy:

con = dbConnect(drv = "PostgreSQL",user = "postgres", password = "postgres", host = "localhost", port = 5432, dbname = "postgres")

Przed przystąpieniem do dalszych działań musimy sprawdzić czy nasza baza ma zainstalowane rozszerzenie postgis_raster. Jeżeli nie, możemy z poziomu bazy inicjować rozszerzenie zapytaniem SQL:

CREATE EXTENSION postgis_raster;

Z poziomu R możemy użyć polecenia dbSendQuery z biblioteki RPostgreSQL do wysyłania zapytań:

library(RPostgreSQL)
dbSendQuery(con,"CREATE EXTENSION postgis_raster;")

W przypadku, gdy rozszerzenie istnieje funkcja dbSendQuery zwróci błąd. Można to wykorzystać do sprawdzenia czy rozszerzenie już zostało dodane do naszej bazy.

Raster do bazy zapisujemy z użyciem funkcji pgWriteRaster definiując połączenie do bazy (conn), nazwę tabeli (name) i wgrywany raster (raster):

pgWriteRast(conn = con,name = c("public","dem"),raster = dem)

Raster z bazy wczytujemy używając funkcji pgGetRaster podając połączenie do bazy (conn), nazwę tabeli (name), geometrię dla której zakresu ma zostać wczytany fragment rastra (boundary) :

dem_db = pgGetRast(conn = con,name = c("public","dem"),boundary = square)

Nasz pobrany raster wygląda tak:

plot(dem_db)