Haciendo tile cache de WMS en ubuntu
Tile cache en WMS es una técnica que consiste en tener el mapa cortado en trocitos y cacheado de forma que el servidor no tiene que estar generando una imagen cada vez que se hace una petición. De esta manera trabaja kamap, google maps, etc…
Estábamos intentando poner entre en el server (Mapserver en nuestro caso) y el cliente (Openlayers en nuestro caso) algo que nos hiciera es tile cache y que fuera lo más independiente de ambos que se pudiera.
Empezamos a tratar el tema usando GeoWebCache, tenía muy buena pinta, parecía fácil de configurar y ligerito. Nos metimos en faena y después de un rato nos sale:
org.geowebcache.GeoWebCacheException: GeoWebCache only handles EPSG:4326 and EPSG:900913!
¡Sólo soporta esas dos proyecciones!
Buceando un poco en la documentación parece ser que estas dos proyecciones son las recomendadas por el OGC para hacer tile cache
http://blog.geoserver.org/2008/03/12/geowebcache-070/
Tras trastear un poco decidimos descartarlo por ahora y nos lanzamos a buscar alternativas y había dos (Gracias Xurxo). En primer lugar ka-map! pero usando como cliente openlayers.Esta opción la descartamos por su fuerte dependencia de mapserver y porque estamos esperando a la version siguiente que funcionará ya con openlayers, aunque me quedé con ganas de probarlo pero no teníamos tanto tiempo y en segundo lugar TileCache de mercarta. Es una pequeña librería de python que funciona sobre apache y fue por la que al final nos decantamos.
Voy a escribir aqui las cosas que tuvimos que hacer para que nos funcionara TileCache.
En primer lugar es necesario que nuesto apache ejecute python.
Para instalar apache2 y el mod_python seguí al pie de la letra este post y me funciono directamente
http://tru3n0.com/index.php/2007/10/18/instalar-apache2-mod_python-en-debian/
Y ahora viene lo que es la configuración en sí del TileWebCache
1 . Bajar la aplicación de http://www.tilecache.org/
2. El tar que bajamos, lo descomprimimos en la carpeta accesible por apache, típicamente en ubuntu y con todo bajado por apt esta carpeta es /var/www con lo que el directorio de tilecache será
/var/ww/tilecache
Al descomprimir en la carpeta tilecache hay varios archivos en el directorio. Como lo estamos haciendo con mod_python, el archivo tilecache.cgi debe ser renombrado a tilecache.py.
3. Editamos el archivo
/etc/apache2/sites-available/default (en mi caso)
y añadimos:
<Directory /var/www/tilecache/> AddHandler mod_python .py PythonHandler TileCache.Service PythonOption TileCacheConfig /var/www/tilecache/tilecache.cfg PythonPath "['var/www/tilecache/'] + sys.path PythonDebug On </Directory>
La opción PythonPath arregla el error:
ImportError: No module named TileCache.Service
Este error me estuvo volviendo loco durante un buen rato, evidentemente ahí hay que poner
los paths que tenga cada uno a tilecacache
Después de tocar este archivo hay que reiniciar apache, pero ya podemos ver si funciona tilecache poniendo en nuestro navegador lo siguiente:
http://localhost/tilecache/tilecache.py?LAYERS=basic&SERVICE=WMS%20&VERSION=1.1.1&REQUEST=GetMap&SRS=EPSG:4326&BBOX=-180,-90,0,90%20&WIDTH=256&HEIGHT=256
Si nuestro apache está montado en otro path o con otra ip, pues habrá que poner la url correctamente
4. Tile Cache ya funciona, ahora tenemos que añadir nuestras propias capas para tener una instalación completa. Esto se hace editando el archivo tilecache.cfg .
[cache] type=Disk base=/temp/tilecache
Con el parámetro anterior se fija el path donde se guardan los tiles en el disco
Para conocer lo que significan todos los parámetros debemos consultar:
http://www.tilecache.org/readme.html#configuration
En mi caso el archivo de configuración es:
type=WMSLayer url=http://localhost:80/cgi-bin/mapserv?map=/var/www/cultura/cultura.map layers=municipios extension=png srs=EPSG:23030 extent_type=loose bbox=107897, 4201010, 360935, 4490145 resolutions= 564.716797,282.358398,141.179199,70.589600,35.294800,17.647400,8.823700,4.411850,2.205925,1.102962,0.551481,0.275741
Los parámetros mś complicados de averiguar fueron las resoluciones disponibles, pero con la ayuda de firebug, viendo las peticiones que hacía mi cliente te openlayers para cada nivel de zoom pude ir averiguando las resoluciones, segun la documentación, si fijamos maxresolution tile cache automáticamente genera un array con las resoluciones permitidas.
Funciona bastante bien por ahora, tendremos que verlo en el servidor…
Add comment Julio 24, 2008





