Mam aplikację geojson w mojej aplikacji OL3, którą chcę przerysować co 5 sekund (aby pokazać ruch na mapie).
Jak mam to zrobić ? Nie można znaleźć odpowiednika Layer.redraw ().
openlayers
Alofind
źródło
źródło
Odpowiedzi:
W ten sposób możesz odświeżać źródło wektora co 5 sekund z usługi zwracającej funkcje w dokumencie GeoJSON:
jQuery służy tutaj do żądania danych za pomocą Ajax (
$.ajax
), ale oczywiście możesz użyć wybranej biblioteki.Ten fragment kodu zakłada również, że rzutami mapy jest „EPSG: 3857” (mercator sieciowy) i że współrzędne w dokumentach GeoJSON to długości i szerokości geograficznej.
źródło
vectorSource
i powiniengeojsonSource
zostać scalony?Wiem, że to pytanie jest stare, ale w końcu znalazłem rozwiązanie, aby odświeżyć warstwę w openlayers 3.
Musisz zaktualizować parametry źródła warstwy w następujący sposób:
źródło
updateParams
metodę; OL3.18.2 tylko pokazuje, że dlaImageArcGISRest
,ImageMapGuide
,ImageWMS
,TileArcGISRest
iTileWMS
, a nie do npol.source.Vector
.Możesz odświeżyć warstwę WFS
myLayer.getSource().clear()
.źródło
clear()
wszelkie istniejące funkcje zostaną natychmiast usunięte z mapy i dodane ponownie dopiero po otrzymaniu odpowiedzi HTTP. Dotyczy to zarówno określenia wartości dla, jakVectorOptions#url
i dlaVectorOptions#loader
. W przypadku danych w czasie rzeczywistym ręczne wykonanie niektórych magii WebSockets lub XHR, a następnie wywołanie,getSource().clear()
a następnie wywołaniegetSource().addFeatures(...)
może wyglądać lepiej dla użytkownika końcowego.W OL2 użyłem strategii odświeżania warstw, która nie została dodana do OL3. Poniżej znajduje się funkcja wywoływania, która użyje żądania ajax do pobrania GeoJSON, a następnie przeczytaj go i dodaj do źródła.
Mam nadzieję że to pomoże.
źródło
Działa to idealnie w przypadku warstw:
zgodnie z http://openlayers.org/en/latest/apidoc/ol.layer.Vector.html#changed
źródło
layer.changed();
działa idealnie (ly) dla warstw. Opis dokumentacjiIncreases the revision counter and dispatches a 'change' event.
nie jest zbyt pomocny. W jaki sposób użycie metody zmienionej () odpowiada na pytanie dotyczące przerysowywania mapy co 5 sekund?layer.changed();
nie miało dla mnie żadnego efektu, alesource.changed();
zrobiło to samo.Nie ma potrzeby wyraźnego odświeżania. Za każdym razem, gdy aktualizujesz zawartość warstwy, mapa jest odświeżana z żądaniem renderowania nowej ramki.
Aby wymusić ręczne renderowanie, masz
map.render()
imap.renderSync()
metody.źródło