Я использую следующий код в pyqgis для перехвата ошибок / предупреждений с WMS-слоя, чтобы вызвать перерисовку, как только обнаружена ошибка / предупреждение (на основе предыдущего вопроса: как перехватить сообщение об ошибке WMS из панели сообщений журнала) в QGIS с питоном? )
Но очевидно, что у провайдера «WMS», похоже, есть ограничение не посылать более 100 запросов об ошибках в журнал сообщений, то есть после 100-й ошибки / предупреждения я больше не могу перехватить какой-либо сигнал, даже если WMS-уровень все еще не отвечает правильно. Тем не менее, если я отправляю собственные сообщения на панель журнала, похоже, никаких ограничений нет (см. Код ниже).
Есть ли возможность перехватить ошибку / предупреждение непосредственно от ответственного за это экземпляра (я полагаю, это WMS-провайдер) вместо использования панели журнала сообщений? Или, может быть, просто очистить / сбросить панель сообщений журнала в работающем процессе или снять ограничение?
Я использую QGIS 2.18.2 на Windows 10.
Вот код Python:
# coding=utf-8
from qgis.core import *
wmsLayer_name="wms-dtk50_wgs"
url_with_params ='url=http://sg.geodatenzentrum.de/wms_dtk50?&crs=EPSG:25832&featureCount=10&format=image/png&layers=DTK50&styles='
wmsLayer = QgsRasterLayer(url_with_params, wmsLayer_name,'wms')
QgsMapLayerRegistry.instance().addMapLayer(wmsLayer)
def errorCatcher( msg, tag, level ):
if tag == 'WMS' and level != 0: #Warnings or Errors (0: Info, 1:Warning, 2:Error)
print "WMS error detected!"
myWMSLayer = QgsMapLayerRegistry.instance().mapLayersByName("wms-dtk50_wgs")[0]
myWMSLayer.triggerRepaint()
# connect with messageReceived SIGNAL from QgsMessageLog to an errorCatcher custom function
# instantly reacts if error/warning occurs
QgsMessageLog.instance().messageReceived.connect( errorCatcher )
#after 100 times triggering a "wmsLayer.triggerRepaint()",
# I get following warning in log messages panel "WMS":
# "2017-01-17T07:17:52 1 Not logging more than 100 request errors."
#this does not raise any issues and prints all 500 test messages in the log panel:
for i in range(500):
QgsMessageLog.instance().logMessage("Message #{}".format(i),"Test",2)
ОБНОВЛЕНИЕ: я отправил запрос на функцию (см .: https://hub.qgis.org/issues/16168 )