TileCache en Windows


Las últimas semanas he estado trasteando con MapServer y OpenLayers en el curro y llegué a la conclusión de que tenía que “cachear” algunas de las grandes imágenes que usamos.

El problema llegó cuando intenté montar un TileCache de MapLabs y no estaba tan fácil como sugerían en su página. En parte por el famoso proxydel curro en parte porque voy un poco a bastonazos con este asunto y no encuentro un solo sitio dónde me expliquen cómo se hace.

Al final después de marear mucho la perdiz conseguí que funcionara y ahora os explico, en modo recetario, qué es lo que hice:

Primero:

Bajar la aplicación de la página de TileCache

Segundo:

Descomprimir en un directorio accesible vía web

C:\xampp\htdocs\tilecache

Tercero:

Permitir la ejecución CGI en el directorio,añadiendo la siguiente sección en httpd.conf

# Tilecache
<Directory "C:/xampp/htdocs/tilecache"> 
AddHandler cgi-script .cgi Options +ExecCGI +Indexes
</Directory>

Cuarto:

Editar la primera línea de tilecache.cgipara que apunte al ejecutable de Python

#!C:/Python24/python.exe

Quinto:

Modifica tilecache.cfg para que guarde elcache en el directorio temporal deseado

[cache]
type=Disk
base=d:/temp/tilecache

Sexto:

Modifica tilecache.cfg para que cargue lacapa WMS correspondiente (Con diferencia este es el paso que más por el… dió). Los son retornos de carro que hay que eliminar en tu fichero, puestos aquí para que quepan en el ancho del blog.

[rhyncho]
type=WMSLayer
url=http://tuservidor/cgi-bin/rhynchoms? ¶
        map=c:/xampp/htdocs/mapas/tuarchivo.map
layers=BaseCarto
extension=png
srs=EPSG:23030
extent_type=loose
bbox=620193, 4189704, 819285, 4519881
resolutions=599.7218983723972,¶
                  88.19439681947017,¶
                  17.63887936389403,¶
                  8.819439681947015,¶
                  3.527775872778806,¶
                  1.763887936389403,¶
                  0.8819439681947016

Desde el primer día la configuración del Mapserver y de Openlayers me ha llevado por la calle de la amargura, sobretodo con el tema de las resoluciones y las escalas, para obtener qué resoluciones correspondían a los niveles de zoom que tengo definidos me tocó añadir en el código estándar de Openlayers (en la función init) las siguientes líneas:

var str = "";
for (var i = 0; i < myScales.length; i++) {
    str +=
      OpenLayers.Util.getResolutionFromScale(
          myScales[i], 'm'
       ) + ',';
}
var element = document.getElementById('output'); 
element.innerHTML = str;

y añadir un contenedor <div>llamado outputpara que mostrara el resultado.

Séptimo:

Carga en el openlayers

base = new OpenLayers.Layer.WMS( "Base cartografica",
   "http://tuservidor/tilecache/tilecache.cgi",
  {layers: 'rhyncho' });

La receta es un poco “as is”, espero que os sirva, aunque uno de los inconvenientes de dar palos de ciego es que no voy a poder contestarlas preguntas con soltura, sin embargo si hay preguntas o sugerencias serán bien atendidas

¡Saludos!

About these ads

10 pensamientos en “TileCache en Windows

  1. xurxo

    ¡Muy guapo si señor! 

    Ahora falta que nos cuentes en unas semanitas qué tal te funciona esto "en producción" porque desde luego puede sernos muy interesante para varios proyectos.

    A ver si sale una versión "java" de este proyecto (creo que en había algún proyecto en el Google Summer of Code del año pasado, lo miraré) porque muchas veces meter un componente en otro lenguaje de programación tira para atrás a los clientes.

    Saludos! 

    --
    XuRxO
    
  2. Anónimo

    Muy bueno me dio una idea de las cosas que ando haciendo bien y mal, por lo pronto yo estoy usando mapnick para generar los tiles, espero decirte pronto como me va

  3. vehrka

    Bueno, pues ya nos contarás que tal esas experiencias con mapnick.

    Podrías contarnos también si vais a poner el servidor en producción o cuantos accesos piensas que puedes tener, el rendimiento de la máquina con OpenLayers se estaba resintiendo un poco y no sé si es un problema de configuración.

    Nos gustaría saber de la experiencia de la gente con este software y aprender un oco más.

    ¡Un saludo!


    Pedro-Juan Ferrer Matoses (vehrka)

  4. Anónimo

    Buenos días.

    Estoy intentando configurar tileCache (usando tilecache.cgi) con mapserver y openlayer.

    cuando uso el ejemplo del fichero tilecache.cfg:

    [basic]
    type=WMS
    url=http://labs.metacarta.com/wms/vmap0
    
    extension=png
    
    La apliacacion funciona y se me generan en mi PC las distintas celdas cacheadas.
    
    El problema esta cuando quiero conectar via WMS a través de MapServer y usando mi fichero .map
    
    Se me muestran un conjunto de celdas rosas y no me da ningun tipo de error.
    
    Estaría muy agradecido si me pudiéseis ayudar.
    
    Saludos.
    

     

  5. vehrka

    Hola visitante.

    Yo tuve problemas parecidos a los tuyos, como se ve en la
    parte del post en la que me quejo de la configuración de resoluciones.

    Asegurate que  el srs, el extent, el bbox y la
    resolución son las adecuadas y coinciden con lo que te sirve Mapserver
    (de ahí el truco de mirar las resoluciones con OpenLayers) ya que si no
    te cansarás de ver teselas “rosas”.

    ¡A ver si hay suerte!

    Un saludo.

    Pedro-Juan Ferrer Matoses (vehrka)

  6. Anónimo

    Buenos días, estoy intentando configurar Tile-Cache con MapServer
    y OpenLayer pero por ahora solo queda en el intento.

    Mi configuración es la siguiente:

    Apache
    Mapserver
    tilecache  2.04
    python-2.5.2
    Windows XP

    Los ficheros de configuración son:

    tilecache.cfg:

    [Alaska]
    type=WMSLayer
    mapfile=C:/ms4w/apps/ka-map-1.0/gmap/mapas/gmap75.map
    extension=png
    size=256,256
    bbox=-2200000, -712631, 3072800, 3840000
    resolutions=10583.327618336418,5291.663809168209,3527.775872778807,2645.8319045841044,1763.8879363894034,881.9439681947017,529.166380916821,352.7775872778807,264.5831904584105,17.63887936389403,8.819439681947015,5.291663809168209,3.527775872778806,2.6458319045841043,1.763887936389403,0.8819439681947016,0.35277758727788067
    layers=bathymetry,land_fn
    srs=EPSG:42304
    extent_type=loose

    Nota*: El campo resolutions lo he sacado usando el procedimiento que describiste más arriba 

    Fichero de mapas: gmap75.map

    #
    # Start of GMAP map file
    #
    #
    NAME GMAP_DEMO
    STATUS ON
    SIZE 400 300
    SYMBOLSET ../etc/symbols.sym
    EXTENT -2200000 -712631 3072800 3840000
    UNITS METERS
    SHAPEPATH "../data"
    IMAGECOLOR 255 255 255
    FONTSET ../etc/fonts.txt

    # PROYECCIÓN  UTM
      PROJECTION
        "init=EPSG:42304"  
      END
    #
    # Start of web interface definition
    #
    WEB
      MINSCALE 2000000
      MAXSCALE 50000000
    #
    # On Windows systems, /tmp and /tmp/ms_tmp/ should be created at the root
    # of the drive where the .MAP file resides.
    #
      IMAGEPATH "/ms4w/tmp/ms_tmp/"
      IMAGEURL "/ms_tmp/"
     
      METADATA
          "wms_title"                    "Alaska"
                "wms_onlineresorce" "http://127.0.0.1/cgi-bin/mapserv.exe?map=C:/ms4w/apps/ka-map-1.0/gmap/mapas/gmap75.map&&quot;
                "wms_srs"                        "EPSG:42304"
      END
    END
    …………………..

     Fichero index.html

      <script type="text/javascript">
                var map;
                function init(){
              
                                map = new OpenLayers.Map(‘map’,
                                                 { controls: [
                                                 new OpenLayers.Control.PanZoomBar(),
                                                 new OpenLayers.Control.MouseDefaults(),
                                                 new OpenLayers.Control.MousePosition(),
                                                 new OpenLayers.Control.OverviewMap(),
                                                 new OpenLayers.Control.Permalink,
                                                 new OpenLayers.Control.LayerSwitcher
                                                 ],
                                                 units: ‘m’,
                                                 projection: ‘epsg:42304′,
                                                 //maxResolution: ‘auto’,
                                                 maxExtent: new OpenLayers.Bounds( -2200000, -712631, 3072800, 3840000 ),
                                                 scales: [ 30000000,15000000,10000000,7500000,5000000,2500000,1500000,1000000,750000,50000,25000,15000,10000,7500,5000,2500,1000 ],
                                                 minScale: 30000000,
                                                 maxScale: 2500
                                                 } );
                                    
                                    
                                           var urlArray = ["http://localhost/cgi-bin/mapserv.exe&quot;,
                                                                    "http://127.0.0.1/cgi-bin/mapserv.exe"%5D;
                                    
                                          var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
                        "http://labs.metacarta.com/wms/vmap0&quot;,
                        {layers: ‘basic’} );
                        
                    var jpl_wms = new OpenLayers.Layer.WMS( "Capa de Manzanas", urlArray,
                        {map:’C:/ms4w/apps/ka-map-1.0/gmap/mapas/gmap75_wms.map’,
                                            layers: ‘bathymetry,land_fn’,format: "image/png"} );
                        
                     
                    var dm_wms = new OpenLayers.Layer.WMS( "Tile Cache", "http://localhost/Openlayer/tilecache/tilecache.cgi?&quot;,
                        {layers: "Alaska", format: "image/png" });

                    jpl_wms.setVisibility(true);
                    ol_wms.setVisibility(false);
                    dm_wms.setVisibility(false);

                    map.addLayers([jpl_wms, dm_wms]);
                    if (!map.getCenter()) map.zoomToMaxExtent();
                    }
                                                
            </script>

    Cuando uso el servicio WMS que conecta con: http://labs.metacarta.com/wms/vmap0 se me generan en mi disco local las distintas celdas.

    Cuando uso openLayer directamente contra mapserver también me funciona.

    El problema esta cuando uso el servicio que ataca a tileCache (http://localhost/Openlayer/tilecache/tilecache.cgi?), todas la celdas se muestran de ese color que todos sabemos y estoy empezando a odiar.

    He probado de todo y no consigo nada. Estaria muy agradecido si alguien me diese alguna pista para intentar arreglar el problema.

    Saludos. 

  7. Anónimo

    holaaa  

     

      Necesito ayuda con tilecache,mapserver y openlayer…. esta es mi configuracion

     

    [ejemplo2]
    type=WMSLayer
    url=http://localhost/cgi-bin/mapserv.exe?map=c:/ms4w/Apache/htdocs/mapFile/mapas/IV_region.map
    layer=calle
    srs=EPSG:24719
    extent_type=loose
    extension=gif
    resolutions=0.036441265263157906,0.018220632631578953,0.009110316315789476,0.004555158157894738,0.036441265263157906,0.018220632631578953,0.009110316315789476,0.004555158157894738,0.002277579078947369,0.0011387895394736846,0.036441265263157906,0.018220632631578953,0.009110316315789476,0.004555158157894738,0.002277579078947369,0.0011387895394736846,0.0005693947697368423,0.00028469738486842114,0.00014234869243421057,0.00007117434621710528,0.00003558717310855264,0.00001779358655427632,0.00000889679327713816

    las resoluciones las saque de la siguiente manera:

     zoom=map.getZoom();
             scale=map.getScale();
             var str = document.getElementById(‘output’).innerHTML;
              
              str +=OpenLayers.Util.getResolutionFromScale(scale, ‘dd’) + ‘,';
             
             var element = document.getElementById(‘output’);
             element.innerHTML = str;

     

    El problema es que me sale el siguiente error y ya no se que puede ser:

    An error occurred: Current x value -68.477244 is too far from tile corner x -68.052433

    ayuda pleasee

     

  8. Anónimo

    Antes que nada saludos, mire he hecho cada uno de los pasos que estan explicados al inicio pero no me ha funcionado. Tengo ms4w, instale python y descargue el tilecache, pero nada. Agradeceria cualquier ayuda al respecto

Los comentarios están cerrados.