Tipos de Dados Espaciais
Pontos, linhas e polígonos em SQL.
Tipos de Dados Espaciais é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
O que são dados espaciais
Dados espaciais descrevem localizações, formas e áreas do mundo real. Diferentemente de um número ou uma cadeia de caracteres comum, um valor espacial contém significado geométrico — um ponto em um mapa, um trecho de estrada ou a fronteira de um país.
PostGIS é uma extensão do PostgreSQL que adiciona tipos e funções avançados para dados espaciais, transformando seu banco de dados em um sistema completo de informações geográficas (GIS).
-- Enable the PostGIS extension
CREATE EXTENSION IF NOT EXISTS postgis;O tipo GEOMETRY
O tipo espacial central do PostGIS é geometry. Ele armazena formas em um espaço de coordenadas plano (euclidiano). Ao criar uma coluna, você pode especificar um subtipo, como POINT, LINESTRING ou POLYGON, como restrição.
Especificar o SRID (ID de referência espacial) junto com o subtipo informa ao PostGIS qual sistema de coordenadas seus dados utilizam.
CREATE TABLE locations (
id SERIAL PRIMARY KEY,
name TEXT,
geom geometry(POINT, 4326)
);Inserindo um POINT
Um POINT representa uma única localização com coordenadas X (longitude) e Y (latitude). A função ST_GeomFromText converte uma cadeia de caracteres em Texto Bem Conhecido (WKT) em um valor de geometria.
O SRID 4326 é o sistema de coordenadas WGS 84 usado por dispositivos GPS em todo o mundo.
INSERT INTO locations (name, geom)
VALUES
('Eiffel Tower', ST_GeomFromText('POINT(2.2945 48.8584)', 4326)),
('Big Ben', ST_GeomFromText('POINT(-0.1246 51.5007)', 4326)),
('Colosseum', ST_GeomFromText('POINT(12.4922 41.8902)', 4326));
SELECT name, ST_AsText(geom) AS wkt FROM locations;O tipo LINESTRING
Uma LINESTRING é uma sequência ordenada de dois ou mais pontos conectados por segmentos retos. Ela é ideal para representar estradas, rios ou qualquer elemento linear.
Cada par de números no WKT representa um vértice (longitude latitude). O PostGIS armazena todo o caminho como um único valor de geometria.
CREATE TABLE roads (
id SERIAL PRIMARY KEY,
name TEXT,
path geometry(LINESTRING, 4326)
);
INSERT INTO roads (name, path)
VALUES (
'High Street',
ST_GeomFromText(
'LINESTRING(-0.125 51.500, -0.120 51.502, -0.115 51.505)',
4326
)
);
SELECT name, ST_Length(path) AS length_degrees FROM roads;O tipo POLYGON
Um POLYGON define uma área fechada. Seu limite externo é um anel — uma LINESTRING fechada na qual o primeiro e o último pontos são idênticos. Um polígono também pode ter anéis internos (buracos) para representar áreas como um lago dentro de um parque.
Todos os anéis devem ser fechados: repita a coordenada inicial no final.
CREATE TABLE zones (
id SERIAL PRIMARY KEY,
name TEXT,
area geometry(POLYGON, 4326)
);
INSERT INTO zones (name, area)
VALUES (
'Central Park Approx',
ST_GeomFromText(
'POLYGON((-73.9817 40.7681, -73.9580 40.7681,
-73.9580 40.7964, -73.9817 40.7964,
-73.9817 40.7681))',
4326
)
);
SELECT name, ST_Area(area) AS area_sq_deg FROM zones;GEOGRAPHY versus GEOMETRY
O PostGIS oferece duas famílias de tipos espaciais: geometry usa um plano cartesiano plano, enquanto geography modela a Terra como um esferoide curvo.
Use geography quando precisar de distâncias precisas do mundo real em metros em grandes áreas. Use geometry quando estiver trabalhando em um sistema de coordenadas projetado local ou precisar do máximo desempenho.
CREATE TABLE cities (
id SERIAL PRIMARY KEY,
name TEXT,
geog geography(POINT, 4326)
);
INSERT INTO cities (name, geog) VALUES
('New York', ST_GeogFromText('POINT(-74.0060 40.7128)')),
('London', ST_GeogFromText('POINT(-0.1278 51.5074)'));
-- Distance in metres using geography
SELECT
a.name AS from_city,
b.name AS to_city,
ROUND(ST_Distance(a.geog, b.geog)::NUMERIC) AS distance_m
FROM cities a, cities b
WHERE a.name = 'New York' AND b.name = 'London';Texto Bem Conhecido (WKT) e WKB
Os dados espaciais podem ser serializados em dois formatos padrão. O Texto Bem Conhecido (WKT) é legível por humanos: POINT(2.29 48.86). O Binário Bem Conhecido (WKB) é uma representação binária compacta usada internamente e para transferência de dados.
O PostGIS fornece ST_AsText e ST_AsBinary para converter entre o armazenamento interno e esses formatos.
SELECT
name,
ST_AsText(geom) AS wkt,
ST_AsEWKT(geom) AS ewkt,
encode(ST_AsBinary(geom), 'hex') AS wkb_hex
FROM locations
LIMIT 2;MULTIPOINT, MULTILINESTRING, MULTIPOLYGON
O PostGIS também oferece suporte a tipos de multigeometria que agrupam várias formas do mesmo tipo em um único valor. Isso é útil quando um único elemento do mundo real é composto por partes desconectadas — por exemplo, um arquipélago modelado como um MULTIPOLYGON.
Todas as funções espaciais padrão funcionam da mesma forma com multigeometrias.
SELECT ST_AsText(
ST_GeomFromText(
'MULTIPOLYGON(
((0 0, 4 0, 4 4, 0 4, 0 0)),
((10 10, 14 10, 14 14, 10 14, 10 10))
)'
)
) AS multi_poly;
SELECT ST_NumGeometries(
ST_GeomFromText(
'MULTIPOLYGON(
((0 0, 4 0, 4 4, 0 4, 0 0)),
((10 10, 14 10, 14 14, 10 14, 10 10))
)'
)
) AS part_count;GEOMETRYCOLLECTION
Uma GEOMETRYCOLLECTION é o tipo espacial mais geral — ela pode conter uma combinação de pontos, linhas e polígonos em um único valor. Essa flexibilidade é útil quando um conjunto de dados pode conter tipos de geometria heterogêneos armazenados na mesma coluna.
Você pode extrair elementos individuais com ST_GeometryN.
SELECT ST_AsText(
ST_GeomFromText(
'GEOMETRYCOLLECTION(
POINT(1 1),
LINESTRING(0 0, 1 1, 2 2),
POLYGON((0 0, 3 0, 3 3, 0 3, 0 0))
)'
)
) AS collection;
SELECT ST_AsText(
ST_GeometryN(
ST_GeomFromText(
'GEOMETRYCOLLECTION(POINT(1 1), LINESTRING(0 0, 1 1))'
),
1
)
) AS first_member;Índices espaciais com GIST
Consultas espaciais que verificam contenção ou proximidade precisam comparar a geometria de cada linha — o que pode exigir a varredura de milhões de formas. Um índice GIST acelera esse processo significativamente ao indexar as caixas delimitadoras das geometrias, permitindo que o PostgreSQL ignore linhas que não podem corresponder ao critério.
Sempre crie um índice GIST nas colunas de geometria ou geografia que você consulta com frequência.
-- Create a GIST index on a geometry column
CREATE INDEX idx_locations_geom
ON locations
USING GIST (geom);
-- PostgreSQL will now use the index for spatial operators
EXPLAIN ANALYZE
SELECT name
FROM locations
WHERE ST_DWithin(
geom,
ST_GeomFromText('POINT(2.3 48.9)', 4326),
1.0
);Lendo propriedades de geometrias
O PostGIS fornece funções de acesso para extrair propriedades de qualquer geometria. ST_X e ST_Y retornam as coordenadas de um ponto, ST_SRID retorna o ID de referência espacial e ST_GeometryType retorna o nome do subtipo.
Essas funções são essenciais para inspecionar e validar dados espaciais.
SELECT
name,
ST_X(geom) AS longitude,
ST_Y(geom) AS latitude,
ST_SRID(geom) AS srid,
ST_GeometryType(geom) AS geom_type,
ST_IsValid(geom) AS is_valid
FROM locations;Verificação rápida
Verifique sua compreensão dos tipos de dados espaciais do PostGIS.
Recapitulação da lição
Nesta lição, você explorou os principais tipos de dados espaciais fornecidos pelo PostGIS. Você aprendeu que POINT, LINESTRING e POLYGON são os três subtipos fundamentais de geometria, e que as variantes de multigeometria (MULTIPOINT, MULTILINESTRING, MULTIPOLYGON) e o tipo abrangente GEOMETRYCOLLECTION contemplam formas mais complexas.
Você viu a diferença entre o tipo plano geometry e o tipo esferoidal geography, bem como a forma de escolher entre eles. O Texto Bem Conhecido (WKT) permite ler e gravar valores espaciais como cadeias de caracteres legíveis por humanos, enquanto os índices GIST mantêm as consultas espaciais rápidas em grande escala. Funções de acesso como ST_X, ST_SRID e ST_GeometryType permitem inspecionar diretamente qualquer valor de geometria no SQL.
Aprenda SQL com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 46
- Aulas
- 183
Perguntas Frequentes
A aula “Tipos de Dados Espaciais” é grátis?
Sim — o texto completo de “Tipos de Dados Espaciais” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “Tipos de Dados Espaciais”?
Pontos, linhas e polígonos em SQL. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Tipos de Dados Espaciais”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Tipos de Dados Espaciais
- Distância e Vizinhos Mais Próximos
- Junções Espaciais e Contenção
- Índices Espaciais (GiST)