Chargement d'un raster dans une base de données PostGIS 2.0 sous Windows

18

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.exeprogramme 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 cmddans la barre de recherche et appuyez sur ctrl+ shift+ enter) pour activer la raster2pgsql.exefonction 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.tifque j'ai placé temporairement dans le bindossier de mon postgresqlinstallation. 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:

entrez la description de l'image ici

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
  1. Dois-je fournir un SRID? -s 4236

  2. Les arguments sont-ils -I -C -Mtous facultatifs?

  3. -tsemble être de la taille des carreaux; Dois-je le spécifier si je n'ai pas de schéma personnalisé?

  4. 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 ridet rast. rida quatre valeurs, nad rastn'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:

entrez la description de l'image ici

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.

djq
la source
raster2pgsql fait référence à la référence postgis.org/documentation/manual-svn/…
Mapperz
J'ai essayé de charger le fichier raster (jpg) dans le post gis en utilisant la syntaxe fournie ici "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 "J'ai pu voir une table raster créée dans la base de données. C'était exactement comme montré par Celenius où vous ne voyez rien dans la colonne "raster raster" à moins que vous ne cliquiez sur une cellule particulière. Voici mon problème réel. Comment afficher la couche raster d'ArcGIS à l'aide de la couche de requête SQL. Lorsque j'ai essayé d'ajouter ce calque et de le valider, il dit "rast raster
GISTECH
Je pense que vous devriez poser cette question comme une nouvelle question car vous obtiendrez plus de réponses. Je ne sais pas comment vous pouvez vous connecter à l'aide d'ArcGIS mais vous pouvez utiliser QGIS pour y accéder.
djq
1
Remarque: pgAdminIII affiche une cellule vide pour les données au-delà d'une certaine taille; voir ticket # 297
Mike T
le querry ci-dessus fonctionne mais peut-on me dire comment stocker les valeurs de pixels / valeurs de cellules dans le tableau?

Réponses:

5

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

Mapperz
la source
Merci Mapperz, j'ai compris partiellement comment fonctionne raster2pgsql - cependant mon raster dans postgresql ne contient qu'une seule cellule, c'est pourquoi j'essaie de comprendre quels arguments utiliser.
djq
9

Celenius,

Si vous n'utilisez pas l' -toption 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 -tdoit 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:

raster2pgsql -s 102003  -t 100x100 ras_test.tif ras_test > elev.sql

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-guipour rendre cela un peu plus simple pour les débutants.

Dans le dernier verson de raster2pgsqlil 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).

LR1234567
la source
Merci pour les suggestions! Toujours pas en mesure de le faire fonctionner, mais commençant à mieux comprendre les commutateurs.
djq
Cela a fonctionné, mais je n'ai pas compris à quoi cela devrait ressembler dans la base de données. Merci encore pour votre aide.
djq
L'interface graphique pour le chargement des rasters dans pgsql est-elle enfin arrivée? :)
astrojuanlu
-2

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.

saurabh
la source
1
La (vieille) question d'origine a déjà une réponse acceptée et la vôtre n'est pas vraiment une solution alternative à la question, mais plutôt un appel à une inspection visuelle.
Courlis