¿Equivalente de layer.redraw (true) en OpenLayers 3?

13

Tengo una capa geojson en mi aplicación OL3 que quiero volver a dibujar cada 5 segundos (para mostrar el movimiento en el mapa).

¿Cómo lo hago? No se pudo encontrar el equivalente de Layer.redraw ().

    
pregunta Alophind 07.10.2014 - 21:37

6 respuestas

9

Así es como puede actualizar una fuente vectorial cada 5 segundos, desde un servicio web que devuelve características en un documento GeoJSON:

var vectorSource = new ol.source.Vector();
var geojsonFormat = new ol.format.GeoJSON();

window.setTimeout(function() {
  $.ajax('http://example.com/data.json', function(data) {
    var features = geojsonFormat.readFeatures(data
        {featureProjection:"EPSG:3857"});
    geojsonSource.clear();
    geojsonSource.addFeatures(features);
  });
}, 5000);

jQuery se usa aquí para solicitar los datos a través de Ajax ( $.ajax ), pero obviamente puede usar la biblioteca de su elección.

Este fragmento de código también supone que las proyecciones del mapa son "EPSG: 3857" (web mercator) y que las coordenadas en los documentos de GeoJSON son longitudes y latitudes.

    
respondido por el erilem 08.11.2014 - 22:23
8

Sé que esta pregunta es antigua pero finalmente encontré una solución para actualizar una capa en Openlayers 3.

Tienes que actualizar los parámetros de la fuente de la capa de esta manera:

var source = yourLayer.getSource();
var params = source.getParams();
params.t = new Date().getMilliseconds();
source.updateParams(params);
    
respondido por el VincentDEJ 19.10.2015 - 11:59
4

Puedes actualizar una capa WFS con myLayer.getSource().clear() .

    
respondido por el dbaston 18.12.2015 - 23:24
3

Con OL2 usé una estrategia de actualización de capas que no se ha agregado a OL3. A continuación se muestra una función de auto llamada que usará una solicitud ajax para obtener el GeoJSON y luego leerlo y agregarlo a una fuente.

var yourSource = new ol.source.GeoJSON();

//add this source to a layer, the layer to a map with a view etc
...

//now fetch the data
var fetchData = function () {
    jQuery.ajax(url,
    {
        dataType: 'json',
        success: function (data, textStatus, jqXHR) {
            yourSource.clear(); //remove existing features
            yourSource.addFeatures(yourSource.readFeatures(data));
        },
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(errorThrown);
        }
    });

    //call this again in 5 seconds time
    updateTimer = setTimeout(function () {
        fetchData();
    }, 5000);
};
fetchData(); //must actually call the function!

Espero que esto ayude.

    
respondido por el Jon Lynch 08.11.2014 - 22:12
2

Esto funciona perfecto para capas:

layer.changed();

según enlace

    
respondido por el Tomas P. R. 25.11.2016 - 11:49
1

No hay necesidad de actualizar explícitamente. Cada vez que actualiza el contenido de una capa, el mapa se actualiza solicitando una nueva representación de cuadros.

Para forzar la representación manualmente, tienes los métodos map.render() y map.renderSync() .

    
respondido por el EricSonaron 08.11.2014 - 21:43

Lea otras preguntas en las etiquetas