Quantcast
Channel: GIS & Chips » PostGIS
Viewing all articles
Browse latest Browse all 10

¿Puedo generar “tiles” dinámicamente con MapProxy? (2)

$
0
0

Continuando con el post anterior , el proceso que vamos a seguir es el siguiente, tras emitir en el canal de redis, lo que vamos a realizar es una suscripción al canal de redis desde Python, procesar el mensaje recibido tras una actualización de geometría, actualizar un fichero de tileado (seed) para MapProxy y lanzar el proceso de tileado (seeding) para la nueva bbox de la geometría actualizada.

Partimos de que tenemos el fichero de configuración de mapproxy (yaml) que incluye las caches definidas, las capas, bbox,… , también tenemos un fichero de “seed” o tileado (yaml) como este:

# #####################################################################
#               MapProxy example seed configuration
# #####################################################################
#
# This is _not_ a runnable configuration, but it contains most
# available options in meaningful combinations.
#
# Use this file in addition to the documentation to see where and how
# things can be configured.

seeds:
  myseed1:
    caches: [cache1,cache2,cache3]
    srs: ['EPSG:3857']
    coverages: [mycoverage]
    levels:
      from: 18
      to: 22
    refresh_before:
      # re-generate tiles older than this date
      time: 2015-01-15T12:35:00
coverages:
  mycoverage:
     #bbox de ejemplo
     bbox: [716107.129003602, 4250947.24206775,716292.878733323 ,4251328.38112309]
     bbox_srs: "EPSG: 25830"

A continuación en python procedemos a crear un script que realice las operaciones que anteriormente hemos descrito. (NOTA: Al intentarlo con Php daba problemas de edición de yaml)

En primer lugar, se lee el fichero tipo “seed” de configuración de Mapproxy anteriormente creado. Conectamos con el canal de redis mediante pubsub y nos mantenemos a la escucha esperando a que llegue un mensaje, cuando llega, se lee, se trocea la cadena de mensaje y se va editando el archivo yaml. Una vez finalizado se almacena en la carpeta donde estamos trabajando y se lanza el script de tileado (seed) de mapproxy.

subprocess.call(["mapproxy-seed","-f","/var/datos/mymapproxy_sigua/mapproxy_base_completa.yaml","-c","4","yamlpython.yaml"])

De esta forma en python se lanza la ejecución del proceso normal de tileado (seed) de mapproxy en lugar de lanzarlo a mano de la siguiente forma:


mapproxy-seed -f <fichero_de_configuracion_mapproxy.yaml> -c <nº de procesos concurrentes> <fichero_de_tileado_seed_mapproxy.yaml>

Tras realizar esta operación lanzando el script con la instrucción python <nombre_fichero.py> se queda en ejecución en escucha de modificaciones en la base de datos de postgresql que se vean reflejadas en redis y que redis envíe el mensaje tal y como se describió en el anterior artículo. Podemos chequear el funcionamiento añadiendo una nueva geometría en QGIS , almacenamos la geometría en al base de datos y a continuación en el terminal vemos la secuencia de ejecución realizada. Pero no nos quedamos ahí, nos gustaría que este script se estuviera ejecutando continuamente como un daemon más de linux. Para realizar esta operación lo que realizamos es lo siguiente: En la carpeta /etc/init.d/ creamos un archivo con el nombre del daemon que queremos que se ejecute constantemente, le damos permisos de ejecución con chmod +x .

Código del daemon que se va a ejecutar :

A continuación para programar la ejecución:

cd /etc/rc3.d/
ln -s ../init.d/<nombre_daemon_creado> S95<nombre_daemon_creado>
/etc/init.d/redismap start

Y ya debería funcionar correctamente el tileado, podemos chequearlo monitorizándolo con htop

Comprobación de la ejecución

Monitorización del fichero redismap en htop

The post ¿Puedo generar “tiles” dinámicamente con MapProxy? (2) appeared first on GIS & Chips.


Viewing all articles
Browse latest Browse all 10

Latest Images





Latest Images