Como importar uma varredura para o PostGIS?


8

Estou tentando seguir as instruções aqui para carregar uma varredura em um banco de dados PostGIS:

python raster2pgsql.py -s 4269 -I -r *.tif -F myschema.demelevation -o elev.sql

Entendo que substituo *pelo caminho da minha varredura, mas não entendo a parte myschema.demelevationou elev.sql. Devo ter meu próprio esquema para este arquivo? E o que a elev.sqlparte significa?

Também li o driver de varredura gdal PostGIS para tentar entender isso com mais exemplos. Da mesma forma, eles sugerem carregar uma varredurakatrina

python raster2pgsql.py -r /path/to/katrina.tif -t katrina -l 1 -k 64x64 -o katrina.sql -s 4326 -I -M

Usando minha configuração atual, tentei carregar a katrinavarredura em:

    python2.6 ~/src/postgis-2.0.0SVN/raster/scripts/python/raster2pgsql.py -r ~/tmp/katrina.tif -t katrina -l 1 -k 64x64 -o katrina.sql -s 4326 -I -M

No entanto, eu recebi os seguintes erros:

Traceback (most recent call last):
  File "/home/src/postgis-2.0.0SVN/raster/scripts/python/raster2pgsql.py", line 34, in <module>
    from osgeo import gdal
  File "/home/lib/python2.6/GDAL-1.8.1-py2.6-linux-i686.egg/osgeo/__init__.py", line 21, in <module>
    _gdal = swig_import_helper()
  File "/home/lib/python2.6/GDAL-1.8.1-py2.6-linux-i686.egg/osgeo/__init__.py", line 17, in swig_import_helper
    _mod = imp.load_module('_gdal', fp, pathname, description)
ImportError: /home/lib/python2.6/GDAL-1.8.1-py2.6-linux-i686.egg/osgeo/_gdal.so: undefined symbol: GDALSetRasterUnitType

Eu não entendo completamente esses erros; quando eu compilei eu gdaldeveria ter especificado um argumento para GDALSetRasterUnitType?

De maneira mais geral, estou tendo dificuldade em entender por que não estou especificando o banco de dados no qual estou tentando carregar esses dados.


Depois de seguir o conselho de MerseViking, corri:

python /usr/lib/postgresql/8.4/bin/raster2pgsql.py -r /home/celenius/Downloads/katrina.tif -t katrina -l 1 -k 64x64 -o katrina.sql -s 4326 -I -M

que retornou a seguinte saída:

------------------------------------------------------------
 Summary of GDAL to PostGIS Raster processing:
------------------------------------------------------------
Number of processed raster files: 1 (/home/celenius/Downloads/katrina.tif)
List of generated tables (number of tiles):
1   katrina (256)

Então eu corri:

psql -d test -f katrina.sql - U postgres -W

que retornou o seguinte:

    addrastercolumn                                                                                                                                                                                        
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 public.katrina.rast srid:4326 pixel_types:{8BUI,8BUI,8BUI} out_db:false regular_blocking:true nodata_values:NULL scale_x:'0.029325513196481' scale_y:'-0.029325513196481' blocksize_x:'64' blocksize_y:'64' extent:POLYGON((-100.014662756598 9.98533724340176,-100.014662756598 40.0146627565982,-69.9853372434018 40.0146627565982,-69.9853372434018 9.98533724340176,-100.014662756598 9.98533724340176))
(1 row)

(END)

Esta mensagem e um cursor piscando aparecem na tela. Presumo que ele esteja carregando no banco de dados, mas não tenho certeza. O tifarquivo tem apenas 3 MB - presumi que não demoraria muito para carregar um arquivo desse tamanho, mas o cursor piscante já estava na tela por aproximadamente 1 hora. Isso travou ou eu só preciso esperar muito tempo? Eu tenho 4 GB de RAM e um processador duplo de 2,5 GHz.


Descobri que, se eu pressionar a tecla q, ele executa esse comando e insere os dados no banco de dados test. Esse é um comportamento normal e devo estar fazendo isso?
DJQ

Respostas:


3

Parece que há um erro de digitação nessa página; na linha:

python raster2pgsql.py -s 4269 -I -r *.tif -F myschema.demelevation -o elev.sql

O -Fparâmetro deve ser o -tque especifica o nome da tabela na qual os dados serão importados. A parte anterior a .é o nome do esquema opcional, se você desejar que sua tabela seja um esquema diferente de public. O -oparâmetro especifica o arquivo que é gerado pelo script Python. Este arquivo é a representação SQL da sua definição de tabela e os dados reais da varredura de origem, para que possa ficar bem grande. Depois que esse arquivo é gerado, você precisa executá-lo psql -d <db_name> -f elev.sqlpara preencher o banco de dados, após o qual ele pode ser excluído.

No entanto, o que me parece estranho é que você está ligando raster2pgsql.pydo diretório de origem do PostGIS 2.0 . Você realmente compilou (executando make) e instalou (executando make installcomo root) o PostGIS 2.0? Como ele deve estar no seu caminho, e o IIRC o instalador atualiza automaticamente sua PYTHON_PATHvariável de ambiente.

Quanto à falta GDALSetRasterUnitType, o que eu procuraria primeiro é que você não possui uma versão anterior das bibliotecas GDAL instalada pelo Python, em vez da 1.8.1. Experimente gdalinfo --version Este site pode lançar alguma luz sobre o seu problema.


Obrigado pelas sugestões - vou testá-lo. Estou bastante confuso sobre como chamar esse script. Eu corri makee make install, eu deveria estar ligando ./bin/raster2pgsql.py. Estou usando hospedagem compartilhada que não tem acesso root, mas posso instalar programas. Quando corro, gdalinfo --versioneu recebo GDAL 1.5.3, released 2008/09/09; qual é a versão do servidor; Eu instalei o GDAL 1.8.1, mas ele não está sendo captado por este comando.
DJQ
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.