Ich habe eine Geojson-Ebene in meiner OL3-App, die ich alle 5 Sekunden neu zeichnen möchte (um die Bewegung auf der Karte anzuzeigen).
Wie mache ich es ? Konnte das Äquivalent von Layer.redraw () nicht finden.
openlayers
Alophind
quelle
quelle
Antworten:
So können Sie eine Vektorquelle alle 5 Sekunden über einen Webdienst aktualisieren, der Funktionen in einem GeoJSON-Dokument zurückgibt:
jQuery wird hier zum Anfordern der Daten über Ajax (
$.ajax
) verwendet, aber Sie können natürlich die Bibliothek Ihrer Wahl verwenden.In diesem Codeausschnitt wird außerdem davon ausgegangen, dass die Projektionen der Karte "EPSG: 3857" (Web Mercator) lauten und dass die Koordinaten in den GeoJSON-Dokumenten Längen- und Breitengrade sind.
quelle
vectorSource
undgeojsonSource
soll zusammengeführt werden?Ich weiß, dass diese Frage alt ist, aber ich habe endlich eine Lösung gefunden, um eine Ebene auf OpenLayer 3 zu aktualisieren.
Sie müssen die Parameter der Ebenenquelle folgendermaßen aktualisieren:
quelle
updateParams
Methode unterstützen. OL3.18.2 nur zeigt esImageArcGISRest
,ImageMapGuide
,ImageWMS
,TileArcGISRest
undTileWMS
, und nicht für zBol.source.Vector
.Sie können eine WFS-Ebene mit aktualisieren
myLayer.getSource().clear()
.quelle
clear()
werden vorhandene Features sofort aus der Karte entfernt und erst nach Erhalt der HTTP-Antwort wieder hinzugefügt. Dies gilt sowohl für die Angabe eines Wertes fürVectorOptions#url
als auch fürVectorOptions#loader
. Für Echtzeitdaten sieht es für den Endbenutzer möglicherweise besser aus,getSource().clear()
wenn Sie einige WebSockets- oder XHR-Aktionen manuell ausführen und anschließend aufrufen, gefolgt vongetSource().addFeatures(...)
.In OL2 habe ich eine Layer-Aktualisierungsstrategie verwendet, die nicht zu OL3 hinzugefügt wurde. Im Folgenden finden Sie eine selbstaufrufende Funktion, die eine Ajax-Anforderung verwendet, um den GeoJSON abzurufen, ihn dann zu lesen und einer Quelle hinzuzufügen.
Hoffe das hilft.
quelle
Dies funktioniert perfekt für Ebenen:
gemäß http://openlayers.org/en/latest/apidoc/ol.layer.Vector.html#changed
quelle
layer.changed();
perfekt (ly) für Ebenen funktioniert. Die DokumentationsbeschreibungIncreases the revision counter and dispatches a 'change' event.
ist nicht wirklich hilfreich. Wie beantwortet die Verwendung der changed () -Methode die Frage zum erneuten Zeichnen der Karte alle 5 Sekunden?layer.changed();
keine Wirkung für mich, hat abersource.changed();
den Trick gemacht.Eine explizite Aktualisierung ist nicht erforderlich. Jedes Mal, wenn Sie den Inhalt eines Layers aktualisieren, wird die Karte aktualisiert und fordert ein neues Frame-Rendering an.
Um das Rendern manuell zu erzwingen, haben Sie
map.render()
undmap.renderSync()
Methoden.quelle