Ponownie ładujesz plik CSV w QGIS?

9

Używam QGIS do zilustrowania wyników mojej symulacji Matlab. Matlab tworzy plik CSV, który jest podłączony do pliku shapefile w QGIS.

W tej chwili muszę zamknąć i ponownie otworzyć QGIS, aby pokazać nowe wyniki symulacji Matlaba.

Czy można ponownie załadować tabelę atrybutów pliku CSV bez zamykania i ponownego otwierania QGIS?

Edgar
źródło
Dzięki @Jason twoja wskazówka zadziałała dla mnie urok - w QGIS 3.10 opcja jest w właściwości-> źródło ! [Propertiescreatespatialindex ] ( i.stack.imgur.com/5G3y5.png )
Hannes Buhrmann

Odpowiedzi:

3

Mogę zasugerować alternatywny przepływ pracy, który, choć niekoniecznie łatwiejszy niż zamykanie i otwieranie QGIS za każdym razem, może mieć większy sens:

  • Zaimportuj plik kształtu do spatialite
  • Zaimportuj CSV do spatialite (używając opcji „Virtual TXT / CSV)
  • Utwórz widok przestrzenny w przestrzeni przestrzennej, ŁĄCZĄC tabelę przestrzenną (plik kształtu) z wirtualną tabelą CSV

Teraz możesz wyświetlać widok w QGIS, tak jak każdą warstwę przestrzenną, i używać wartości JOINed ze spatialite. Ale za każdym razem, gdy plik CSV jest ponownie tworzony, będziesz musiał ZROBIĆ wirtualną tabelę CSV i połączyć się z nią ponownie. Następnie odświeżenie w QGIS pokaże nowe wartości. To zajmuje tylko chwilę, a ponadto możesz zdefiniować wiele widoków i zachować poprzednie w razie potrzeby ...

HTH

Micha
źródło
2

Dla każdego, kto wciąż szuka odpowiedzi na to pytanie bez użycia formatu przestrzennego, znalazłem coś, co działa.

Jeśli masz plik CSV i używasz sprzężenia, aby połączyć je z warstwą przestrzenną, jedną z opcji łączenia jest buforowanie warstwy. Możesz przejść do tej opcji, jeśli przejdziesz do właściwości swojej warstwy, a następnie do połączonych danych i klikniesz edytuj dołącz. Jeśli wyłączysz opcję pamięci podręcznej , możesz ponownie załadować warstwę danych po zmianie pliku csv, a następnie uruchomić odświeżanie mapy, aby uzyskać odświeżony widok mapy.

Przeładowywanie i odświeżanie można wykonać w konsoli Python. Najpierw musisz zdefiniować nazwę płótna mapy, pliku csv i warstwy:

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

Pamiętaj, aby warstwy były aktywne, gdy nazywasz je w konsoli podczas korzystania z metody currentLayer (musi to być „bieżąca warstwa”).

Następnie, jeśli ustawisz opcję pamięci podręcznej jako wyłączoną dla swojego łączenia, możesz zmienić plik csv, a następnie użyć następujących dwóch poleceń w konsoli Python, aby przerysować mapę:

csv_layer.reload()
layer.triggerRepaint()

To działało dla mnie, ale miałem tylko 100 wierszy danych. Może się zdarzyć, że operacje będą przebiegały wolniej bez buforowania, gdy masz większy zestaw danych.

Sanne de Bruin
źródło
0

Otwórz właściwości warstwy pliku kształtu i przejdź do General- Coordinate reference systemkliknij Create spatial index. Po zakończeniu plik kształtu jest odświeżany.

Jason
źródło