Carregando uma varredura em um banco de dados PostGIS 2.0 no Windows


18

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.exeprograma 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 cmdna barra de pesquisa e pressione ctrl+ shift+ enter) para ativar raster2pgsql.exea função. carregar uma varredura no meu banco de dados. Eu tenho um arquivo raster chamado ras_test.tifque coloquei temporariamente na binpasta da minha postgresqlinstalaçã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:

insira a descrição da imagem aqui

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
  1. Eu tenho que fornecer um SRID? -s 4236

  2. Os argumentos são -I -C -Mtodos opcionais?

  3. -tparece ser o tamanho do bloco; Preciso especificar isso se não tiver um esquema personalizado?

  4. 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 ride rast. ridtem quatro valores, nad rastnã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:

insira a descrição da imagem aqui

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.


raster2pgsql se refere à referência postgis.org/documentation/manual-svn/…
Mapperz

Tentei carregar o arquivo raster (jpg) no post gis usando a sintaxe fornecida aqui "C: \ Arquivos de programas (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 análise de varredura -h localhost -p 5434 "Eu podia ver uma tabela de varredura criada no banco de dados. Foi como mostrado por Celenius, onde você não vê nada na coluna "rast raster", a menos que você clique em uma célula específica. Aqui está o meu problema real. Como visualizar a camada raster do ArcGIS usando a camada de consulta sql. Quando tentei adicionar essa camada e validá-la, ele diz "rast raster"
GISTECH

Acho que você deve fazer isso como uma nova pergunta, pois obterá mais respostas. Não sei como você pode se conectar usando o ArcGIS, mas você pode usar o QGIS para acessá-lo.
DJQ

1
Nota: pgAdminIII mostra uma célula em branco para dados além de um determinado tamanho; ver ticket # 297
Mike T

a consulta acima funciona, mas alguém pode me dizer como armazenar valores de pixel / célula na tabela?

Respostas:


5

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


Obrigado Mapperz, eu entendi parcialmente como o raster2pgsql funciona - no entanto, o meu raster no postgresql contém apenas uma célula e é por isso que estou tentando descobrir quais argumentos usar.
DJQ

9

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 -tsempre 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:

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

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-guipara tornar isso um pouco mais simples para iniciantes.

Na última versão de, raster2pgsqlhá 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).


Obrigado pelas sugestões! Ainda não é possível fazê-lo funcionar, mas começando a entender as opções um pouco melhor.
DJQ

Funcionou, mas não entendi como isso deveria parecer dentro do banco de dados. Obrigado novamente por sua ajuda.
DJQ

A GUI para carregar rasters no pgsql finalmente chegou? :)
astrojuanlu

-2

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.


1
A pergunta original (antiga) já tem uma resposta aceita e a sua não é realmente uma solução alternativa para a pergunta, mas um pedido de inspeção visual.
Curlew
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.