Автообновление

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
BPV217
Участник
Сообщения: 80
Зарегистрирован: 13 фев 2017, 09:12
Репутация: 1

Автообновление

Сообщение BPV217 » 09 окт 2017, 11:18

Не могу найти настройки автообновления карты.
В идеале обновление одного слоя.
Нужно что бы без каких либо манипуляций с картой обновлялся слой.
QGis 2.18.13

Аватара пользователя
Эдуард Казаков
Гуру
Сообщения: 546
Зарегистрирован: 23 апр 2014, 17:11
Репутация: 532
Откуда: Planet Earth
Контактная информация:

Re: Автообновление

Сообщение Эдуард Казаков » 09 окт 2017, 15:08

В консоли

Код: Выделить всё

layer.dataProvider().forceReload()
layer.triggerRepaint()
где в layer ваш объект QGSVectorLayer. Будет перерисовываться только он.

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

BPV217
Участник
Сообщения: 80
Зарегистрирован: 13 фев 2017, 09:12
Репутация: 1

Re: Автообновление

Сообщение BPV217 » 10 окт 2017, 15:55

Такой запрос в питоне, но обновляет всю карту.

Код: Выделить всё

import PyQt4
from PyQt4 import QtCore

def timer_action():
    layer = iface.activeLayer()
    layer.dataProvider().forceReload()
    layer.triggerRepaint()
  
  timer = QtCore.QTimer()
QtCore.QObject.connect(timer, QtCore.SIGNAL('timeout()'), timer_action)
timer.start(10000)
Что не так, почему он не конкретный слой проверяет?
Как задать эту функцию для конкретного слоя, а не для всей карты и без использования iface.activeLayer(),
Я пробовал заменять layer на u'\u041f\u0426' (как я понял это и есть название моего слоя на питоне)

Код: Выделить всё

layer = iface.activeLayer()
layer.name()
Но не помогло.

Код: Выделить всё

layer = u'\u041f\u0426'
Тоже не заработало.

И в конечном итоге, какие варианты есть рационального запуска всего этого со стороны пользователя, в конечном итоге нужно либо кнопку создать, либо в QGis на автовыполнение поставить. Какие у меня варианты создать что-либо?

BPV217
Участник
Сообщения: 80
Зарегистрирован: 13 фев 2017, 09:12
Репутация: 1

Re: Автообновление

Сообщение BPV217 » 16 окт 2017, 11:54

Рабочий вариант:

Код: Выделить всё

import time,threading
interval=6 #Интервал в секундах
def job():
    name = u'\u0411\u043e\u043b\u043e\u0442\u0430'
    layer = QgsMapLayerRegistry.instance().mapLayersByName(name)[0]
    layer.triggerRepaint()
    threading.Timer(interval,job).start()
threading.Timer(interval,job).start()
Узнать название слоя

Код: Выделить всё

layer = iface.activeLayer()  #layer = активный слой
layer.name()                 #Имя объекта layer

BPV217
Участник
Сообщения: 80
Зарегистрирован: 13 фев 2017, 09:12
Репутация: 1

Re: Автообновление

Сообщение BPV217 » 16 окт 2017, 14:32

Как теперь это всё поставить на автозапуск, чтоб при запуске QGis включался скрипт?

BPV217
Участник
Сообщения: 80
Зарегистрирован: 13 фев 2017, 09:12
Репутация: 1

Re: Автообновление

Сообщение BPV217 » 31 окт 2017, 10:36

Вопрос решили так:
в папке ...\.qgis2\python создали файл startup.py

Код: Выделить всё

from PyQt4 import QtGui, QtCore
from qgis._core import *

def tick():
    layerList = [u'SensorData']
    for lyr in QgsMapLayerRegistry.instance().mapLayers().values():
        if lyr.name() in layerList:
            if lyr != None: lyr.triggerRepaint()    

interval=10

timer = QtCore.QTimer()
timer.timeout.connect(tick)
timer.start(interval * 1000)

def job():
    layer=None
    print 'non'
    print layer
    for lyr in QgsMapLayerRegistry.instance().mapLayers().values():
        if lyr.name() == u'\u0417\u0434\u0430\u043d\u0438\u044f':
            layer = lyr
            break
    print layer.name()
    if layer != None: layer.triggerRepaint()
    print layer

Всё работает, слой SensorData обновляется раз в 10 сек.

BPV217
Участник
Сообщения: 80
Зарегистрирован: 13 фев 2017, 09:12
Репутация: 1

Re: Автообновление

Сообщение BPV217 » 20 ноя 2017, 08:43

Я могу средствами QGis сделать звуковое оповещение при изменении параметров у символа?
Взять какое-либо значение за норму, а в случае отклонения от неё сделать звуковое оповещение, а так же при возвращении в норму, другое оповещение.

BPV217
Участник
Сообщения: 80
Зарегистрирован: 13 фев 2017, 09:12
Репутация: 1

Re: Автообновление

Сообщение BPV217 » 04 июл 2018, 09:20

Никто не делал автообновление экрана в версии 3.0+
С версией 2.18 мы разобрались, но нам нужно всё тоже самое повторить в версии 3.0+, желательно в 3.2, что-бы уже раз и навсегда уйти от 2.18
Мб. startup.py надо переделать или положить в другое место, мб новые решения появились
Подскажите в какую сторону копать

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей