ARTECLABGeoServer 3 — De cero a producciónClase 6
1 / 13
Módulo 5 · Clase 6 ·

PostGIS + GeoServer:
Publicación desde BD

La combinación más potente para servicios geoespaciales en producción

⏱ 2 horas🗄️ PostgreSQL 16👨‍💻 Daniel Quisbert
Al finalizar esta clase
¿Qué vamos a lograr hoy?
1
Preparar una base de datos PostGIS para GeoServer
CREATE EXTENSION postgis, usuario de solo lectura, índices espaciales.
2
Importar datos geoespaciales con ogr2ogr a PostgreSQL
Shapefile y GeoPackage directo a PostGIS en un comando.
3
Crear un Datastore PostGIS en GeoServer
Conexión JDBC, Connection Pool y publicación de tablas.
4
Publicar vistas SQL como capas WMS
El poder real de PostGIS: datos calculados servidos como mapas.
DQ
Daniel Quisbert
ARTECLAB · danielquisbert.com
¿Por qué PostGIS?
Archivo vs Base de datos — cuándo usar cada uno
GeoPackage / SHPPostGIS ✓
Usuarios simultáneos1 (bloqueos de escritura)Miles
Edición en tiempo realRiesgosoTransaccional (ACID)
Consultas espacialesLimitadasST_Intersects, ST_Buffer, etc.
Datos calculadosNoVistas SQL con geometría
EscalaHasta ~500MB prácticoTerabytes con índices
WFS TransaccionalNoEdición desde QGIS via GeoServer
Paso 1 de 4
Preparar PostGIS
Base de datos + extensión espacial + usuario seguro
SQL esencial
Crear la base de datos espacial
Crear BD y activar PostGIS
-- Crear base de datos CREATE DATABASE geobolivia TEMPLATE template0 ENCODING 'UTF8'; -- Conectar y activar PostGIS \c geobolivia CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology; -- Verificar SELECT PostGIS_Version(); -- → 3.4 USE_GEOS=1 USE_PROJ=1 -- Usuario de solo lectura para GeoServer CREATE USER geoserver_ro WITH PASSWORD 'gs_readonly!'; GRANT CONNECT ON DATABASE geobolivia TO geoserver_ro; GRANT SELECT ON ALL TABLES IN SCHEMA public TO geoserver_ro;
🔒
Principio de mínimo privilegio
GeoServer solo necesita SELECT para servir mapas. Si las credenciales se filtran, el atacante no puede modificar datos.
📌
El índice espacial GIST es el que hace rápidas las consultas espaciales: CREATE INDEX idx ON tabla USING GIST(geom);
Paso 2 de 4
Importar datos
a PostGIS
ogr2ogr: el camino más rápido
Importación masiva
ogr2ogr → PostGIS
Importar GeoPackage completo a PostGIS
# Importar cada capa del GeoPackage a PostGIS ogr2ogr -f PostgreSQL \ PG:"host=localhost dbname=geobolivia user=postgres" \ datos.gpkg \ -nln municipios \ -t_srs EPSG:4326 \ -overwrite # Crear índice espacial psql -d geobolivia -c \ "CREATE INDEX idx_mun_geom ON municipios USING GIST(wkb_geometry);" # Verificar en psql psql -d geobolivia -c "SELECT COUNT(*) FROM municipios;"
-overwrite elimina y recrea la tabla. -append agrega filas a una tabla existente. Usa overwrite para carga inicial y append para actualizaciones parciales.
Paso 3 de 4
Datastore PostGIS
en GeoServer
Conectar GeoServer a PostgreSQL
Configuración
Parámetros del Datastore PostGIS
Hostlocalhost (o IP del servidor PostgreSQL)
Puerto5432 (por defecto)
Base de datosgeobolivia
Schemapublic (donde están las tablas)
Usuariogeoserver_ro (solo lectura)
Contraseñags_readonly!
Min conexiones1 (Connection Pool mínimo)
Max conexiones10 (ajustar según carga)
Connection Pool
GeoServer mantiene conexiones abiertas a PostgreSQL. Evita el costo de crear una nueva conexión por cada petición WMS.
⚠️
Después de guardar el Store, GeoServer lista automáticamente todas las tablas y vistas de ese schema listas para publicar.
Paso 4 de 4
Vistas SQL
como capas WMS
El poder real: datos calculados servidos como mapas
Vista SQL
Municipios con densidad poblacional — vista para GeoServer
Crear vista SQL en PostgreSQL
-- Vista: municipios + cálculo de densidad CREATE OR REPLACE VIEW v_municipios_densidad AS SELECT m.gid, m.nombre_municipio, m.departamento, m.superficie_km2, p.poblacion_2024, ROUND(p.poblacion_2024::numeric / NULLIF(m.superficie_km2, 0), 1) AS hab_por_km2, m.wkb_geometry AS geom FROM municipios m LEFT JOIN censo_2024 p ON m.cod_ine = p.cod_municipio; -- GeoServer la ve y publica igual que una tabla física
Ahora publicas v_municipios_densidad desde GeoServer y creas un estilo SLD graduado por hab_por_km2. Los datos del censo se calculan en el servidor, no en el cliente.
Resumen
Lo que aprendiste hoy
  • PostGIS supera a los archivos en escala, usuarios simultáneos y capacidad de consulta
  • CREATE EXTENSION postgis activa las capacidades espaciales en PostgreSQL
  • El usuario de solo lectura para GeoServer es una buena práctica de seguridad
  • ogr2ogr importa GeoPackages y Shapefiles directamente a PostGIS con -f PostgreSQL
  • El índice GIST hace que las consultas espaciales sean eficientes
  • GeoServer publica vistas SQL exactamente igual que tablas físicas
🔒
Próxima clase
Servicios OGC en detalle, filtros CQL y seguridad. Aprenderemos a restringir el acceso por workspace, capa y usuario.
Fin de la Clase 6

PostGIS y GeoServer
trabajan juntos.

Próxima clase: WMS, WFS, WMTS, filtros CQL y seguridad.

Cuestionario — Clase 6: PostGIS
12 preguntas · 2 intentos
Ir al cuestionario →
🗓 Próxima: OGC + Seguridad