15 votos

Openlayers 3, ¿Cuál es el equivalente de layer.redraw (true)?

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 ().

10voto

Jay Puntos 6

Esta es la forma en que se puede actualizar en un vector de origen de cada 5 segundos, a partir de un servicio web de regresar características en un GeoJSON documento:

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 utiliza aquí para solicitar los datos a través de Ajax ($.ajax), pero, obviamente, puede utilizar la biblioteca de su elección.

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

9voto

VincentDEJ Puntos 115

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);
 

3voto

Dirk Thannhäuser Puntos 176

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.

1voto

Robert Koritnik Puntos 731

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, tiene los métodos map.render() y map.renderSync() .

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