Esto es básicamente, mi pequeño logro del día. Necesitaba publicar Ortofotos de PNOA en Geoserver, así que me ha tocado compilar GDAL con soporte ECW, instalar la extensión de Geoserver para GDAL y todo esto en CentOS que por lo visto no es muy ‘GIS friendly’. Para los que estéis habituados a programar GDAL, esto os parecerá una chorrada, pero vamos, que seguro que más de uno tiene mi mismo problema. Ahí va una pequeña guía:
Requisitos previos
Este es el servidor que me he encontrado:
CentOS 6.4 – Linux 2.6.32-358.18.1.el6.x86_64
java version “1.6.0_26”
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
apache-tomcat-7.0.42
Geoserver 2.2.2
Instalar JAI y JAI/IO
Siguiendo los pasos de la documentación de Geoserver para instalar JAI
- Descargamos en la carpeta donde tengamos instalado Java, el binario de JAI para nuestro SO y arquitectura
- Ejecutamos lo siguiente y aceptamos la licencia:
sh jai-1_1_3-lib-linux-i586-jdk.bin
- Descargamos en la carpeta donde tengamos instalado Java, el binario de JAI ImageIO para nuestro SO y arquitectura
- Ejecutamos:
export _POSIX2_VERSION=199209
- Instalar JAI ImageIO:
sh jai_imageio-1_1-lib-linux-i586-jdk.bin
Instalar la extensión de GDAL para Geoserver
Aquí es donde se empieza a liar el asunto. Lo normal sería seguir las instrucciones de instalación de la extensión de GDAL para Geoserver y listo, ¡pues no!
Lo que he hecho yo es seguir las instrucciones y cuando he visto que no podía publicar ECW, me he puesto a compilar GDAL. Te lo cuento:
- Descarga las librerías de imageio-ext y déjalas caer en la carpeta WEB-INF/lib de tu instalación de Geoserver
- Descarga el archivo gdal-data.zip y extráelo en alguna carpeta, por ejemplo: /usr/share/gdal-data
- Descarga los binarios de GDAL para CentOS y extráelos en una carpeta gdal, dentro de la carpeta lib del Tomcat
- Importante ahora, crear dos variables de entorno. Yo las he creado en el catalina.sh:
export GDAL_DATA=/usr/share/gdal-data
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/lib:$CATALINA_HOME/lib/gdal:/usr/local/apr/lib
- Por último, también en el catalina.sh añadir el parámetro -Djava.library.path=”$LD_LIBRARY_PATH” al arranque de java (Ojito con las comillas si copias texto de aquí)
Ahora si reiniciamos el Tomcat, veremos que en el catalina.out, nos dice que está cargando GDAL. Y en el dashboard de Geoserver veremos nuevos almacenes de datos.
Oct 7, 2013 6:29:18 PM it.geosolutions.imageio.gdalframework.GDALUtilities loadGDAL
INFO: GDAL Native Library loaded (version: 1.9.2)
Lo que me ocurría a mí es que al intentar cargar un almacén a partir de un archivo ECW, o bien no hacía absolutamente nada, o bien me saltaba este error en el log del Tomcat:
gdalinfo PNOA_MR_OF_ETRS89_HU29_h50_0185.ecw
terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_S_create
Aborted
Un gdalinfo sobre el ECW, nos debería lanzar el mismo error.
Así, es como he llegado a la conclusión de intentar compilar GDAL en la propia máquina.
Compilar GDAL con soporte a ECW en CentOS
- Compilar e instalar ECW SDK 3.3 (Fuente)
- Muy importante una vez descargado el código fuente de libECW y extraído, hay que aplicar este patch, que es el que resuelve el bug. De lo contrario nada de esto funcionará
wget -nd https://api.opensuse.org/public/source/home:jluce2:GEO/libecwj/libecwj2-3.3.tar.bz2
tar -xvjf libecwj2-3.3.tar.bz2
cd libecwj2-3.3
#Aplicar el parche: Haced esto a mano o como queráis, pero hacedlo. Las instrucciones aquí
./configure
make
sudo make install
- Descargar el código fuente de GDAL. Yo lo he probado con la versión 1.9.2, no sé si funcionará con versiones posteriores.
- Compilar GDAL con soporte a ECW (Fuente)
cd /path/to/gdal
./configure --with-ecw=/usr/local
make
- Por último, copiar el libgdal.so que nos ha generado la compilación en la carpeta $CATALINA_HOME/lib/gdal que es donde previamente hemos dejado caer los binarios de gdal.
- Un ldd sobre libgdal.so nos debería resolver todas las dependencias y apuntar a la librería libecw que hemos compilado
Publicando Ortofotos de PNOA en Geoserver
El resultado es este bonito raster de PNOA servido por Geoserver. Sabe mejor cuando te lo cocinas tú mismo 🙂