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ę:
1 |
library(rpostgis) |
Do ćwiczenia wykorzystamy Numeryczny Model Terenu wygenerowany w poprzednim poście. Wczytajmy go:
1 2 |
library(raster) dem = raster("d:/GIS_in_R/uav_dem.tif") |
Zdefiniujmy połączenie do naszej bazy:
1 |
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:
1 |
CREATE EXTENSION postgis_raster; |
Z poziomu R możemy użyć polecenia dbSendQuery z biblioteki RPostgreSQL do wysyłania zapytań:
1 2 |
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):
1 |
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) :
1 |
dem_db = pgGetRast(conn = con,name = c("public","dem"),boundary = square) |
Nasz pobrany raster wygląda tak:
1 |
plot(dem_db) |
