En este post os enseñaremos como utilizar Geoserver cómo map proxy para poder imprimir mapas en pdf independientemente del origen de datos de los mismos. En el caso que nos ocupa tenemos un origen de datos basado en un servidor de mapas de Geomedia, pero podría ser cualquier origen de datos. Lo que haremos será crear una nueva capa de trabajo que capturará las capas del mapa para devolvernos una salida en pdf.

Como podéis ver en el gráfico de abajo, el servicio wms se pide a un servidor externo, y después la salida gráfica de nuestro mapa en pdf se le pide a Geoserver.

Arquitectura geoserver map proxy

Se supone que tenemos acceso a un Geoserver, ya sea de manera aislada o mediante una versión de OpenGeoSuite.

Lo primero que debemos de hacer es instalar el módulo de impresión de Geoserver, ya que este no viene por defecto. Para eso nos podemos dirigir a la siguiente página.

http://ares.boundlessgeo.com/geoserver/master/ext-latest

plugin

A continuación, descomprimimos el contenido del archivo descargado dentro de la siguiente ruta de geoserver.

WebInf/lib

Si tienes descargada la última versión de OpenGeoSuite ya tendrás estas librerías por defecto.

Librerías imprimir geoserver

Ahora sólo deberás reiniciar geoserver y ya tendrás el módulo instalado.

Para saber que todo está funcionando correctamente puedes hacer una petición al archivo que devuelve las capacidades de impresión del geoserver contra el que estás trabajando.

http://localhost:8082/geoserver/pdf/info.json?var=printCapabilities

Tened en cuenta que la dirección que os pongo arriba es donde está configurado nuestro Geoserver, quizás vosotros tengáis configurado Geoserver en otra dirección o sirviendo en un puerto diferente.

Si todo marcha bien debes de recibir una respuesta como la siguiente.

Ahora para poder sacarle el jugo a las capacidades de impresión de Geoserver desde nuestra aplicación cliente, una manera sencilla será el módulo de impresión de GeoExt y sus métodos.

metodos Geo Ext

De una manera fácil vamos a ver como lo hacemos mediante el método PrintProvider(). Un ejemplo lo puedes ver en la siguiente página.

http://geoext.org/lib/GeoExt/data/PrintProvider.html

Trasladándolo a nuestro programa debemos de meter todo el mapa dentro de un objeto “panel” de Geoext, y a continuación, utilizar el método PrintProvider.

imprimir Geoserver

Como podemos ver, aparece una capa vectorial en la que definimos el área de impresión y dentro del “panel” aparece un botón para imprimir en pdf.

En este caso estamos haciendo una petición de capas wms a un servidor Geomedia WebMap, es decir, el mapa se dibuja desde los datos entregados por el Geomedia, pero después la capacidad de imprimirse se la dará otra capa que será la del Geoserver.

Después debemos definir nuestro proveedor de impresión en pdf, para eso debemos hacer referencia en nuestro archivo html al json que nos muestra las capacidades de impresión.

 

Y en el archivo javascript, definir el método printProvider con las características que necesitamos.

 

De esta manera el programa debería funcionar a la perfección y podemos hacer una prueba para comprobarlo.

 

ejemploImpresion

Así hemos visto como funcionaría Geoserver como map proxy para poder dotar nuestro mapa de OpenLayers con la capacidad de impresión.