Extensión PostGIS para PostgreSQL

PostgreSQLPostgreSQLBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá cómo instalar y usar la extensión PostGIS en una base de datos PostgreSQL. PostGIS permite a PostgreSQL almacenar y consultar datos espaciales, lo que le permite realizar consultas y análisis espaciales.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL postgresql(("PostgreSQL")) -.-> postgresql/PostgreSQLGroup(["PostgreSQL"]) postgresql/PostgreSQLGroup -.-> postgresql/db_setup("Create New Database") postgresql/PostgreSQLGroup -.-> postgresql/db_access("Connect To Database") postgresql/PostgreSQLGroup -.-> postgresql/table_init("Create Basic Table") postgresql/PostgreSQLGroup -.-> postgresql/row_add("Insert One Row") postgresql/PostgreSQLGroup -.-> postgresql/data_where("Filter With WHERE") postgresql/PostgreSQLGroup -.-> postgresql/view_drop("Drop Existing View") postgresql/PostgreSQLGroup -.-> postgresql/func_call("Call Stored Function") postgresql/PostgreSQLGroup -.-> postgresql/db_drop("Drop Entire Database") subgraph Lab Skills postgresql/db_setup -.-> lab-550958{{"Extensión PostGIS para PostgreSQL"}} postgresql/db_access -.-> lab-550958{{"Extensión PostGIS para PostgreSQL"}} postgresql/table_init -.-> lab-550958{{"Extensión PostGIS para PostgreSQL"}} postgresql/row_add -.-> lab-550958{{"Extensión PostGIS para PostgreSQL"}} postgresql/data_where -.-> lab-550958{{"Extensión PostGIS para PostgreSQL"}} postgresql/view_drop -.-> lab-550958{{"Extensión PostGIS para PostgreSQL"}} postgresql/func_call -.-> lab-550958{{"Extensión PostGIS para PostgreSQL"}} postgresql/db_drop -.-> lab-550958{{"Extensión PostGIS para PostgreSQL"}} end

Instalar la Extensión PostGIS

En este paso, instalará la extensión PostGIS en una base de datos PostgreSQL. PostGIS añade soporte para objetos geográficos a PostgreSQL.

Primero, conéctese al servidor PostgreSQL como el usuario postgres usando el comando psql:

sudo -u postgres psql

Esto abrirá la terminal interactiva de PostgreSQL. Verá un prompt similar a:

psql (14.7 (Debian 14.7-1.pgdg110+1))
Type "help" for help.

postgres=#

A continuación, cree una base de datos llamada spatial_db:

CREATE DATABASE spatial_db;

Debería ver la siguiente salida:

CREATE DATABASE

Ahora, conéctese a la base de datos spatial_db:

\c spatial_db

El prompt cambiará a:

You are now connected to database "spatial_db" as user "postgres".
spatial_db=#

Instale la extensión PostGIS:

CREATE EXTENSION postgis;

Esto añade la funcionalidad de PostGIS a la base de datos spatial_db. La salida debería ser:

CREATE EXTENSION

Verifique la instalación comprobando la versión de PostGIS:

SELECT PostGIS_full_version();

La salida mostrará la información completa de la versión de la extensión PostGIS.

Finalmente, salga del shell psql:

\q

Crear una Tabla Espacial e Insertar Datos

En este paso, creará una tabla para almacenar datos espaciales e insertará algunos datos de ejemplo.

Primero, conéctese a la base de datos spatial_db usando el comando psql:

sudo -u postgres psql -d spatial_db

Cree una tabla llamada cities con columnas para id, name y location. La columna location almacenará los datos espaciales como un tipo geometry (geometría).

CREATE TABLE cities (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50),
    location GEOMETRY(Point, 4326)
);

Este comando crea una tabla llamada cities con un id autoincrementable, un name (nombre) para la ciudad y una columna location para almacenar las coordenadas geográficas de la ciudad como una geometría de tipo Point (Punto) utilizando el SRID 4326 (WGS 84).

Debería ver la siguiente salida:

CREATE TABLE

Ahora, inserte datos para tres ciudades: Nueva York, Londres y Tokio.

INSERT INTO cities (name, location) VALUES
    ('New York', ST_GeomFromText('POINT(-74.0060 40.7128)', 4326)),
    ('London', ST_GeomFromText('POINT(-0.1278 51.5074)', 4326)),
    ('Tokyo', ST_GeomFromText('POINT(139.6917 35.6895)', 4326));

Esto inserta tres filas en la tabla cities, utilizando la función ST_GeomFromText para crear geometrías de tipo Point a partir de cadenas Well-Known Text (WKT) que representan las coordenadas de cada ciudad.

Debería ver la siguiente salida:

INSERT 0 3

Para verificar que los datos se insertaron correctamente, consulte la tabla:

SELECT id, name, ST_AsText(location) FROM cities;

La salida debería verse así:

 id |   name   |          st_astext
----+----------+-----------------------------
  1 | New York | POINT(-74.006 40.7128)
  2 | London   | POINT(-0.1278 51.5074)
  3 | Tokyo    | POINT(139.6917 35.6895)
(3 rows)

Finalmente, salga del shell psql:

\q

Realizar Consultas Espaciales (Spatial Queries)

En este paso, realizará algunas consultas espaciales básicas utilizando la extensión PostGIS.

Primero, conéctese a la base de datos spatial_db usando el comando psql:

sudo -u postgres psql -d spatial_db

Calcule la distancia entre Nueva York y Londres en metros:

SELECT ST_Distance(
    (SELECT location::geography FROM cities WHERE name = 'New York'),
    (SELECT location::geography FROM cities WHERE name = 'London')
);

Esta consulta calcula la distancia entre las ubicaciones de Nueva York y Londres. La conversión ::geography (casting) se utiliza para realizar el cálculo en la superficie de la Tierra, devolviendo la distancia en metros. Debería ver una salida similar a:

   st_distance
-----------------
 5570299.7888681
(1 row)

Cree un buffer (zona de influencia) de 200 kilómetros (200000 metros) alrededor de Londres y encuentre todas las ciudades que se intersecan con él:

WITH london_buffer AS (
  SELECT ST_Buffer(location::geography, 200000) AS geom FROM cities WHERE name = 'London'
)
SELECT c.name
FROM cities c, london_buffer lb
WHERE ST_Intersects(c.location::geography, lb.geom);

Esta consulta primero crea un buffer alrededor de la ubicación de Londres utilizando ST_Buffer. Luego, selecciona los nombres de todas las ciudades cuyas ubicaciones se intersecan con el buffer utilizando ST_Intersects. La salida debería ser:

  name
--------
 London
(1 row)

Finalmente, salga del shell psql:

\q

Eliminar la Extensión PostGIS y la Base de Datos

En este paso, eliminará la extensión PostGIS y la base de datos spatial_db.

Primero, conéctese a la base de datos spatial_db usando el comando psql:

sudo -u postgres psql -d spatial_db

Elimine la extensión PostGIS:

DROP EXTENSION postgis;

Este comando elimina la funcionalidad de PostGIS de la base de datos spatial_db. Debería ver la siguiente salida:

DROP EXTENSION

Ahora, elimine la tabla cities:

DROP TABLE cities;

Debería ver la siguiente salida:

DROP TABLE

Salga del shell psql:

\q

Finalmente, elimine la base de datos spatial_db:

sudo -u postgres psql -c "DROP DATABASE spatial_db;"

Resumen

En este laboratorio, ha aprendido cómo instalar y usar la extensión PostGIS en una base de datos PostgreSQL. Creó una base de datos, instaló la extensión PostGIS, creó una tabla espacial (spatial table), insertó datos, realizó consultas espaciales (spatial queries) y, finalmente, eliminó la extensión y la base de datos. Esto proporciona una base para trabajar con datos espaciales en PostgreSQL.