Estou tentando descobrir como carregar uma varredura em um banco de dados PostGIS2.0 (eu fiz perguntas anteriores sobre este tópico aqui e aqui ). Estou tentando usar o raster2pgsql.exe
programa fornecido com o PostGIS2.0.
Depois de descobrir que o prompt de comando no Windows precisa ser executado como administrador (no Windows 7, para executar a linha de comando como administrador, digite cmd
na barra de pesquisa e pressione ctrl
+ shift
+ enter
) para ativar raster2pgsql.exe
a função. carregar uma varredura no meu banco de dados. Eu tenho um arquivo raster chamado ras_test.tif
que coloquei temporariamente na bin
pasta da minha postgresql
instalação. Usando o código a seguir, eu converto e carrego essa varredura:
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
Quando visualizo esta tabela no PostGIS, fica assim:
No entanto, não consegui visualizar isso no QGIS e não tenho certeza se o carreguei corretamente, pois parece não haver dados nesse arquivo. Parece que carreguei o nome do arquivo como uma varredura, em vez do conteúdo dos dados. Cometi erros óbvios que me impedem de carregar uma varredura no meu banco de dados?
A documentação do PostGIS fornece um exemplo de como carregar uma varredura, mas não entendo quais argumentos são opcionais e ainda não estou claro sobre o que devo usar se desejar usar o esquema padrão. Por exemplo, no exemplo a seguir da documentação:
raster2pgsql -s 4236 -I -C -M *.tif -F -t myschema.demelevation > elev.sql
psql -d gisdb -f elev.sql
Eu tenho que fornecer um SRID?
-s 4236
Os argumentos são
-I -C -M
todos opcionais?-t
parece ser o tamanho do bloco; Preciso especificar isso se não tiver um esquema personalizado?- Posso simplesmente deixar de fora
myschema.demelevation
?
EDIT: Incluí o resultado das sugestões abaixo:
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
Isso resulta em uma tabela com duas colunas rid
e rast
. rid
tem quatro valores, nad rast
não tem nenhum. Quando tento usar mais alguns argumentos:
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)
Eu recebo a seguinte saída. Isso resulta em uma nova tabela com a seguinte estrutura:
Suponho que essa não seja uma varredura carregada corretamente, pois não consigo visualizar os dados. Existem outras opções que posso tentar?
EDIT: Esta última tentativa funcionou, eu simplesmente não estava acessando o raster corretamente.