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

We will assume the use of PostGIS version 2.1 or newer in this exercise. The installation and database configuration are different for older versions, but the rest of this material in this module will still work. Consult the documentation for your platform for help with installation and database configuration.

16.1.1. Instalando no Ubuntu

PostGIS é facilmente instalado a partir de apt.

$ sudo apt install postgresql
$ sudo apt install postgis

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

Nota

The exact versions that will be installed depend on which version of Ubuntu you are using and which repositories you have configured. After installing you can check the version by issuing a select PostGIS_full_version(); query with psql or another tool.

To install a specific version (eg, PostgreSQL version 13 and PostGIS 3), you can use the following commands.

$ 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

Installing on Windows can be done from binary packages using a normal Windows installation dialogs.

First Visit the download page. Then follow this guide.

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

16.1.3. Instalando em outras plataformas

The PostGIS website download has information about installing on other platforms including macOS and on other Linux distributions

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

Depending on your version, you could find more instructions on how to spatially enable a database at 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 endereço 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 endereço, 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 (é 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 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 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, 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 características espaciais são representados em um banco de dados.