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.
Respostas:
SRID? -s 4236 (obrigatório)
Os argumentos -I -C -M são todos opcionais?
-C Aplique restrições de varredura - srid, pixelsize etc. para garantir que a varredura seja corretamente registrada na exibição raster_columns. (requeridos)
-M (Analise a tabela raster a vácuo) opcional
-I (Crie um índice GiST na coluna raster.) Opcional, mas recomendado
-t TILE_SIZE (Corte a varredura em blocos para inserir um por linha da tabela. TILE_SIZE é expresso como WIDTHxHEIGHT.)
myschema.demelevation
deixar de fora (sim)http://postgis.net/docs/using_raster_dataman.html#RT_Loading_Rasters
fonte
Celenius,
Se você não usar o
-t
opção com dimensões de tamanho, seu arquivo raster entrará como um único registro. Acabei de notar um erro nos documentos que provavelmente é o que está confundindo você. Eu vou consertar isso. O-t
sempre deve ser seguido por uma largura x altura.Se você deseja dividi-lo, diga na altura da largura de 100x100 pixels - como diz o Mapperz - use a opção -t.
Portanto, seu comando seria:
Veja o exemplo aéreo nos documentos. http://www.postgis.org/documentation/manual-svn/using_raster.xml.html#RT_Raster_Loader
Qual é o exemplo usado por muitos dos manuais:
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
Eu sei que os switches podem ser um pouco assustadores porque são muitos e a maioria é opcional. Talvez em 2.1 tenhamos um gui semelhante ao
shp2pgsql-gui
para tornar isso um pouco mais simples para iniciantes.Na última versão de,
raster2pgsql
há lógica para inferir o srid das informações de georeferência no arquivo tif ou outro arquivo raster (esta versão está disponível como janela binária agora). Ainda não tentei esse recurso, mas se funcionar, você pode até deixar de fora o srid e ele irá adivinhar (espero que corretamente).fonte
Na visualização SQL, você não pode ver dados quando grandes. Você pode executar a consulta em um arquivo e ele mostrará os dados.
fonte