У меня есть проект QGIS со слоями, основанный на SQL-запросах PostGIS, использующих текущую дату. Поскольку данные в базе данных изменяются, эти запросы возвращают разные данные каждый новый день.
Можно ли динамически изменить имя слоя на панели дерева слоев, чтобы оно представляло текущую дату? (то есть название слоя Traffic on 24.01.2015
, которое меняется каждый новый день). Данные для заголовка должны быть взяты из атрибута любого объекта в слое - все они имеют одинаковое значение для поля traffic_date
.
qgis
pyqgis
layers
query-layer
dynamic-layer
mofoyoda
источник
источник
Ответы:
Если я правильно понял, ответ - да, QGIS поддерживает имена динамических слоев.
Вам нужно написать макрос Python, который будет запускаться при каждом открытии проекта. Это будет рабочий процесс:
Перейти
QGIS->Project->Project Properties
и заменитьopenProject()
следующим кодом Python:Примечание 1: я протестировал его на шейп-файлах, поэтому поле, из которого я беру даты, состоит в том,
traffic_da
что шейп-файлы не поддерживают больше букв в именах полей. Отрегулируйте это в коде, чтобы работать с вашими слоями.Примечание 2: В зависимости от конфигурации вашего проекта, вы должны добавить проверочный код, чтобы действовать только на нужные вам слои. Например, если вы запустите код на растровых слоях, ошибки наверняка появятся. Если вам нужна помощь в этом, откройте новый вопрос, я могу вам помочь.
Убедитесь, что вы включили макросы в свой проект, таким образом:
Settings->Options->General->Enable macros: Always
Загрузите свои слои в проект.
Сохраните свой проект.
Каждый раз, когда вы открываете свой проект с этой точки, имена ваших слоев будут динамическими, дата будет взята из поля
traffic_date
в таблице атрибутов каждого слоя.После того, как я впервые открыл проект, вот как динамически генерировались имена моих слоев:
Я думаю, что это может помочь вам начать. Скажите, если у вас возникли неочевидные проблемы.
источник
on
и убрать оттуда до конца, чтобы сэкономить на использовании регулярных выражений.