6. Càrrega de ràster

Aquesta secció ofereix una visió general de com funciona la gestió de ràsters a Giswater i descriu els principals elements implicats en l’administració de dades ràster, així com els requisits i components necessaris per a la seva correcta integració i ús en diferents entorns de servidor, ja sigui Linux o Windows.

Les dues taules que actuen sobre el sistema són:

  • ext_raster_dem

  • ext_cat_raster

Aquestes ja estan creades, però ext_raster_dem ve sense restriccions. En el cas d’un esquema utils existent, s’emmagatzemen allà, però amb noms diferents:

  • raster_dem

  • cat_raster

La taula raster_dem es omple externament segons el procés explicat al punt 1. Si es tracta d’un esquema utils corporatiu, la taula de catàleg s’omple automàticament amb un trigger AFTER INSERT durant l’adquisició del ràster:

nom de fitxer (rastercat_id).

cur_user.

tstamp.

D’altra banda, per usar aquesta funcionalitat hi ha dues variables:

  • Sistema: admin_raster_dem (ha de ser TRUE).

  • Usuari:

    edit_insert_elevation_from_dem (must be TRUE).

    edit_update_elevation_from_dem (must be TRUE).

Nota

Els triggers de node/connec, tant en Insert com en Update, capturen automàticament el valor d’elevació. D’altra banda, la funció gw_fct_update_elevation_from_dem de la toolbox activa automàticament la captura de totes les cotes de la capa seleccionada.

1. Carregar ràster a la BD

Els conceptes clau a tenir en compte són:

1.1. Nom de fitxer:

Es recomana que el nom inclogui tanta informació com sigui possible sobre el ràster, ja que aportarà informació a la metataula ext_cat_raster sobre el seu tipus:

dg_dem_2019_u48 (proveïdor, tipus de ràster, any de les dades, full de mapa)

D’aquesta manera, en inserir el ràster també s’omple el catàleg de ràsters i conté informació detallada sobre ell.

1.2. Tipus de fitxer:

Si tots els ràsters DEM s’insereixen a la mateixa taula, han de ser iguals pel que fa al format per no trencar les restriccions de les columnes de la taula. En aquest sentit, en carregar el primer ràster cal crear les restriccions tal com es defineix al punt dos d’aquest document.

1.3. Ràster emmagatzemat dins o fora de la BD:

Atès que hi ha dos entorns de SO per a la màquina que allotja PostgreSQL, aquest procés es detalla per a cadascun dels dos entorns.

Una opció molt interessant per evitar carregar la base de dades i recarregar fitxers automàticament (només cal canviar el fitxer).

Avís

El procés es pot executar des del postgres local o des del postgres del servidor on volem inserir el ràster, sempre que hi tinguem accés mitjançant VPN o un altre mètode. És més fàcil en local.

Entorn Windows

  1. Comprovar que hi ha un executable raster2pgsql a la carpeta bin de PostgreSQL.

2. Open the command prompt (cmd), go to the PostgreSQL bin folder (cd C:Program FilesPostgreSQL11bin).

3. Execute the process using a statement similar to the example shown below, specifying the SRID, the file path, the tile size, the name of the table to which the raster is imported, and the database connection:

raster2pgsql.exe -R -s 25831 -C -x raster.txt -t 1500x1500 -a utils.raster_dem -F -n rastercat_id |
psql -d giswater -U postgres -p 5432

Entorn Linux

El procediment pot variar segons la distribució utilitzada. No obstant això, com a regla general, la configuració de l’entorn ha de complir les condicions següents.

Atès que PostgreSQL sol estar instal·lat al path del sistema, l’execució per línia d’ordres es pot fer fàcilment:

raster2pgsql -s 25831 -C -x raster.txt -t 1500x1500 -a utils.raster_dem -F -n rastercat_id | psql -d giswater -U postgres -p 5432

Si per alguna raó les variables d’entorn estan deshabilitades, cal habilitar-les:

Opció A: fitxer d’entorn (amb un servei de recàrrega de PostgreSQL)

POSTGIS_ENABLE_OUTDB_RASTERS=1

POSTGIS_GDAL_ENABLED_DRIVERS=ENABLE_ALL

Opció B: a través de la consola (molt més fàcil)

SET postgis.enable_outdb_rasters TO True;

SET postgis.enabled_drivers TO enable_all;

Avís

Si es fa amb un usuari de PostgreSQL, aquest usuari ha de tenir permisos de lectura sobre el fitxer. Si es fa amb un altre usuari (p. ex., root), aquest usuari ha d’estar registrat a pg_hba.conf i al SGBD.

Notes sobre la sentència

[-R] -s 25831 -C -x raster.txt -t 1500x1500 -a utils.raster_dem -F -n rastercat_id | psql -d giswater -U postgres -p 5432

On:

[-R]

Pot ser opcional. El ràster s’emmagatzema fora de la base de dades. En cas contrari, s’emmagatzema dins. El problema és que no és fàcil treballar-hi. L’usuari del sistema i l’usuari de Postgres han de ser el mateix i tenir permisos de lectura/escriptura de fitxers. Aquesta opció és opcional, però pot ser essencial segons l’estratègia d’emmagatzematge triada.

Nota

Per usar aquesta opció, cal definir les variables d’entorn següents:

  • POSTGIS_ENABLE_OUTDB_RASTERS

  • POSTGIS_GDAL_ENABLED_DRIVERS=ENABLE_ALL

[-s 25831]

L’SRID és obligatori.

[-C]

Afegeix restriccions, necessàries només en carregar el primer ràster. Les restriccions que es creen són:

  • Alçada del ràster (nombre de files): enforce_height_rast

  • Amplada del ràster (nombre de columnes): enforce_width_rast

  • Valor no-data: enforce_nodata_values_rast

  • Nombre de bandes (per a DEM, 1): enforce_num_bands_rast

  • Tipus de píxel (1bit, 2bit, 4bit…): enforce_pixel_types_rast

  • Escala X: enforce_scalex_rast

  • Escala Y: enforce_scaley_rast

  • SRID: enforce_srid_rast

  • out_db (manteniment de la informació fora de la base de dades)

  • Extensió màxima: enforce_max_extent_rast

Avís

Tot i que és possible definir restriccions, no se’n recomana l’ús, ja que poden afectar el rendiment i la flexibilitat en carregar dades ràster.

[-x]

Exclou la restricció de dimensió espacial. És obligatori usar-la si l’objectiu és posar més d’un ràster a la mateixa taula (la qual cosa serà habitual).

Extensió màxima: enforce_max_extent_rast

[raster.txt]

Nom de fitxer. Sense espais, però amb metadades.

[-t 1500x1500]

Mida de cel·la a la base de dades.

Límits: 5000x5000. Superar aquesta mida provoca un error de memòria (Failed to allocate memory).

La mida recomanada no ha de superar 2000x2000 per fila.

Es crearà una taula nova a la base de dades (no es permeten actualitzacions) amb l’estructura definida. El procés divideix el ràster en parts segons la mida especificada; cada fila de la taula representa una part del ràster.

El punt clau és que la mida d’entrada (per exemple, 1500x1500) sigui un divisor de la mida del ràster. El divisor ideal és 1 a 1, però si el ràster supera 2000x2000, sempre s’ha de dividir usant divisors exactes.

Exemples:

Raster 1000x1000 → -t 1001x1001 → 1 row

Raster 1000x1000 → -t 1000x1000 → 4 rows

Raster 2000x2000 → -t 2001x2001 → 1 rows

Raster 2200x2200 → -t 1100x1100 → 4 rows

Raster 5555x5555 → -t 1111x1111 → 16 rows

[-a utils.raster_dem]

Afegeix el ràster a la taula, obligatori; altrament, en crearia una de nova, provocant un conflicte.

[-F]

Afegeix el nom del fitxer, obligatori i important per conèixer el nom del fitxer.

[-n rastercat_id]

Per al nom de la columna on s’inserirà el nom del fitxer. Obligatori.

[-d giswater -U postgres -p 5432]

Paràmetres de connexió: si es fa amb un usuari de PostgreSQL, és directe. Si es fa amb un altre usuari, demanarà la contrasenya, que també es pot proporcionar.

Consultes d’exemple per carregar ràsters directament des de la línia d’ordres a localhost:

  • Inserim a l’host 000.000.00:5432 amb l’usuari ‘admin’ i inserim directament en una taula existent ‘utils.raster_dem’ (variable -a):

"C:\Program Files\PostgreSQL\9.6\bin\raster2pgsql.exe" "C:\Users\usuari\Desktop\
raster.tif" -I -C -x -a -s 25831 -t 1500x1500 -F -n rastercat_id utils.raster_dem | "C:\
Program Files\PostgreSQL\9.6\bin\psql.exe" -h 000.000.00 -p 5432 -d gis -U admin
  • Inserim a l’host 000.000.00:5432 amb l’usuari ‘admin’ i inserim en una taula nova que s’anomenarà ‘ws.raster’ (variable -c):

"C:\Program Files\PostgreSQL\11\bin\raster2pgsql.exe" "C:\Users\usuari\Desktop\mde\
mde.tif" -I -C -x -c -s 25831 -t 1500x1500 -F -n rastercat_id ws.raster | "C:\Program Files\
PostgreSQL\11\bin\psql.exe" -h 000.000.00 -p 5432 -d gis -U admin