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.
Réponses:
SRID? -s 4236 (obligatoire)
Les arguments -I -C -M sont-ils tous facultatifs?
-C Appliquer les contraintes raster - srid, pixels etc. pour garantir que le raster est correctement enregistré dans la vue raster_columns. (obligatoire)
-M (analyse sous vide de la table raster.) Facultatif
-I (Créer un index GiST sur la colonne raster.) Facultatif mais recommandé
-t TILE_SIZE (Couper le raster en tuiles à insérer une par ligne de table. TILE_SIZE est exprimé en WIDTHxHEIGHT.)
myschema.demelevation
laisser de côté (oui)http://postgis.net/docs/using_raster_dataman.html#RT_Loading_Rasters
la source
Celenius,
Si vous n'utilisez pas l'
-t
option avec des dimensions de taille, votre fichier raster apparaîtra comme un seul enregistrement. Je viens de remarquer une erreur dans les documents, ce qui est probablement ce qui vous déroute. Je vais arranger ça. Le-t
doit toujours être suivi d'une largeur x hauteur.Si vous voulez qu'il soit fragmenté, par exemple en hauteur de largeur 100x100 pixels - comme le dit Mapperz - utilisez l'option -t.
Votre commande serait donc:
Jetez un oeil à l'exemple aérien dans les documents. http://www.postgis.org/documentation/manual-svn/using_raster.xml.html#RT_Raster_Loader
Quel est celui que beaucoup d'exemples manuels utilisent:
raster2pgsql -I -C -e -Y -F -s 26986 -t 128x128 -l 2,4 bostonaerials2008/*.jpg aerials.boston | psql -U postgres -d gisdb -h localhost -p 5432
Je sais que les commutateurs peuvent être un peu intimidants car ils sont nombreux et la plupart sont facultatifs. Peut-être qu'en 2.1, nous aurons une interface graphique similaire à la
shp2pgsql-gui
pour rendre cela un peu plus simple pour les débutants.Dans le dernier verson de
raster2pgsql
il est logique de déduire la srid de l'information géoréférencée dans le TIF ou tout autre fichier raster (cette version est disponible maintenant binaire fenêtre). Je n'ai pas encore essayé cette fonctionnalité, mais si cela fonctionne, vous pouvez même laisser de côté le srid et il devinera (si tout va bien correctement).la source
Dans la vue SQL, vous ne pouvez pas voir les données lorsqu'elles sont volumineuses. Vous pouvez exécuter la requête dans un fichier et il affichera les données.
la source