Haciendo tile cache de WMS en ubuntu
Julio 24, 2008
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…
Entry Filed under: General. Etiquetas: geowebcache, mapserver, openlayers, SIG, tilecache, tiling, wms.
8 Comments Add your own
Leave a Comment
Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Trackback this post | Subscribe to the comments via RSS Feed
1.
Casc | Septiembre 5, 2008 at 8:02 am
Hola, me gustaría, si pudiese ser, que pudierais indicarme un poco más detenidamente el tema de la obtención de las resoluciones mediante firebug, me sería de gran ayuda. Si quereis usad mi e-mail para contactar conmigo.
Muchas gracias de antemano.
Un saludo
2.
casc | Septiembre 15, 2008 at 7:35 am
Saludos, me gustaría que me indicaras cómo conseguir las resoluciones mediante firebug, ya que tengo que hacer una tilecache y creo que me voy a atascar por ahi. Un saludo
3.
mdelacalle | Septiembre 15, 2008 at 8:33 am
No es nada complicado, te lo digo de memoria porque ahora no lo tengo delante. Con tu cliente ligero (openlayers en mi caso), seleccionamos las escalas a las que queremos trabajar, y hacemos una petición a la escala seleccionada a TileCache, como es normal nos dará error, y no nos saldrá el mapa, nos vamos a firebug y en la pestaña NET podemos ver qué petición WMS hemos hecho. La llevamos al navegador, hacemos de nuevo la petición con esa url y nos devuelve un mensaje que dice aproximadamente – ” la resolución n.nnnnn no la tiene tile cache”, esa será la resolución que hay que incluir en la configuración de tile cache para tener esa escala de tile.
Si sabes un boundig box adecuado a la escala que necesites puedes hacer directamente una petición WMS y tilecache te devolverá la resolución para esa escala y no te hace falta ni cliente ligero ni firebug.
Espero haberte ayudado
4.
Casc | Septiembre 16, 2008 at 8:08 am
Muchas gracias, en cuanto disponga de los recursos comenzaré la andadura con tilecaché y ya te contaré qué tal me va.
Un saludo y gracias.
PD: Perdón por los 2 post, me metí mas tarde y ví que el anterior no estaba, por eso volví a escribir.
5.
Casc | Septiembre 16, 2008 at 10:39 am
Espero que no te moleste que te haga otra pregunta…
me preguntaba si tenías idea de cómo hacer funcionar una tilecaché sobre Flamingo en lugar de Openlayers, puesto que el primero no soporta tiles segun tengo entendido había que fabricar un componente para que sí las soportara. ¿alguna idea?
6.
Arturo | Noviembre 6, 2008 at 6:18 pm
Hola, oye y puedo trabajarlo junto con geoserver??
Gracias
7.
mdelacalle | Noviembre 6, 2008 at 9:11 pm
Extraido de http://tilecache.org/
“TileCache provides a Python-based WMS-C/TMS server, with pluggable caching mechanisms and rendering backends. In the simplest use case, TileCache requires only write access to a disk, the ability to run Python CGI scripts, and a WMS you want to be cached. With these resources, you can create your own local disk-based cache of any WMS server, and use the result in any WMS-C supporting client, like OpenLayers, or any TMS supporting client, like OpenLayers and worldKit. ”
Como ves se puede, no está mal echarle un ojo a la documentación antes de empezar. Por otra parte con Geoserver viene incluido GeoWebCache, del cual tambiñen se habla en el post
Saludos
8.
Fred | Mayo 7, 2009 at 8:44 pm
Hola, Interesante lo que indicas. Estoy realizando algo simila, pero en windows. Trabajo tilecache y he realizado las pruebas que mensionas y me funciona todo ok.
Ademas de tilecache, trabajo con mapnik y xml. Cuando llamo al xml es el problema.
Me aparecen recuadros rozados, cuando voy a las propiedades de estos recuadros veo lo siguiente:
http://localhost/tilecache/tilecache.py/1.0.0/osm/15/16592/21495.png?FORCE=1
pero no muestra imagen.
Creo estar cerca, pero no se a que va este error.
Si sabes de algo, te agradecería la ayuda.
Saludos
FC