5.2. Área de Polígonos

A área de um polígono de n vértices pode ser computada a partir da seguinte equação [40]:

A=|(x1y2y1x2)+(x2y3y2x3)+...+(xny1ynx1)2|
A=12|i=0n1(xiyi+1yixi+1)|,xn=x0 e yn=y0

Na equação acima, o sinal do numerador fornece a orientação dos vértices do polígono:

  • anti-horário (counterclockwise): se i=0n1(xiyi+1yixi+1)>0.

  • horário (clockwise): se i=0n1(xiyi+1yixi+1)<0.

Como todos os vértices do polígono precisam ser processados, a computação da área de um polígono é um algoritmo O(n), onde n representa o número de vértices.

5.2.1. Calculando Área de Polígonos no PostGIS

No PostGIS a operação de cálculo de área é materializada na função ST_Area. No caso do tipo geometry, essa área é calculada na unidade do dado. Por exemplo, na tabela uf teríamos os seguintes valores de área para os limites de cada estado:

SELECT gid, nome, ST_Area(geom) AS area FROM uf LIMIT 3;

Saída:

 gid |      nome      |        area
-----+----------------+--------------------
   1 | SERGIPE        | 1.8114398618016752
   2 | MARANHÃO       |   26.8975470041238
   3 | ESPÍRITO SANTO | 3.9672558333953507
(3 rows)

Como os dados da coluna geométrica encontram-se no sistema de referência espacial Lat/Long SIRGAS 2000 (SRID 4674), os valores são computados em graus. Para computar a área em km2, podemos transformar as geometrias do SRID 4674 (Lat/Long SIRGAS 2000) para 6687 (Polyconic/SIRGAS 2000), cuja unidade é metros. Dessa forma, computando a área e dividindo por 1.000.000, teremos a área em km2:

SELECT gid, nome, ST_Area(ST_Transform(geom, 6687))/1000000.0 AS area_km2

  FROM uf

 LIMIT 3;

Saída:

 gid |      nome      |      area_km2
-----+----------------+--------------------
   1 | SERGIPE        | 22796.138351792095
   2 | MARANHÃO       | 370087.91462862893
   3 | ESPÍRITO SANTO |  48864.87960548856
(3 rows)

Se usarmos uma projeção que respeita a área, isto é, uma projeção equivalente ou eqüiárea, como a de SRID 102033 (Albers South America/ SAD 1969), teremos um resultado diferente do mostrado anteriormente:

SELECT gid, nome, ST_Area(ST_Transform(geom, 102033))/1000000.0 AS area_km2

  FROM uf

 LIMIT 3;

Saída:

 gid |      nome      |      area_km2
-----+----------------+--------------------
   1 | SERGIPE        |  21926.74180847111
   2 | MARANHÃO       | 329639.66019858315
   3 | ESPÍRITO SANTO |  46074.23638185314
(3 rows)

A seleção do sistema de referência espacial para computação de áreas e distâncias é fundamental. Em geral, recomenda-se que, para os cálculos de áreas seja utilizada a Projeção Equivalente de Albers, enquanto para os cálculos de extensões, a Projeção Policônica. No entanto, os parâmetros adequados a essas projeções podem não estar presentes como um SRID da distribuição do PostGIS. Por isso, consulte esses parâmetros no documento de recomendações do IBGE para a base cartográfica contínua do Brasil e, se necessário, crie um sistema de referência apropriado, registrando na tabela spatial_ref_sys.

Outra opção para calcular áreas sem realizar transformações direta, consiste em trabalhar com o tipo geography, cujo cálculo de área já retorna um valor em m2:

SELECT gid, nome, ST_Area(geom::geography)/1000000.0 AS area_km2

  FROM uf

 LIMIT 3;

Saída:

 gid |      nome      |      area_km2
-----+----------------+--------------------
   1 | SERGIPE        | 21926.910002579396
   2 | MARANHÃO       | 329642.21929018694
   3 | ESPÍRITO SANTO | 46074.448407253425
(3 rows)

5.2.2. Orientação do Anel de um Polígono

Os operadores ST_IsPolygonCCW e ST_IsPolygonCW testam a orientação do anel externo do polígono.

Esses operadores são implementadas com base na equação mostrada no início dessa seção.