5.3. Centróides e Pontos dentro Superfície
5.3.1. Centróide
O operador ST_Centroid
computa o centróide de uma geometria, isto é, o seu centro de massa. No caso de conjuntos de pontos (MultiPoint
), o centróide é calculado como sendo a média aritmética das coordenadas desses pontos. No caso de conjuntos de linhas (MultiLineString
), o centróide é calculado como a média ponderada pelo comprimento dos segmentos das linhas. No caso de polígonos (Polygon
ou MultiPolygon
), a computação do centróide é feita através de uma fórmula que considera a área do polígono:
onde, \(A\) corresponde a área com sinal do polígono (Seção 5.2), isto é:
Pelas fórmulas apresentadas, podemos concluir que o algoritmo para cálculo do centróide de um polígono é \(O(n)\), onde \(n\) corresponde ao número de vértices dos anéis do polígono.
Vamos ilustrar o uso da função ST_Centroid
para criação do centróide de três municípios da tabela municipios
(Seção 3.5.4):
CREATE TABLE municipio_centroide AS
SELECT gid, geocodigo, nome, ST_Centroid(geom)::geometry(point, 4674) AS geom
FROM municipios
WHERE geocodigo IN ( '1600303', '3107307', '3146107' );
As Figuras 5.1, 5.2 e 5.3 apresentam os centróides dos municípios de Macapá no Amapá (geocodigo = 1600303
), Bocaiúva (geocodigo = 3107307
) e Ouro Preto (geocodigo = 3146107
) em Minas Gerais. Repare que o centróide não necessariamente será um ponto localizado no interior do polígono, como mostrado nas Figuras 5.1 e 5.2.

Figura 5.1 - Centróide do município de Macapá no Amapá

Figura 5.2 - Centróide do município de Bocaiúva em Minas Gerais

Figura 5.3 - Centróide do município de Ouro Preto em Minas Gerais
5.3.2. Ponto sobre a Superfície
Enquanto a função ST_Centroid
pode computar um ponto que não seja localizado no interior do polígono de entrada, existe uma função chamada ST_PointOnSurface
que garante a geração de um ponto no interior do polígono de entrada. Vamos ilustrar o uso dessa função com os mesmos polígonos de municípios da seção anterior:
CREATE TABLE municipio_ponto_interior AS
SELECT gid, geocodigo, nome, ST_PointOnSurface(geom)::geometry(point, 4674) AS geom
FROM municipios
WHERE geocodigo IN ( '1600303', '3107307', '3146107' );
As Figuras 5.4, 5.5 e 5.6 apresentam em vermelho os centróides e em amarelo os pontos calculados pela função ST_PointOnSurface
para os municípios de Macapá no Amapá (geocodigo = 1600303
), Bocaiúva (geocodigo = 3107307
) e Ouro Preto (geocodigo = 3146107
) em Minas Gerais.

Figura 5.4 - ST_PointOnSurface
x ST_Centroid
para o polígono do município de Macapá

Figura 5.5 - ST_PointOnSurface
x ST_Centroid
para o polígono do município de Bocaiúva

Figura 5.6 - ST_PointOnSurface
x ST_Centroid
para o polígono do município de Ouro Preto