Recarregando um arquivo CSV no QGIS?

9

Eu uso o QGIS para ilustrar os resultados da minha simulação Matlab. O Matlab produz um arquivo CSV conectado a um shapefile no QGIS.

No momento, tenho que fechar e reabrir o QGIS para mostrar os novos resultados da simulação Matlab.

É possível recarregar a tabela de atributos do arquivo CSV sem fechar e reabrir o QGIS?

Edgar
fonte
Obrigado @ Jason, sua dica funcionou como um encanto para mim - usando o QGIS 3.10, a opção está em properties-> source ! [ Propertiescreatespatialindex ] ( i.stack.imgur.com/5G3y5.png )
Hannes Buhrmann

Respostas:

3

Posso sugerir um fluxo de trabalho alternativo que, embora não seja necessariamente mais fácil do que fechar e abrir o QGIS a cada vez, possa fazer mais sentido:

  • Importar seu shapefile para spatialite
  • Importe o CSV para o espacial (usando a opção "Virtual TXT / CSV)
  • Crie uma visualização espacial em spatialite, juntando-se à tabela espacial (shapefile) na tabela CSV virtual

Agora, você pode exibir a vista no QGIS como qualquer camada espacial e usar os valores JOINed de spatialite. Porém, sempre que o CSV for recriado, você precisará DROP a tabela CSV virtual e vincular novamente a ela. Em seguida, uma atualização no QGIS mostrará os novos valores. Isso leva apenas um momento e, além do mais, você pode definir muitas visualizações e manter as anteriores, se necessário ...

HTH

Micha
fonte
2

Para quem ainda procura uma resposta para isso sem usar um formato espacial, encontrei algo que funciona.

Se você possui um csv e usa uma associação para associá-lo a uma camada espacial, uma das opções da associação é armazenar em cache a camada. Você pode acessar essa opção se acessar as propriedades da sua camada, acessar os dados associados e clicar em editar associação. Se você desabilitar a opção de cache , poderá recarregar a camada de dados após a alteração do csv e acionar uma nova pintura do seu mapa para obter uma visualização atualizada do mapa.

Você pode recarregar e repintar no console Python. Primeiro, você precisa definir um nome para a tela do mapa, o csv e para a camada:

mc = iface.mapCanvas()
layer=mc.currentLayer()
csv_layer=mc.currentLayer()

Certifique-se de ter as camadas ativas ao nomeá-las no console ao usar o método currentLayer (deve ser a 'camada atual').

Então, se você definir a opção de cache como desativada para sua associação, poderá alterar o csv e, em seguida, usar os dois comandos a seguir no console do Python para redesenhar seu mapa:

csv_layer.reload()
layer.triggerRepaint()

Isso funcionou para mim, mas eu só tinha 100 linhas de dados. Pode ser que as operações sejam lentas sem armazenamento em cache quando você tiver um conjunto de dados maior.

Sanne de Bruin
fonte
0

Abra as propriedades da camada do shapefile e vá para General- Coordinate reference system, clique em Create spatial index. Depois de concluído, o shapefile é atualizado.

Jason
fonte