CSV-Datei in QGIS neu laden?


9

Ich verwende QGIS, um die Ergebnisse meiner Matlab-Simulation zu veranschaulichen. Matlab erstellt eine CSV-Datei, die mit einem Shapefile in QGIS verbunden ist.

Im Moment muss ich QGIS schließen und erneut öffnen, um die neuen Ergebnisse der Matlab-Simulation anzuzeigen.

Ist es möglich, die Attributtabelle der CSV-Datei neu zu laden, ohne QGIS zu schließen und erneut zu öffnen?


Danke @Jason, dein Tipp hat mir sehr gut gefallen - mit QGIS 3.10 ist die Option unter Eigenschaften-> Quelle ! [Propertiescreatespatialindex ] ( i.stack.imgur.com/5G3y5.png )
Hannes Buhrmann

Antworten:


3

Ich kann einen alternativen Workflow vorschlagen, der zwar nicht unbedingt einfacher ist als das Schließen und Öffnen von QGIS jedes Mal, aber sinnvoller sein könnte:

  • Importieren Sie Ihr Shapefile in Spatialite
  • Importieren Sie die CSV in Spatialite (mit der Option "Virtual TXT / CSV").
  • Erstellen Sie eine räumliche Ansicht in Spatialite, indem Sie die räumliche Tabelle (Shapefile) mit der virtuellen CSV-Tabelle verbinden

Jetzt können Sie die Ansicht in QGIS wie jede räumliche Ebene anzeigen und die JOINed-Werte von Spatialite verwenden. Jedes Mal, wenn die CSV neu erstellt wird, müssen Sie die virtuelle CSV-Tabelle TROPFEN und erneut mit ihr verknüpfen. Eine Aktualisierung in QGIS zeigt dann die neuen Werte an. Dies dauert nur einen Moment, und außerdem können Sie viele Ansichten definieren und die vorherigen bei Bedarf beibehalten ...

HTH


2

Für alle, die noch nach einer Antwort suchen, ohne ein Spatialite-Format zu verwenden, habe ich etwas gefunden, das funktioniert.

Wenn Sie eine CSV-Datei haben und einen Join verwenden, um sie mit einer räumlichen Ebene zu verbinden, besteht eine der Optionen der Verknüpfung darin, die Ebene zwischenzuspeichern. Sie können zu dieser Option gelangen, wenn Sie zu den Eigenschaften Ihrer Ebene und dann zu den verknüpften Daten gehen und auf Verknüpfung bearbeiten klicken. Wenn Sie die Cache-Option deaktivieren , können Sie die Datenebene nach dem Ändern der CSV neu laden und anschließend ein Repaint Ihrer Karte auslösen, um eine aktualisierte Kartenansicht zu erhalten.

Sie können das Neuladen und Neulackieren in der Python-Konsole durchführen. Zuerst müssen Sie einen Namen für die Kartenleinwand, die CSV und für den Layer definieren:

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

Stellen Sie sicher, dass die Ebenen aktiv sind, wenn Sie sie in der Konsole benennen, wenn Sie die currentLayer-Methode verwenden (es muss sich um die 'aktuelle Ebene' handeln).

Wenn Sie dann die Cache-Option für Ihren Join deaktiviert haben, können Sie die CSV ändern und dann die folgenden zwei Befehle in der Python-Konsole verwenden, um Ihre Map neu zu zeichnen:

csv_layer.reload()
layer.triggerRepaint()

Das hat bei mir funktioniert, aber ich hatte nur 100 Datenzeilen. Es kann sein, dass Vorgänge ohne Caching langsam sind, wenn Sie einen größeren Datensatz haben.


0

Öffnen Sie die Ebeneneigenschaften des Shapefiles und klicken Sie auf General- . Sobald es fertig ist, wird das Shapefile aktualisiert.Coordinate reference systemCreate spatial index

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.