Como Importar Shapefiles para o PostGIS

Neste tutorial iremos tratar de uma situação comum durante os projetos de Geoprocessamento que envolvam banco de dados geográficos, em especial o PostGIS: A importação de arquivos do formato shapefile para a base de dados. No exemplo que daremos a seguir usaremos um dado geográfico vetorial que possui o mapa com o contorno de um bairro qualquer, e se chama “bairro”.

O QUE É O SHP2PGSQL

O Shp2pgSQL é um aplicativo executável que permite a conversão de arquivos shapefiles em arquivos escritos em SQL que podem ser importados diretamente no pgAdmin. O tutorial foi elaborado em 2008 e ainda utilizando a versão 8.1 do PostgreSQL (PostGIS 1.2), mas as informações continuam válidas para as versões posteriores.

Leia: 7 Motivos para Usar o PostGIS em seus Projetos

PREPARAÇÃO DOS DADOS PARA IMPORTAÇÃO

Devemos lembrar que, um arquivo shape é na verdade um arquivo composto de três outros que se complementam, suas extensões são: *.shp, *.shx e *.dbf. Cada um armazenando informações relevantes sobre a realidade que buscam representar. É importante que todos esses três arquivos estejam no mesmo diretório para que a importação se realize com sucesso. (Em nosso caso colocaremos tudo em “C:\Temp“).

 

Ao fazermos a instalação do PostgreSQL habilitando sua extensão espacial PostGIS, automaticamente, teremos na sub-pasta ‘bin’, dentro do diretório do programa um arquivo executável, chamado “shp2pgsql.exe”. Procure esse arquivo, e copie-o para a mesma pasta onde está o shapefile a ser importado. O caminho talvez seja semelhante a este: “C:\Arquivos de programas\PostgreSQL\8.1\bin“.

ATENÇÃO: Apenas para reforçar o que já foi dito acima: Todos os arquivos que compõem o shape e o arquivo “shp2pgsql.exe” devem impreterivelmente estar todos nos mesmo diretório!

CONVERSÃO DE ARQUIVOS SHAPEFILE PARA SQL

Vou procurar explicar desde bem o começo: Como acessar o prompt do DOS! Vá pelo menu Iniciar → Executar. Na tela abaixo, digite “cmd” e confirme em Ok.

Executar - cmd

Na tela seguinte o primeiro passo será ‘colocar’, por assim dizer, o prompt do DOS pra funcionar dentro do diretório onde estão nossos arquivos. Faremos isso para que todos os comandos sejam realizados dentro desse diretório.

OBS: Tenha bem em mente que as telas do prompt do DOS podem possuir pequenas variações de computador para computador, e que embora estejamos usando neste exemplo um computador com sistema operacional Windows XP, as operações e comandos aqui usados também são válidos para diversas versões do sistema GNU/Linux. Sendo assim, as explicações abaixo podem ser úteis.

A figura abaixo mostra uma situação onde ainda não o colocamos no diretório desejado, ou seja, em nosso caso “C:\Temp“.

Prompt

Para mudar o diretório para o que queremos digite na seqüência do que aparece na tela acima e depois dê um ‘ENTER’:

  • CD C:\Temp – Perceba que esse ‘CD’ que digitamos é o comando usado para mudar de diretório no prompt do DOS. Este comando também poderia ser digitado em minúsculas.

Prompt CD

Agora sim, estamos prontos para realizar os demais comandos dentro do diretório apropriado para nosso exemplo. Vamos digitar nessa ordem:

shp2pgSQL

Abaixo, seguem algumas explicações sobre o comando acima:

  • shp2pgsql.exe – À título de dica: Só é preciso digitar as letras iniciais e depoispressionar a tecla TAB. Isso fará com que a palavra se complete automaticamente, diminuindo a probabilidade de erro na digitação;
  • -s – Esse parâmetro corresponde à localização no Hemisfério Sul;
  • 4291 – Juntamente com o parâmetro anterior, fazem referência ao SRID -(Identificador do Sistema de Referência Espacial);
  • bairro.shp – É o nome ‘do arquivo’ shape que iremos importar (A dica que foi dada sobre a tecla TAB também é válida para o momento de digitar o nome do arquivo shapefile);
  • bairro – Nome da Tabela que será criada no banco de dados PostgreSQL/PostGIS. Lembre-se de colocar entre o nome da tabela e o nome do arquivo SQL um sinal “>” conforme mostrado na figura abaixo;
  • bairro.sql – É o nome do arquivo SQL que será criado no diretório onde estão nossos arquivos. Mais à frente, veremos como esse novo arquivo será usado.

OBS: Vale destacar que o SRID usado nesse exemplo equivale ao DATUM SAD69 e às coordenadas geográficas (Latitude/Longitude). Por exemplo, se fossemos usar o mesmo DATUM só que com coordenadas UTM para a zona 25S o código correspondente seria 29185, já para zona 24S seria 29184. Sugiro que procure fazer pesquisas mais à fundo para compreender melhor a utilização do SRID.

Não tendo ocorrido algum erro, receberemos uma mensagem de confirmação da criação do arquivo a ser importado para o PostGIS.

IMPORTANDO O ARQUIVO SQL PARA O POSTGIS

Para essa etapa final, abra o PostGreSQL/PostGIS. No nosso caso usaremos o PostGIS em sua versão 1.2. Selecione o banco para o qual deseja importar a nova tabela (em nosso caso, o banco se chama ‘cadastro’), em seguida clique no ícone usado para abrir a seção para uso de linguagem SQL.

 SQL

Na nova janela que será aberta, use o ícone “Open file” para abrir o arquivo SQL que está salvo no diretório onde o geramos. Quando o arquivo for aberto, clique no ícone “Execute Query” (Atalho: F5).

Open File - F5

Pronto! Realizando essa última operação de forma correta, dentro de poucos instantes, você receberá uma mensagem informando que a criação da tabela bairro, no banco cadastro, ocorreu com sucesso.

A próxima figura mostra a nova tabela, pronta para ser editada! Caso ela não apareça automaticamente no pgAdmin III, dê um refresh usando novamente a tecla de atalho F5.

Tables

Assim encerramos nossa explicação sobre como importar arquivos shapefile para o PostGIS. Mas ainda pode ser interessante fazer algo mais com esses dados nesse momento. Mostro abaixo a visualização dessa tabela no software Kosmo SIG. Hoje diversos desses softwares já se conectam com o PostGIS.

Kosmo com PostGIS

Espero que este tutorial como os demais já publicados possam servir para disseminação de conhecimento, o qual deve ser compartilhado. Faça o download deste material a partir do link abaixo:

  • [download id=”55″]

Você quer aprender mais sobre o PostgreSQL, seu módulo geográfico PostGIS e sua integração com diferentes programas de SIG? Então não deixe de ler as matérias abaixo:

Deixem seus comentários sobre este tutorial.

Assine nosso FeedAssine nosso Feed e receba nossas atualizações por e-mail. Curta nossa página no Facebook [PortalClickGeo] e siga nosso Twitter [@ClickGeo] para continuar atualizado sobre o Mundo das Geotecnologias.

11 Comments on “Como Importar Shapefiles para o PostGIS”

  1. Antônio José disse:

    São dicas muito boas, procurei bastante por ai e bem aqui encontrei realmente oque queria! Parabéns e muito obrigado!!

  2. Edson Fumio Kuwakino disse:

    Anderson, sou muito fã do seu excelente site.

    Para importação tenho usado o ‘Gerenciador DB’ do Quantum 2.01 com bastante sucesso. Na sequencia abro o shp no Qgis e uso o ‘Importar Camada’ do Gerenciador. Muito comum é ter de fazer uma “limpeza” na tabela depois. O caso mais comum é das entidades serem importadas como MULTILINESTRING ou MULTIPOLYGON o que nem sempre é prático.

    Grande abraço te desejando muitos sucessos

  3. Pessoal,
    Se vocês baixarem as últimas versões do POSTGIS, este já vem com um programa (com layout visual) para exportação de SHP para POSTGIS, com esse mesmo nome shp2pgsql-gui.exe .

    Com certeza economiza seu tempo, e terá exatamente essas opçõe de configuração que teremos de usar, tipo:

    Selecionar pasta no estilo BROWSE (PROCURAR no pc)
    Tipo de codificação: LATIN1, UTF-8, etc
    Conectar a qual servidor
    Nome da coluna de geometria,
    ETC

    Abraços,
    Felipe Pilleggi

    1. Obrigado pelo comentário Felipe. Realmente este tutorial é de uma versão bastante antiga do PostgreSQL/PostGIS.
      Abraço!

  4. Natal Henrique Cordeiro disse:

    Olá AroJunior, você já tentou converter a codificação dos seus arquivos pela função iconv no Linux? Pois a função iconv é usada junto com a função cat para a conversão, porém eu uso no Linux e no Windows deve ser diferente.

    # cat exemplo.sql|iconv -f LATIN1 -t UTF-8 -o exemplo_utf8.sql -> Converter codificação de arquivos.

  5. sim Anderson todos os arquivos *.shp, *.shx e *.dbf estão na mesma pasta c:/temp
    dei uma olhada no link encaminhado, mas o meu DOS não está reconhecendo o comando iconv

  6. Anderson na hora da conversão estou obtendo a seguinte mensagem

    bairro.shp:shape(.shp) or index files (.shx) can not be opened, will just import attribute data. Unable to convert data value to “UTF-8”. Try “LATIN1” (Western European), or one of the values described at http://www.postgresql.org/docs/current/static/multibyte.html

    e está gerando um sql que ao importa-lo no postgres, não está incluindo a tabela.

    SET CLIENT_ENCODING TO UTF8;
    SET STANDARD_CONFORMING_STRINGS TO ON;
    BEGIN;
    CREATE TABLE “bairro” (gid serial PRIMARY KEY,
    “id” varchar(12),
    “tp_bairro” varchar(5),
    “nm_bairro” varchar(80),
    “x_pos” float8,
    “y_pos” float8,
    “cd_err” int2,
    “nm” varchar(80),
    “ql_bairro” varchar(80),
    “x_coord” numeric,
    “y_coord” numeric,
    “area” float8,
    “perimeter” float8);

    pode me ajudar?

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *