Ricaricare un file CSV in QGIS?


9

Uso QGIS per illustrare i risultati della mia simulazione Matlab. Matlab produce un file CSV collegato a uno shapefile all'interno di QGIS.

Al momento devo chiudere e riaprire QGIS per mostrare i nuovi risultati della simulazione Matlab.

È possibile ricaricare la tabella degli attributi del file CSV senza chiudere e riaprire QGIS?


Grazie @Jason il tuo suggerimento ha funzionato come un incantesimo per me - usando QGIS 3.10 l'opzione è sotto proprietà-> fonte ! [ Propertiescreatespatialindex ] ( i.stack.imgur.com/5G3y5.png )
Hannes Buhrmann

Risposte:


3

Posso suggerire un flusso di lavoro alternativo che, sebbene non sia necessariamente più semplice della chiusura e dell'apertura di QGIS ogni volta, potrebbe avere più senso:

  • Importa il tuo shapefile in spatialite
  • Importa il CSV in spatialite (usando l'opzione "Virtual TXT / CSV)
  • Crea una vista spaziale in spatialite unendo la tabella spaziale (shapefile) alla tabella CSV virtuale

Ora, puoi visualizzare la vista in QGIS proprio come qualsiasi livello spaziale e usare i valori JOINed di spatialite. Tuttavia, ogni volta che viene ricreato il CSV, sarà necessario DROP la tabella CSV virtuale e ricollegarla. Quindi un aggiornamento in QGIS mostrerà i nuovi valori. Questo richiede solo un momento e, inoltre, puoi definire molte viste e mantenere quelle precedenti se necessario ...

HTH


2

Per chiunque sia ancora alla ricerca di una risposta senza utilizzare un formato spazialite, ho trovato qualcosa che funziona.

Se si dispone di un CSV e si utilizza un join per unirlo a un livello spaziale, una delle opzioni del join è memorizzare nella cache il livello. Puoi accedere a questa opzione se vai alle proprietà del tuo livello, quindi ai dati uniti e fai clic su modifica join. Se si disabilita l'opzione cache , è possibile ricaricare il livello dati dopo che il CSV è stato modificato e quindi attivare una riverniciatura della mappa per ottenere una visualizzazione della mappa aggiornata.

Puoi eseguire il ricaricamento e la riverniciatura in Python Console. Innanzitutto, devi definire un nome per la tela della mappa, il csv e per il livello:

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

Assicurati di avere i layer attivi quando li assegni nella console quando usi il metodo currentLayer (deve essere il 'layer corrente').

Quindi, se si imposta l'opzione cache su off per il join, è possibile modificare il CSV e quindi utilizzare i due comandi seguenti nella console di Python per ridisegnare la mappa:

csv_layer.reload()
layer.triggerRepaint()

Questo ha funzionato per me, ma avevo solo 100 righe di dati. È possibile che le operazioni siano lente senza memorizzazione nella cache quando si dispone di un set di dati più grande.


0

Apri le proprietà del layer del file di forma e vai a General- Coordinate reference system, fai clic su Create spatial index. Una volta terminato, lo shapefile viene aggiornato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.