3 votos

Forzar a openlayers a no utilizar la caché del navegador para la actualización de los azulejos

Utilizo OpenLayers.Layer.XYZ para mostrar mosaicos del servidor TileStache sin utilizar la opción de caché del servidor. Sin embargo, observo que los mosaicos permanecen en la caché (probablemente la del navegador) hasta que se actualiza toda la página con Ctrl-F5.

Si quiero volver a dibujar la capa XYZ, no funciona porque el mapa utiliza la caché del navegador. ¿Hay alguna manera de forzar el mapa para que no utilice esa caché? Así que podría refrescar la capa pidiendo azulejos frescos desde el servidor.

var map = new OpenLayers.Map('map',
          { projection: new OpenLayers.Projection("EPSG:3857"),
            numZoomLevels: 20 });

var tiledLayer = new OpenLayers.Layer.XYZ('TMS',
                "{{ tmsURL }}1.0/layer/{{ shapefile.id }}/${z}/${x}/${y}.png?"+ new Date().getTime());

map.addLayer(tiledLayer);
tiledLayer.redraw(true); //does not make new GET requests to the server

3voto

Tim Puntos 41

Jakub Kania tenía razón en su comentario de que hay que añadir la fecha/hora a la url para que sea diferente de la url de los azulejos en la caché. Para ello hay que subclasificar OpenLayers.Layer.XYZ:

OpenLayers.Layer.CustomXYZ = OpenLayers.Class(OpenLayers.Layer.XYZ, {
  getURL: function () {
    var url = OpenLayers.Layer.XYZ.prototype.getURL.apply(this, arguments);
    return url + '?time='+ new Date().getTime();
  }
});

var tiledLayer = new OpenLayers.Layer.CustomXYZ('TMS',
                "{{ tmsURL }}1.0/layer/{{ shapefile.id }}/${z}/${x}/${y}.png");

tiledLayer.redraw(true);

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X