Cuando la información geográfica de una organización vive en archivos dispersos, cada consulta depende de quién tiene la última versión. Una base de datos espacial con un servidor de mapas resuelve ese problema: los datos se guardan una sola vez y se publican como servicios que cualquier aplicación puede consumir. La combinación de PostGIS y GeoServer es una de las más usadas para lograrlo, es de código abierto y se apoya en estándares internacionales.
Arquitectura general
La solución se organiza en tres capas con responsabilidades bien separadas:
- Almacén: PostgreSQL con la extensión PostGIS, que agrega tipos de geometría, funciones espaciales e índices.
- Servidor de mapas: GeoServer lee las tablas de PostGIS y las publica mediante servicios del Open Geospatial Consortium (OGC): WMS para imágenes de mapa, WFS para entidades vectoriales, WMTS para teselas y WCS para coberturas ráster.
- Cliente: un visor web construido con OpenLayers, Leaflet o MapLibre, o bien un SIG de escritorio como QGIS, que consume esos servicios.
Como todo se comunica por estándares abiertos, cualquiera de las capas puede reemplazarse sin rehacer las demás.
Paso 1: preparar PostgreSQL y PostGIS
Instale PostgreSQL desde los repositorios de su sistema operativo o con el instalador oficial, junto con el paquete de PostGIS correspondiente a su versión. Luego cree una base de datos y active la extensión:
CREATE DATABASE territorio;
c territorio
CREATE EXTENSION postgis;
SELECT postgis_full_version();
Es buena práctica crear esquemas por tema (por ejemplo, catastro, hidrografia, limites) en lugar de dejar todo en public. Facilita los permisos y el mantenimiento.
Elegir el sistema de referencia (SRID)
Cada columna de geometría debe tener un SRID definido. Las opciones habituales en Bolivia son:
| SRID | Sistema | Uso recomendado |
|---|---|---|
| EPSG:4326 | WGS 84 geográficas | Intercambio de datos y cobertura nacional |
| EPSG:32719 | WGS 84 / UTM zona 19S | Occidente del país |
| EPSG:32720 | WGS 84 / UTM zona 20S | Centro del país |
| EPSG:32721 | WGS 84 / UTM zona 21S | Extremo oriental |
Las coordenadas geográficas sirven para almacenar y compartir, pero no para medir: si necesita áreas o distancias en metros, trabaje en la zona UTM que corresponda o use el tipo geography. Evite mezclar SRID en una misma tabla.
Paso 2: cargar los datos
Hay dos herramientas principales. shp2pgsql viene con PostGIS y convierte shapefiles en sentencias SQL:
shp2pgsql -s 32720 -I -W UTF-8 predios.shp catastro.predios | psql -d territorio
La opción -s declara el SRID y -I crea el índice espacial. Para otros formatos (GeoPackage, GeoJSON, KML, CSV con coordenadas) resulta más versátil ogr2ogr, de la biblioteca GDAL, que además puede reproyectar durante la carga:
ogr2ogr -f PostgreSQL PG:"dbname=territorio user=editor" rios.gpkg
-nln hidrografia.rios -lco GEOMETRY_NAME=geom -t_srs EPSG:32720
Después de cargar, revise la validez de las geometrías con ST_IsValid y corrija las defectuosas con ST_MakeValid. Una geometría inválida puede provocar errores silenciosos en consultas y en la publicación.
Índices espaciales GiST
Sin índice, cada consulta espacial recorre la tabla completa. Si la carga no lo creó, hágalo manualmente y actualice las estadísticas:
CREATE INDEX predios_geom_idx ON catastro.predios USING GIST (geom);
ANALYZE catastro.predios;
GeoServer filtra por la extensión visible del mapa en cada petición, de modo que este índice es determinante para el tiempo de respuesta.
Paso 3: publicar en GeoServer
GeoServer es una aplicación Java. Una vez en marcha, la publicación se realiza desde su interfaz web de administración:
- Crear un espacio de trabajo (workspace) que agrupe las capas de un proyecto y defina su espacio de nombres.
- Crear un almacén (store) de tipo PostGIS indicando servidor, puerto, base de datos, esquema, usuario y contraseña. Aquí también se configura el tamaño del pool de conexiones.
- Publicar la capa: elegir la tabla, confirmar el SRID declarado y calcular los recuadros de extensión (nativo y en coordenadas geográficas).
- Asignar un estilo y verificar el resultado en la vista previa de capas.
Desde ese momento la capa queda disponible por WMS y WFS.
Estilos SLD
GeoServer define la simbología con SLD (Styled Layer Descriptor), un formato XML estándar de OGC. Puede escribirse a mano, generarse desde QGIS o, si instala las extensiones correspondientes, redactarse en formatos más compactos como CSS o YSLD. Un buen estilo incluye reglas por escala: mostrar etiquetas o detalles solo a partir de cierto nivel de acercamiento mejora la legibilidad y el rendimiento.
Paso 4: seguridad básica
Una instalación funcional no es necesariamente una instalación segura. Como mínimo:
- Cambie las credenciales por defecto de GeoServer (usuario
admincon contraseñageoserver) antes de exponer el servicio. - Use un usuario de base de datos de solo lectura para los almacenes de GeoServer. Solo otorgue escritura si va a habilitar edición mediante WFS transaccional, y en ese caso limítela a las tablas necesarias.
- No exponga el puerto de PostgreSQL (5432) a Internet. Restrinja el acceso en
pg_hba.confy en el cortafuegos a los servidores que realmente lo necesitan. - Publique GeoServer detrás de un proxy inverso (Nginx, Apache u otro) con HTTPS, y configure la URL base del proxy en GeoServer para que los documentos de capacidades devuelvan direcciones correctas.
- Defina reglas de acceso por capa y por servicio si maneja información restringida.
CREATE ROLE geoserver_lector LOGIN PASSWORD 'cambie-esta-clave';
GRANT CONNECT ON DATABASE territorio TO geoserver_lector;
GRANT USAGE ON SCHEMA catastro TO geoserver_lector;
GRANT SELECT ON ALL TABLES IN SCHEMA catastro TO geoserver_lector;
Paso 5: rendimiento con GeoWebCache
GeoServer incluye GeoWebCache, que almacena las teselas ya generadas y las sirve sin volver a dibujarlas. Es la base del servicio WMTS y reduce drásticamente la carga en capas de consulta frecuente, como límites administrativos o mapas base. Configure las rejillas (gridsets) que usará su visor, los formatos de imagen y, cuando los datos cambien, vacíe o regenere la caché de las capas afectadas. Para capas que se editan de forma continua conviene limitar la caché o no usarla.
Paso 6: respaldos
Hay dos elementos que respaldar. El primero es la base de datos:
pg_dump -Fc -d territorio -f territorio_2026-09-10.dump
pg_restore -d territorio_prueba territorio_2026-09-10.dump
El formato personalizado (-Fc) permite restauraciones selectivas. El segundo es el directorio de datos de GeoServer (data directory), que guarda espacios de trabajo, almacenes, estilos y reglas de seguridad. Automatice ambos respaldos, guárdelos fuera del servidor y pruebe la restauración periódicamente: un respaldo que nunca se restauró no está verificado.
Despliegue con contenedores
Toda la pila puede ejecutarse en contenedores (por ejemplo, con Docker Compose): uno para PostgreSQL con PostGIS, otro para GeoServer y otro para el proxy inverso. Esto hace el entorno reproducible, simplifica las actualizaciones y permite trasladarlo entre un servidor propio y cualquier nube sin depender de un proveedor específico. Recuerde montar volúmenes persistentes para la base de datos y para el directorio de datos de GeoServer.
Recomendaciones para empezar
- Comience con pocas capas bien estructuradas y documentadas antes de migrar todo el acervo.
- Defina desde el inicio los SRID, la nomenclatura de tablas y los responsables de cada conjunto de datos.
- Mantenga un entorno de pruebas separado del de producción.
Con esta base, su organización tendrá una fuente única de datos espaciales y servicios interoperables listos para visores web, aplicaciones móviles y análisis. Si necesita apoyo para diseñar o implementar esta infraestructura, puede contactarnos.