Imprima mapas web con geoserver: evite el plugin!

Veremos aquí cómo configurar una solución para generar pdf para imprimir a partir de una página cartográfica interactiva, la página codificada de OpenLayers 4 y el servidor Geoserver 2.14. Teoricamente, para leer el documento Geoserver,todo debería ser muy simple: instalación del plugin Geoserver Print , prueba de la instalación, configuración y listo.

Si bien la instalación es rápida y fácil, los problemas comienzan cuando desea utilizar la página de prueba propuesta para asegurarse de que todo funciona correctamente. Imposible hacer que funcione y cada vez que encontramosla fuente del problema y lo resolvemos,  un nuevo mensaje de error aparece y otro problema para tratar de resolver.

Las rutas de los scripts ya no son válidas, el contenido de lasbibliotecas ha cambiado, en resumen, si desea perder el tiempo, siempre puede intentarlo.

También puede buscar soluciones en la red y, al igual que yo, encontrar publicaciones en foros con las mismas preguntas … y ninguna respuesta.

Empecemos por el principio …

El módulo de impresión debe generar un archivo pdf que contenga un mapae informaciones. Este mapa es producido por Geoserver y la consulta es generadapor una página html escrita con OpenLayers. Incluso si puede hacerlo todo sinotra biblioteca, a menudo utiliza la biblioteca GeoExt que simplifica el

trabajo de codificación de la aplicación.

En cuanto a la generación del pdf, se basa en la biblioteca java Mapfish
Print.

Si bien, la versión Geoserver usada no afecta el resultado, no es así para los otros componentes.

La instalación descrita en la documentación de Geoserver se refiere a Mapfish versión 2. Esta version fue remplazada por MapFish3 en 2015. Se debe entender que las dos versiones son completamente diferentes en términos de sintaxis y flujo de trabajo.

MapFish V2 se usa con la biblioteca GeoExt V2 que se basa en OpenLayers
2. Es decir, versiones antiguas.

Si está trabajando con OpenLayers
4 o 5, la versión de GeoExt a usar es la versión 3, y la versión de Mapfish es
la versión 3.

Por lo tanto, no instale el plugin de impresión
Geoserver (MapFish V2).

Esto no representa un problema, MapFish3 se instala fácilmente. El problema o los problemas surgen cuando busca documentación, tal como información sobre mensajes de error, en la red. Tendrá referencias rápidas atodas las versiones, pero sin saber a qué versión se refiere …

Instalación de Mapfish 3

El archivo WAR de Mapfish Print es un archivo Java que se puede ejecutar en cualquier servidor de aplicaciones web Java, como Tomcat o Jetty. Para utilizar Mapfish Print como una aplicación web independiente, debe:

  • Instalar Java 7 o posterior
  • Descargue el servidor de aplicaciones web: archivo war en http://mapfish.github.io/mapfish-print-doc/download.html
  • Coloque el archivo de impresiónde Mapfish en el directorio webapps del servidor de aplicaciones web.
  • Cambie el nombre del archivo WARde Mapfish Print por un nombre más práctico, como print.war (el nombre formará parte de la URL).
  • Iniciar el servidor de aplicaciones web (Tomcat o Jetty)

Verifique que la aplicación se esté ejecutandocorrectamente visitando http: // localhost: 8080 / print / index.html. (Esto supone que el servidor se está ejecutando en el puerto 8080 del host local y que ha cambiado el nombre a war.Print.war)  

Por el momento, no haga nada con esta página. El hecho de que se vea enla pantalla es suficiente para confirmar que la instalación de MapFish ha sido exitosa.

Cómo funciona Mapfish 3

La falta de documentación en línea es difícil de
comprender porque no hay una introducción clara sobre la arquitectura general.   

Para que el usuario obtenga un documento de este tipo, cliqueando «
  Imprimir   » ubicado en una página con un mapa interactivo (página
html con código OpenLayers) hay tres elementos a tener en consideración:

  • Una plantilla de formulario creada con Jasper Studio.
  • un archivo config.yaml configurado en el servidor de impresión
  • un elemento   “especificaciones”   a agregar a la orden POST o GET de la página html

Veamos lo anterior más detalladamente.

Plantilla de formulario

Para crear el formulario utilizamos Jaspersoft
Studio
. Puede descargarlo desde esta página .  

JasperStudio  permite crear una plantilla de formulario donde se puede colocar bloques de texto, imágenes, mapas y títulos, perotambién otros bloques como   gráficos  

El propósito de este trabajo es crear un archivo .jrxml con la plantilla de página a crear. El contenido de la página se definirá en otra parte: lascapas que se representarán, la escala, la proyección, …

Archivo de configuración .yaml

En comparación con la versión 2 de Mapfish Print, siempre hay un archivo de configuración en formato yaml, pero ahora es mucho más simple y se centra enla definición de modelos:   los archivos Jasper a usar (el anterior.jrxml), y los parámetros a enviar al motor Jasper para rellenar los bloquesdel modelo. Aquí hay un ejemplo de un archivo deconfiguración muy simple:

Lo que hay que entender en este archivo:

  • La línea de A4 portrait:! plantilla define el nombre del modelo. Cuando queramos usar esta configuración, lo haremos
    refiriéndonos al diseño A4 portrait
  • el ReportTemplate para especificar el nombre de nuestro archivo .jrxml creado con Jaspersoft
    Studio.
  • los atributos de título y mapa contienen la información que se pasará al motor
    Jasper. Esto significa que hemos creado
    un bloque de título y un bloque de mapa en la plantilla de formulario . Aquí informamos el contenido de
    estos dos bloques.

Por supuesto, hay otras opciones disponibles para los archivos de
configuración. Pero por ahora, seamos sencillos.

Tenemos una plantilla de formulario .jrxml y un archivo de configuración
.yaml. Todo lo que falta es enviar la solicitud de creación del pdf.

Solicitud de impresión

A partir de la página html realizaremos un POST al servidor con un
parámetro de especificaciones que contendrá, en formato json, los
parámetros de nuestra solicitud de impresión.

Aquí hay un ejemplo de especificación :

{

«layout»: «retrato
A4″,

«atributos»:
{«mapa»: {

«centro»: [

5

45

]

«rotación»: 0,

«longitudeFirst»:
verdadero,

«capas»: [{

«geoJson»: «file:
//countries.geojson»,

«estilo»: {

«*»:
{«simbolizadores»: [{

«fillColor»: «#
5E7F99″,

«strokeWidth»: 1,

«fillOpacity»: 1,

«tipo»:
«polígono»,

«strokeColor»: «#
CC1D18″,

«strokeOpacity»: 1

}]},

«version»:
«2»

}

«tipo»:
«geojson»

}],

«escala»: 100000000,

«proyección»:
«EPSG: 4326»,

«dpi»: 72

}}

}

La línea “layout »:« A4 portrait” sirve para indicar el enlace con el archivo config.yaml con su línea A4 portait :! template

En la lista de atributos enviados, en este simple ejemplo, solo tenemos
el mapa a mostrar (»   mapa «   ) con sus parámetros de
formato (centrado, rotación, escala, proyección, definición) y, sobre todo, la
definición de las capas a mapear con la definición de sus fuentes de datos
(aquí un archivo geoJson local).

En respuesta a esta publicación, la página recibe el url de descarga del documento pdf producido. A fin de verificar puede copiar y pegar elcódigo json correspondiente a la especificación en la ventana Prueba de Impresión:

Haga
clic en Crear y obtener impresión o Publicar y Encuesta de impresión
, obtendrá su archivo pdf:   

El mismo archivo de configuración yaml y la misma plantilla jrxml pueden
llamarse con datos diferentes. Aquí hay otra versión del código json spec que
solicita los datos de los países servidos en WMS por Geoserver:

{

«layout»: «retrato
A4″,

«outputFormat»:
«pdf»,

«atributos»: {

«mapa»: {

«proyección»:
«EPSG: 3857»,

«dpi»: 72,

«rotación»: 0,

«centro»:
[-8233518.5005945, 4980320.4059228],

«escala»: 130000000,

«capas»: [

{

«baseURL»:
«http://carto-dei-brest.fr/geoserver/postgres/wms»,

«opacidad»: 1,

«tipo»:
«WMS»,

«layers»:
[«postgres: country»],

«imageFormat»:
«image / png»,

«estilos»:
[«polígono»],

«customParams»: {

«TRANSPARENTE»:
«verdadero»

}

}

]

}

}

}

En la página de prueba de impresión reemplazamos el texto json y el
resultado es el siguiente:

Para profundizar, usted cuenta con una  presentación Camptocamp  y  la documentación MapFish ,

Y si usas el plugin de impresión Geoserver …

Si aún decide utilizar el plugin provisto por Geoserver, debe saber que:

  • no hay forma de usar Jaspersoft
    para crear una plantilla. Todo lo que haga con Jaspersoft y
    MapFish 3 tendrá que hacerlo a mano en el archivo config.yaml. Y no tendrá las mismas posibilidades como por
    ejemplo, incluir gráficos en su salida pdf.
  • La sintaxis del archivo yaml es
    totalmente diferente. Encontrará su descripción en esta página .
  • Si desea utilizar los ejemplos de
    la biblioteca GeoExt como base para sus desarrollos, deberá instalar y usar la
    versión GeoExt2. GeoExt 3 no es compatible con el
    módulo de impresión Geoserver.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *