J'essaie de comprendre comment charger un raster dans une base de données PostGIS2.0 (j'ai posé des questions précédentes sur ce sujet ici et ici ). J'essaie d'utiliser le raster2pgsql.exe
programme fourni avec PostGIS2.0.
Après avoir compris que l'invite de commande dans Windows doit être exécutée en tant qu'administrateur (dans Windows 7 pour exécuter la ligne de commande en tant qu'administrateur, tapez cmd
dans la barre de recherche et appuyez sur ctrl
+ shift
+ enter
) pour activer la raster2pgsql.exe
fonction que j'ai en quelque sorte réussi à charger un raster dans ma base de données. J'ai un fichier raster appelé ras_test.tif
que j'ai placé temporairement dans le bin
dossier de mon postgresql
installation. En utilisant le code suivant, je convertis et charge ce raster:
C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -s 102003 ras_test.tif -t> elev.sql
Processing 1/1: ras_test.tif
C:\Program Files (x86)\PostgreSQL\9.1\bin>psql.exe -p 5434 -U postgres -d test2 -f elev.sql
BEGIN
psql:elev.sql:2: NOTICE: CREATE TABLE will create implicit sequence "-t_rid_seq" for serial column "-t.rid"
psql:elev.sql:2: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "-t_pkey" for table "-t"
CREATE TABLE
INSERT 0 1
COMMIT
Lorsque je consulte ce tableau dans PostGIS, il ressemble à ceci:
Cependant, je n'ai pas pu visualiser ceci dans QGIS, et je ne sais pas si je l'ai chargé correctement car il ne semble pas y avoir de données dans ce fichier. Il semble que j'ai chargé le nom de fichier en tant que raster, plutôt que le contenu des données. Ai-je fait des erreurs évidentes qui m'empêchent de charger un raster dans ma base de données?
La documentation PostGIS fournit un exemple de chargement d'un raster, mais je ne comprends pas quels arguments sont facultatifs et je ne sais toujours pas ce que je dois utiliser si je veux utiliser le schéma par défaut. Par exemple, dans l'exemple suivant de la documentation:
raster2pgsql -s 4236 -I -C -M *.tif -F -t myschema.demelevation > elev.sql
psql -d gisdb -f elev.sql
Dois-je fournir un SRID?
-s 4236
Les arguments sont-ils
-I -C -M
tous facultatifs?-t
semble être de la taille des carreaux; Dois-je le spécifier si je n'ai pas de schéma personnalisé?- Puis-je simplement laisser de côté
myschema.demelevation
?
EDIT: J'ai inclus le résultat des suggestions ci-dessous:
C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -s 102003 -t 300x300 ras_test.tif ras_test | psql.exe -U postgres
-d raster_analysis -h localhost -p 5434
Processing 1/1: ras_test.tif
BEGIN
NOTICE: CREATE TABLE will create implicit sequence "ras_test_rid_seq" for serial column "ras_test.rid"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "ras_test_pkey" for table "ras_test"
CREATE TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
COMMIT
Il en résulte un tableau avec deux colonnes rid
et rast
. rid
a quatre valeurs, nad rast
n'en a aucune. Lorsque j'essaie d'utiliser d'autres arguments:
C:\Program Files (x86)\PostgreSQL\9.1\bin>raster2pgsql -I -C -e -Y -F -s 102003 -t 300x300 ras_test.tif ras_test1 | psql
.exe -U postgres -d raster_analysis -h localhost -p 5434
Processing 1/1: ras_test.tif
NOTICE: CREATE TABLE will create implicit sequence "ras_test1_rid_seq" for serial column "ras_test1.rid"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "ras_test1_pkey" for table "ras_test1"
CREATE TABLE
CREATE INDEX
ANALYZE
NOTICE: Adding SRID constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding scale-X constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding scale-Y constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding blocksize-X constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding blocksize-Y constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding alignment constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding number of bands constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding pixel type constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding nodata value constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Unable to add constraint "enforce_nodata_values_rast"
CONTEXT: PL/pgSQL function "_add_raster_constraint_nodata_values" line 40 at RETURN
PL/pgSQL function "addrasterconstraints" line 94 at assignment
PL/pgSQL function "addrasterconstraints" line 49 at RETURN
WARNING: Unable to add constraint: 'nodata_values'. Skipping
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
NOTICE: Adding maximum extent constraint
CONTEXT: PL/pgSQL function "addrasterconstraints" line 49 at RETURN
addrasterconstraints
----------------------
t
(1 row)
J'obtiens la sortie suivante. Il en résulte un nouveau tableau avec la structure suivante:
Je suppose que ce n'est pas un raster correctement chargé car je ne peux pas afficher les données. Y a-t-il d'autres options que je peux essayer?
EDIT: Cette dernière tentative a fonctionné, je n'accédais pas correctement au raster.