16.1. Lesson: Configuração PostGIS

Configurando funções PostGIS lhe permitirá acessar as funções espaciais de dentro do PostgreSQL.

O objetivo desta lição: Instalar funções espaciais e demonstrar brevemente os seus efeitos.

Nota

Vamos assumir o uso de PostGIS versão 2.1 neste exercício. A instalação e configuração do banco de dados são diferentes para versões mais antigas, mas o resto deste material neste módulo continuará a funcionar. Consulte a documentação para a sua plataforma para ajudar com a instalação e configuração do banco de dados.

16.1.1. Instalando no Ubuntu

PostGIS é facilmente instalado a partir de apt.

$ sudo apt-get install postgis
$ sudo apt-get install postgresql-9.1-postgis

Realmente, não é assim tão fácil ...

Nota

Dependendo de qual versão do Ubuntu você está usando e quais repositórios você tiver configurado, esses comandos irão instalar o PostGIS 1.5 ou o 2.x. Você pode encontrar a versão instalada emitindo uma consulta select postgis_full_version(); com psql ou outra ferramenta.

Para instalar a versão mais recente do PostGIS, você pode usar os seguintes comandos:

$ sudo apt-add-repository ppa:sharpie/for-science
$ sudo apt-add-repository ppa:sharpie/postgis-nightly
$ sudo apt-get update
$ sudo apt-get install postgresql-9.1-postgis-nightly

16.1.2. Instalando no Windows

Instalar no Windows é um pouco mais complicado, mas não é difícil. Note que você precisa estar on-line para instalar o postgis.

Primeiro, visite a página de download.

Depois, siga este guia.

Mais informações sobre a instalação em Windows podem ser encontradas no website do PostGIS.

16.1.3. Instalando em outras plataformas

O site de download do PostGIS tem informações sobre a instalação em outras plataformas, incluindo MacOSX e em outras distribuições linux.

16.1.4. Configurando Bancos de Dados para usar PostGIS

Uma vez que o PostGIS esteja instalado, você precisará configurar seu banco de dados para usar as extensões. Se você tiver instalado o PostGIS versão > 2.0, bastará simplesmente emitir o seguinte comando, com o psql, utilizando o banco de dados “address” do nosso exercício anterior:

$ psql -d address -c "CREATE EXTENSION postgis;"

Nota

Se você estiver usando o PostGIS 1.5 e uma versão do PostgreSQL inferior a 9.1, você terá que seguir um conjunto diferente de medidas a fim de instalar as extensões PostGIS para o seu banco de dados. Por favor, consulte a Documentação do PostGIS para obter instruções sobre como fazer isso. Há também algumas instruções na versão anterior deste manual.

16.1.5. Olhando para as funções instaladas do PostGIS

O PostGIS pode ser visualizado como uma coleção de funções no banco de dados que ampliam as capacidades do núcleo do PostgreSQL para que ele possa lidar com dados espaciais. Por ‘lidar com’, queremos dizer armazenar, recuperar, consultar e manipular. A fim de fazer isso, um número de funções são instaladas no banco de dados.

Nosso banco de dados PostgreSQL address agora está geoespacialmente habilitado, graças ao PostGIS. Vamos nos aprofundar muito mais nisso nas próximas seções, mas vamos dar-lhe um pouquinho do gosto. Vamos dizer que queremos criar um ponto a partir de um texto. Primeiro, use o comando psql para encontrar funções relacionadas a ponto. Se você ainda não estiver conectado ao banco de dados address, faça isso agora. Em seguida, execute:

\df *point*

Este é o comando que estamos procurando: st_pointfromtext. Para percorrer a lista, use a seta para baixo, em seguida, pressione q para sair e voltar ao shell do psql.

Tente executar este comando:

select st_pointfromtext('POINT(1 1)');

Resultados:

st_pointfromtext
--------------------------------------------
0101000000000000000000F03F000000000000F03F
(1 row)

Três coisas a serem observadas:

  • nós definimos um ponto na posição 1,1 (é assumido o EPSG:4326) usando POINT(1 1);

  • executamos uma instrução SQL, sem nenhuma tabela, apenas com dados inseridos no prompt do SQL;

  • o resultado não faz muito sentido.

O resultado está no formato OGC chamado ‘Well Known Binary’ (WKB). Nós veremos esse formato em detalhes na próxima seção.

Para obter os resultados como texto, podemos fazer uma verificação rápida através da lista de funções para uma que retorne texto:

\df *text

A função que estamos procurando agora é st_astext. Vamos combiná-la com a consulta anterior:

select st_astext(st_pointfromtext('POINT(1 1)'));

Resultados:

 st_astext
------------
  POINT(1 1)
  (1 row)

Aqui, entramos com a string POINT (1,1), transformada em um ponto usando ST_PointFromText (), e transformada de volta para um formato legível com :kbd:`ST_AsText () `, que nos deu de volta a nossa string original.

Um último exemplo antes de realmente entrarmos em detalhes de como usar o PostGIS:

select st_astext(st_buffer(st_pointfromtext('POINT(1 1)'),1.0));

O que isso faz? Ele cria um buffer de 1 grau em torno do nosso ponto e devolveu o resultado como texto.

16.1.6. Sistemas de referência espacial

Além das funções do PostGIS, a extensão contém uma coleção de definições de sistemas de referência espacial (SRS), tal como definido pelo European Petroleum Survey Group (EPSG). Estes são utilizados durante as operações, tais como conversões entre sistemas de coordenadas de referência (SCR).

Nós podemos inspecionar estas definições de SRS no nosso banco de dados, já que as mesmas são armazenadas em tabelas normais no banco.

Primeiro, vamos olhar para a estrutura da tabela, digitando o seguinte comando no prompt do psql:

\d spatial_ref_sys

O resultado deve ser esse:

Table "public.spatial_ref_sys"
   Column   |          Type           | Modifiers
 -----------+-------------------------+-----------
  srid      | integer                 | not null
  auth_name | character varying(256)  |
  auth_srid | integer                 |
  srtext    | character varying(2048) |
  proj4text | character varying(2048) |
  Indexes:
"spatial_ref_sys_pkey" PRIMARY KEY, btree (srid)

Você pode usar consultas SQL padrão (como aprendemos com nossas seções introdutórias), para visualizar e manipular essa tabela - embora não seja uma boa ideia atualizar ou excluir todos os registros, a menos que você saiba o que está fazendo.

Um SRID que pode lhe interessar é o EPSG: 4326 - o sistema de referência geográfico / lat lon que usa o elipsóide WGS 84. Vamos dar uma olhada nele:

select * from spatial_ref_sys where srid=4326;

Resultados:

srid      | 4326
auth_name | EPSG
auth_srid | 4326
srtext    | GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS
84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,
0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,
AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
proj4text | +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs

O srtext é a definição da projeção em WKT (você pode encontrá-la em arquivos .prj em uma coleção shapefile).

16.1.7. In Conclusion

Você agora tem funções PostGIS instaladas em sua cópia do PostgreSQL. Com isso, você vai ser capaz de fazer uso de extensas funções espaciais PostGIS.

16.1.8. What’s Next?

Em seguida, você vai aprender como características espaciais são representados em um banco de dados.