J'ai une couche geojson dans mon application OL3 que je veux redessiner toutes les 5 secondes (pour montrer le mouvement sur la carte).
Comment fait-on ça ? Impossible de trouver l'équivalent de Layer.redraw ().
openlayers
Alophind
la source
la source
Réponses:
Voici comment actualiser une source vectorielle toutes les 5 secondes, à partir d'un service Web renvoyant des fonctionnalités dans un document GeoJSON:
jQuery est utilisé ici pour demander les données via Ajax (
$.ajax
), mais vous pouvez évidemment utiliser la bibliothèque de votre choix.Cet extrait de code suppose également que les projections de la carte sont "EPSG: 3857" (web mercator) et que les coordonnées dans les documents GeoJSON sont les longitudes et les latitudes.
la source
vectorSource
et devraitgeojsonSource
être fusionné?Je sais que cette question est ancienne mais j'ai finalement trouvé une solution pour rafraîchir une couche sur openlayers 3.
Vous devez mettre à jour les paramètres de la source de couche comme ceci:
la source
updateParams
méthode; OL3.18.2 montre seulement pourImageArcGISRest
,ImageMapGuide
,ImageWMS
,TileArcGISRest
etTileWMS
, et non pour, par exemple,ol.source.Vector
.Vous pouvez actualiser une couche WFS avec
myLayer.getSource().clear()
.la source
clear()
toutes les fonctionnalités existantes seront immédiatement supprimées de la carte et ne seront ajoutées à nouveau qu'après avoir reçu la réponse HTTP. Cela est vrai à la fois pour spécifier une valeur pourVectorOptions#url
et pourVectorOptions#loader
. Pour les données en temps réel, faire manuellement des WebSockets ou de la magie XHR, puis appelergetSource().clear()
puisgetSource().addFeatures(...)
pourrait sembler mieux à l'utilisateur final.Avec OL2, j'ai utilisé une stratégie de rafraîchissement de couche qui n'a pas été ajoutée à OL3. Vous trouverez ci-dessous une fonction auto-appelante qui utilisera une requête ajax pour récupérer le GeoJSON, puis le lire et l'ajouter à une source.
J'espère que cela t'aides.
la source
Cela fonctionne parfaitement pour les couches:
selon http://openlayers.org/en/latest/apidoc/ol.layer.Vector.html#changed
la source
layer.changed();
fonctionne parfaitement (ly) les calques. La description de la documentationIncreases the revision counter and dispatches a 'change' event.
n'est pas vraiment utile. Comment l'utilisation de la méthode changed () répond-elle à la question de redessiner la carte toutes les 5 secondes?layer.changed();
n'a eu aucun effet pour moi, mais asource.changed();
fait l'affaire.Il n'est pas nécessaire de rafraîchir explicitement. Chaque fois que vous mettez à jour le contenu d'une couche, la carte est actualisée et demande un nouveau rendu de cadre.
Pour forcer le rendu manuellement, vous disposez des méthodes
map.render()
etmap.renderSync()
.la source