Eu tenho uma camada geojson no meu aplicativo OL3 que desejo redesenhar a cada 5 segundos (para mostrar o movimento no mapa).
Como eu faço isso ? Não foi possível encontrar o equivalente a Layer.redraw ().
openlayers
Alophind
fonte
fonte
Respostas:
É assim que você pode atualizar uma fonte de vetor a cada 5 segundos, a partir de um serviço da Web que retorna recursos em um documento GeoJSON:
O jQuery é usado aqui para solicitar os dados através do Ajax (
$.ajax
), mas você pode obviamente usar a biblioteca de sua escolha.Esse trecho de código também pressupõe que as projeções do mapa sejam "EPSG: 3857" (web mercator) e que as coordenadas nos documentos do GeoJSON sejam longitudes e latitudes.
fonte
vectorSource
e devegeojsonSource
ser mesclado?Eu sei que essa pergunta é antiga, mas finalmente encontrei uma solução para atualizar uma camada nos openlayers 3.
Você precisa atualizar os parâmetros da origem da camada assim:
fonte
updateParams
método; OL3.18.2 apenas mostra que paraImageArcGISRest
,ImageMapGuide
,ImageWMS
,TileArcGISRest
eTileWMS
, e não para, por exemplo,ol.source.Vector
.Você pode atualizar uma camada WFS com
myLayer.getSource().clear()
.fonte
clear()
qualquer recurso existente será removido do mapa imediatamente e somente será adicionado novamente após o recebimento da resposta HTTP. Isso vale tanto para a especificação de um valor paraVectorOptions#url
e paraVectorOptions#loader
. Para dados em tempo real, executar manualmente algumas magias do WebSockets ou XHR e depois fazer chamadasgetSource().clear()
seguidas porgetSource().addFeatures(...)
pode parecer melhor para o usuário final.Com o OL2, usei uma estratégia de atualização de camada que não foi adicionada ao OL3. Abaixo está uma função de auto-chamada que usará uma solicitação ajax para buscar o GeoJSON e, em seguida, lê-lo e adicioná-lo a uma fonte.
Espero que isto ajude.
fonte
Isso funciona perfeito para camadas:
conforme http://openlayers.org/en/latest/apidoc/ol.layer.Vector.html#changed
fonte
layer.changed();
funciona perfeitamente (camadas) para camadas. A descrição da documentaçãoIncreases the revision counter and dispatches a 'change' event.
não é realmente útil. Como o uso do método alterado () responde à pergunta sobre o redesenho do mapa a cada 5 segundos?layer.changed();
não teve efeito para mim, massource.changed();
fez o truque.Não há necessidade de atualizar explicitamente. Cada vez que você atualiza o conteúdo de uma camada, o mapa é atualizado solicitando uma nova renderização de quadro.
Para forçar a renderização manualmente, você tem
map.render()
emap.renderSync()
métodos.fonte