Tipos de datos espaciales
Puntos, líneas y polígonos en SQL.
Tipos de datos espaciales es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué son los datos espaciales?
Los datos espaciales describen ubicaciones, formas y áreas del mundo real. A diferencia de un número o una cadena simples, un valor espacial contiene significado geométrico: un punto en un mapa, un segmento de carretera o la frontera de un país.
PostGIS es una extensión de PostgreSQL que añade potentes tipos y funciones para datos espaciales, convirtiendo su base de datos en un sistema de información geográfica (GIS) completo.
-- Enable the PostGIS extension
CREATE EXTENSION IF NOT EXISTS postgis;El tipo GEOMETRY
El tipo espacial principal de PostGIS es geometry. Almacena formas en un espacio de coordenadas plano (euclídeo). Al crear una columna, puede especificar un subtipo como POINT, LINESTRING o POLYGON mediante una restricción.
Especificar el SRID (ID de referencia espacial) junto con el subtipo indica a PostGIS qué sistema de coordenadas utilizan sus datos.
CREATE TABLE locations (
id SERIAL PRIMARY KEY,
name TEXT,
geom geometry(POINT, 4326)
);Insertar un POINT
Un POINT representa una única ubicación mediante coordenadas X (longitud) e Y (latitud). La función ST_GeomFromText convierte una cadena en Well-Known Text (WKT) en un valor de geometría.
El SRID 4326 es el sistema de coordenadas WGS 84 utilizado por los dispositivos GPS de todo el 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;El tipo LINESTRING
Un LINESTRING es una secuencia ordenada de dos o más puntos conectados mediante segmentos rectos. Es ideal para representar carreteras, ríos o cualquier elemento lineal.
Cada par de números del WKT representa un vértice (longitud y latitud). PostGIS almacena toda la ruta como un único valor de geometría.
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;El tipo POLYGON
Un POLYGON define un área cerrada. Su límite exterior es un anillo: un LINESTRING cerrado cuyos puntos inicial y final son idénticos. Un polígono también puede tener anillos interiores (huecos) para representar áreas como un lago dentro de un parque.
Todos los anillos deben estar cerrados: repita la coordenada inicial al 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 frente a GEOMETRY
PostGIS proporciona dos familias de tipos espaciales: geometry utiliza un plano cartesiano plano, mientras que geography modela la Tierra como un esferoide curvo.
Utilice geography cuando necesite distancias precisas del mundo real en metros sobre áreas extensas. Utilice geometry cuando trabaje con un sistema de coordenadas proyectado local o necesite el máximo rendimiento.
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';Well-Known Text (WKT) y WKB
Los datos espaciales se pueden serializar en dos formatos estándar. Well-Known Text (WKT) es legible para las personas: POINT(2.29 48.86). Well-Known Binary (WKB) es una representación binaria compacta que se utiliza internamente y para transferir datos.
PostGIS proporciona ST_AsText y ST_AsBinary para convertir entre el almacenamiento interno y estos 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
PostGIS también admite tipos de multi-geometry que agrupan varias formas del mismo tipo en un único valor. Esto resulta útil cuando un solo elemento del mundo real está compuesto por partes separadas; por ejemplo, un archipiélago modelado como un MULTIPOLYGON.
Todas las funciones espaciales estándar funcionan del mismo modo con las geometrías múltiples.
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
Un GEOMETRYCOLLECTION es el tipo espacial más general: puede contener una combinación de puntos, líneas y polígonos en un único valor. Esta flexibilidad resulta útil cuando un conjunto de datos puede contener tipos de geometría heterogéneos almacenados en la misma columna.
Puede extraer miembros individuales con 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 espaciales con GIST
Las consultas espaciales que comprueban inclusión o proximidad deben comparar la geometría de cada fila, lo que puede implicar recorrer millones de formas. Un índice GIST acelera este proceso considerablemente al indexar los cuadros delimitadores de las geometrías, lo que permite a PostgreSQL omitir las filas que no pueden coincidir.
Cree siempre un índice GIST en las columnas de geometry o geography que consulte con frecuencia.
-- 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
);Lectura de propiedades de geometría
PostGIS proporciona funciones de acceso para extraer propiedades de cualquier geometría. ST_X y ST_Y devuelven las coordenadas de un punto, ST_SRID devuelve el ID de referencia espacial y ST_GeometryType devuelve el nombre del subtipo.
Estas funciones son esenciales para inspeccionar y validar datos espaciales.
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;Comprobación rápida
Compruebe que comprende los tipos de datos espaciales de PostGIS.
Repaso de la lección
En esta lección exploró los tipos de datos espaciales principales que proporciona PostGIS. Aprendió que POINT, LINESTRING y POLYGON son los tres subtipos de geometría fundamentales, y que las variantes de geometría múltiple (MULTIPOINT, MULTILINESTRING, MULTIPOLYGON) y el tipo general GEOMETRYCOLLECTION abarcan formas más complejas.
Vio la diferencia entre el tipo plano geometry y el tipo esferoidal geography, así como la forma de elegir entre ellos. Well-Known Text (WKT) permite leer y escribir valores espaciales como cadenas legibles para las personas, mientras que los índices GIST mantienen la rapidez de las consultas espaciales a gran escala. Las funciones de acceso, como ST_X, ST_SRID y ST_GeometryType, permiten inspeccionar directamente cualquier valor de geometría en SQL.
Aprende SQL con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 46
- Lecciones
- 183
Preguntas frecuentes
¿La lección «Tipos de datos espaciales» es gratis?
Sí — el texto completo de «Tipos de datos espaciales» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Tipos de datos espaciales»?
Puntos, líneas y polígonos en SQL. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Tipos de datos espaciales»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Tipos de datos espaciales
- Distancia y vecinos más cercanos
- Uniones espaciales y contención
- Índices espaciales (GiST)