Перезагрузить файл CSV в QGIS?

9

Я использую QGIS, чтобы проиллюстрировать результаты моего моделирования Matlab. Matlab создает файл CSV, который подключен к шейп-файлу в QGIS.

На данный момент я должен закрыть и снова открыть QGIS, чтобы показать новые результаты моделирования Matlab.

Можно ли перезагрузить таблицу атрибутов файла CSV без закрытия и снова открыть QGIS?

Эдгар
источник
Благодаря @Jason кончиком работал понравилось очарование для меня - с помощью QGIS 3.10 опция находится под Свойства-> источник [propertiescreatespatialindex! ] ( I.stack.imgur.com/5G3y5.png )
Ханнес Buhrmann

Ответы:

3

Я могу предложить альтернативный рабочий процесс, который, хотя и не обязательно проще, чем закрывать и открывать QGIS каждый раз, может иметь больше смысла:

  • Импортируйте свой шейп-файл в пространственный
  • Импортируйте CSV в пространственный объект (используя опцию «Virtual TXT / CSV»)
  • Создайте пространственное представление в пространственном элементе, присоединив пространственную таблицу (шейп-файл) к виртуальной таблице CSV.

Теперь вы можете отображать вид в QGIS, как и любой пространственный слой, и использовать значения JOINed из пространственного объекта. Но каждый раз, когда CSV воссоздается, вам нужно будет УДАЛИТЬ виртуальную таблицу CSV и повторно связать ее. Затем обновление в QGIS покажет новые значения. Это займет всего минуту, и, более того, вы можете определить множество представлений и сохранить предыдущие при необходимости ...

НТН

Миха
источник
2

Для тех, кто все еще ищет ответ на этот вопрос без использования пространственного формата, я нашел кое-что, что работает.

Если у вас есть CSV и вы используете объединение, чтобы присоединить его к пространственному слою, один из вариантов объединения - это кэширование слоя. Вы можете перейти к этой опции, если перейдете к свойствам вашего слоя, затем к присоединенным данным и нажмите «Редактировать объединение». Если вы отключите опцию кэширования , вы можете перезагрузить слой данных после изменения CSV, а затем запустить перерисовку вашей карты, чтобы получить обновленный вид карты.

Вы можете выполнить перезагрузку и перерисовку в консоли Python. Во-первых, вы должны определить имя для холста карты, CSV и для слоя:

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

Убедитесь, что слои активны, когда вы называете их в консоли при использовании метода currentLayer (это должен быть «текущий слой»).

Затем, если вы отключили опцию кэширования для своего объединения, вы можете изменить csv, а затем использовать следующие две команды в консоли Python для перерисовки вашей карты:

csv_layer.reload()
layer.triggerRepaint()

Это сработало для меня, но у меня было только 100 строк данных. Может случиться так, что операции будут медленными без кэширования, если у вас есть больший набор данных.

Сан де Брюин
источник
0

Откройте свойства слоя шейп-файла и перейдите к General- Coordinate reference system, щелкните Create spatial index. Как только он закончен, шейп-файл обновляется.

Джейсон
источник