Sincroniza capas GeoJSON publicadas por WaterwayMap hacia PostgreSQL local para publicarlas como WMS en GeoServer.
Este repositorio incluye 3 scripts Bash:
updateWaterwaysMapData-loops.sh: descargaplanet-loopsy carga enplanet_loops.updateWaterwaysMapData-ends.sh: descargaplanet-endsy carga enplanet_ends.updateWaterwaysMapData-river2stream.sh: descargaplanet-waterway-stream-endsy carga enplanet_rivers2streams.
Flujo común de cada script:
- Crea/usa el directorio de trabajo
/home/geoserver/data/waterways. - Descarga un archivo
.geojson.gzdesdehttps://data.waterwaymap.org/. - Descomprime el archivo.
- Elimina la tabla destino en PostgreSQL (
DROP TABLE IF EXISTS). - Importa el GeoJSON con
ogr2ogra la base de datoswaterways. - Borra el archivo
.geojsontemporal. - Registra la salida en logs locales (
Loops.log,Ends.log,river2stream.log).
- Linux con
bash. cronpara programación periódica.
Instala como mínimo:
wgetgunzip(paquetegzip)psql(paquetepostgresql-client)ogr2ogr(paquetegdal-bin)
Ejemplo en Debian/Ubuntu:
sudo apt update
sudo apt install -y wget gzip postgresql-client gdal-bin cronLos scripts usan actualmente:
- Nombre de DB:
waterways - Conexión: local (sin host explícito), usando socket local de PostgreSQL.
- Usuario: el usuario del sistema operativo que ejecuta el script (a menos
que definas variables como
PGUSER/PGPASSWORD).
Comandos usados por los scripts:
psql -d waterways ...ogr2ogr ... PG:"dbname=waterways" ...
Si PostgreSQL está configurado con método peer para conexiones locales
(local en pg_hba.conf):
- No necesitas
PGPASSWORD. - PostgreSQL toma como usuario el usuario Linux que ejecuta el script (por
ejemplo,
geoserver). - Debe existir un rol con ese mismo nombre en PostgreSQL. Si no existe,
aparecerá un error como:
FATAL: role "geoserver" does not exist.
Crear el rol (sin password) para usar peer:
sudo -u postgres createuser geoserverPrueba de conexión con peer (ejecutando como usuario Linux geoserver):
psql -d waterways -c "SELECT current_user, current_database();"-
Crear la base de datos:
createdb waterways
-
(Recomendado para GeoServer espacial) habilitar PostGIS:
psql -d waterways -c "CREATE EXTENSION IF NOT EXISTS postgis;" -
Verificar autenticación local en
pg_hba.confpara el usuario que ejecutacron(por ejemplo,geoserver).
-
Clona este repositorio y entra al directorio.
-
Da permisos de ejecución:
chmod +x updateWaterwaysMapData-*.sh -
Ejecuta manualmente una primera carga:
./updateWaterwaysMapData-loops.sh ./updateWaterwaysMapData-ends.sh ./updateWaterwaysMapData-river2stream.sh
-
Revisa logs en
/home/geoserver/data/waterways/.
Edita el crontab del usuario que tiene acceso a PostgreSQL y al directorio
/home/geoserver/data/waterways:
crontab -eEjemplo para ejecutar todos los días a las 02:10, 02:20 y 02:30:
10 2 * * * /home/geoserver/github/WaterwayMap2WMS/updateWaterwaysMapData-loops.sh
20 2 * * * /home/geoserver/github/WaterwayMap2WMS/updateWaterwaysMapData-ends.sh
30 2 * * * /home/geoserver/github/WaterwayMap2WMS/updateWaterwaysMapData-river2stream.shSi necesitas credenciales explícitas de PostgreSQL, añade variables al inicio del crontab, por ejemplo:
PGHOST=localhost
PGPORT=5432
PGDATABASE=waterways
PGUSER=geoserver
PGPASSWORD=change_meNota: con autenticación peer, normalmente no necesitas estas variables; son
útiles si cambias a autenticación por contraseña (md5 o scram-sha-256).
En GeoServer:
Data > Stores > Add new Store.- Selecciona
PostGIS. - Configura conexión a la base
waterways(host/puerto/usuario/password). - Guarda y prueba conexión.
Publica como layers las tablas:
planet_loopsplanet_endsplanet_rivers2streams
Configura SRS y bounding boxes al publicar cada capa.
Una vez publicadas, puedes solicitar mapas vía endpoint WMS de tu workspace:
http://<tu-geoserver>/geoserver/<workspace>/wms
Ejemplo de operación GetCapabilities:
http://<tu-geoserver>/geoserver/<workspace>/wms?service=WMS&request=GetCapabilities
- Los scripts reemplazan completamente cada tabla en cada ejecución.
- Si falla una ejecución, revisa primero los logs en
/home/geoserver/data/waterways/. - El directorio de trabajo se limpia de archivos
*.geojsony*.geojson.gzen cada corrida.