Importante

Translation is a community effort you can join. This page is currently translated at 93.88%.

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 utilizar o PostGIS na versão 2.1 ou mais recente neste exercício. A instalação e configuração do banco de dados são diferentes para versões mais antigas, mas o material restante deste módulo irá funcionar. Consulte a documentação para ajuda da sobre instalação e configuração no seu sistema operacional.

16.1.1. Instalando no Ubuntu

PostGIS é facilmente instalado a partir do apt.

$ sudo apt install postgresql
$ sudo apt install postgis

Sério, é tão fácil assim …

Nota

A versão exata a ser instalada vai depender de qual versão do Ubuntu você está utilizando e quais repositórios você tem configurado. Após instalação você pode checar a versão executando a consulta select PostGIS_full_version(); no psql ou outra ferramenta.

Para instalar uma versão específica (ex,: PostgreSQL versão 13 e PostGIS 3), você pode usar os seguintes comandos.

$ sudo apt install wget ca-certificates
$ sudo lsb_release -a
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
$ sudo apt-get update
$ sudo apt install postgis postgresql-13-postgis-3

16.1.2. Instalando no Windows

Intalação no Windows pode ser feita a partir dos pacotes binários usando o instalador padrão do Windows.

Primeira visite a página de download. Em seguida, siga este guia.

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

16.1.3. Instalando em outras plataformas

A página de download do PostGIS tem informações sobre a instalação em outras plataformas incluindo macOS 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

Dependendo de sua versão, você pode encontrar mais instruções sobre como habilitar espacialmente um banco de dados em https://postgis.net/docs/postgis_administration.html#create_spatial_db.

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 address do PostgreSQL agora está ativado geoespacialmente, graças ao PostGIS. Iremos nos aprofundar muito nas próximas seções, mas vamos dar uma pequena amostra rápida. Digamos que queremos criar um ponto a partir do texto. Primeiro, usamos o comando psql para encontrar funções relacionadas ao ponto. Se você ainda não está conectado ao banco de dados address, faça isso agora. Então execute:

\df *point*

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

Tente executar este comando:

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

Resultado:

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

Três coisas a serem observadas:

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

  • Executamos uma instrução SQL, não em uma 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 recuperar os resultados como texto, podemos fazer uma varredura rápida na lista de funções em busca de algo que retorne texto:

\df *text

A consulta que estamos procurando agora é st_astext. Vamos combiná-lo com a consulta anterior:

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

Resultado:

 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 nos detalhes do uso do 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 referência de coordenada (SRC).

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, vejamos o esquema da tabela digitando o seguinte comando no prompt do psql:

\d spatial_ref_sys

O resultado deve ser este:

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 no qual você estar interessado é o EPSG: 4326 - o sistema de referência geográfica / lat lon usando o elipsóide WGS 84. Vamos dar uma olhada nisso:

select * from spatial_ref_sys where srid=4326;

Resultado:

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 feições espaciais são representados em um banco de dados.