SQL Academy · Lección

Tipos de datos espaciales

Puntos, líneas y polígonos en SQL.

Lección 1 de 413 pasos

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.

Gratis para empezar

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

  1. Tipos de datos espaciales
  2. Distancia y vecinos más cercanos
  3. Uniones espaciales y contención
  4. Índices espaciales (GiST)
← Volver a SQL Academy