pyqgis에서 다음 코드를 사용하여 오류 / 경고가 감지되는 즉시 다시 그리기를 트리거하기 위해 WMS 계층에서 오류 / 경고를 포착하고 있습니다 (이전 질문 : 로그 메시지 패널에서 WMS 오류 메시지를 잡는 방법) 파이썬으로 QGIS에서? )
그러나 분명히 "WMS"제공 업체는 메시지 로그에 100 개 이상의 오류 요청을 보내지 않는 제한이있는 것 같습니다. 즉, 100 번째 오류 / 경고 후에는 WMS 계층이 더 이상 신호를 포착 할 수 없습니다. 여전히 올바르게 응답하지 않습니다. 그럼에도 불구하고 로그 패널에 자체 메시지를 보내면 아무런 제한이없는 것 같습니다 (아래 코드 참조).
메시지 로그 패널을 사용하는 대신 여기에서 담당하는 인스턴스 (WMS 제공 업체 인 것 같습니다)에서 직접 오류 / 경고를 포착 할 가능성이 있습니까? 아니면 실행중인 프로세스에서 로그 메시지 패널을 지우거나 재설정하거나 제한을 제거합니까?
Windows 10에서 QGIS 2.18.2를 사용하고 있습니다.
파이썬 코드는 다음과 같습니다.
# 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 참조 )