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]:
Na equação acima, o sinal do numerador fornece a orientação dos vértices do polígono:
anti-horário (counterclockwise): se \(\sum_{i=0}^{n-1}(x_iy_{i+1} - y_ix_{i+1}) > 0\).
horário (clockwise): se \(\sum_{i=0}^{n-1}(x_iy_{i+1} - y_ix_{i+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 \(km^2\), 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 \(km^2\):
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 \(m^2\):
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.