4 Almacenar información desde R
En primer lugar debemos definir una conexión con la BD en el SGBD PostGIS. Después, almacenar las capas. Por último, debemos cerrar la conexión.
4.1 Definir la conexión con la BD
Para definir la conexión usamos la función dbConnect
del paquete DBI
, también incluida en el paquete RPostgres
que es el que usamos. Indicamos el nombre de la BD (en mi caso lanjaron_jsamos
, que tenemos que haberla creado previamente), y los datos de nuestra instalación.
Si queremos comprobar que se ha establecido bien la conexión, mediante la función dbListTables
obtenemos una lista de las tablas de la BD.
4.2 Almacenar una capa vectorial
Para almacenar una capa vectorial en PostGIS desde R también usaremos la función st_write
del paquete sf
, tal y como se ha hecho para los otros SGBD. La diferencia es que ahora indicamos la conexión (con
) en lugar del archivo.
4.2.1 Copiar estilos de CORINE Land Cover
Una vez tengamos las capas de CORINE Land Cover almacenadas en la BD y tenemos la conexión (con
), podemos copiar los estilos desde el GeoPackage mediante la función siguiente:
from <- "clc-lanjaron-jsamos.gpkg"
layers <- c("clc_lanjaron_bbox_jsamos", "clc_lanjaron_jsamos")
database <- "lanjaron_jsamos"
sigugr::copy_styles(from=from, to=con, database = database, to_layers = layers)
Como en la BD hay más capas, debemos indicar el nombre de las capas a las que aplicar los estilos.
4.3 Almacenar un ráster
Para almacenar las capas ráster, usaremos las funciones del paquete rpostgis
para escribir en la BD y las funciones del paquete raster
para leer las capas.
En la función pgWriteRast
indicamos mediante un vector el esquema de la BD donde se almacena (las almacenaremos en el esquema public
) y la tabla. Esta función no permite usar el carácter ‘-’ en el nombre de las tablas.
r <- terra::rast("mdt-lanjaron-bbox-jsamos.tif")
layer <- "mdt_lanjaron_bbox_jsamos"
rpostgis::pgWriteRast(con, c("public", layer), raster = r)
Esta función almacena todas las bandas del ráster en la misma tabla. Para la ortofotografía es adecuado almacenar todas las bandas en la misma tabla, pero no para las bandas de satélite.
4.3.1 Bandas de satélite
Para las bandas de satélite, vamos a almacenar cada banda en una tabla distinta. Podemos usar el código siguiente para acceder a las bandas almacenadas en un archivo.
file <- "sat-r30m-lanjaron-bbox-jsamos.tif"
sr <- terra::rast(file)
for (b in names(sr)) {
rb <- sr[[b]]
# ...
}
El nombre de la banda está en b
, el ráster con la banda a almacenar en rb
.
4.4 Finalizar la conexión con la BD
Una vez hemos acabado de operar con la BD, nos desconectamos de ella mediante la función dbDisconnect
.
4.5 Funciones de ayuda
En los GeoPackage y los archivos GeoTIFF, en el criterio de nombres que usamos, el separador era el carácter “-”. Para los nombres de tablas en la BD usamos como separador el carácter “_” (en algún caso no hay opción, no puede ser “-”). Mediante la función siguiente se sustituye un carácter por otro en una cadena de caracteres.
Para reconocer obtener el nombre de un archivo, sin considerar el path y la extensión, podemos usar la combinación de funciones siguiente.
Para obtener una subcadena a partir de una cadena, desde el principio y hasta el final, respectivamente.