Saya menggunakan kode berikut dalam pyqgis untuk menangkap kesalahan / peringatan dari lapisan WMS, untuk memicu pengecatan ulang segera setelah kesalahan / peringatan terdeteksi (berdasarkan pertanyaan sebelumnya: Cara menangkap pesan kesalahan WMS dari panel pesan log dalam QGIS dengan python? )
Tapi jelas penyedia "WMS" tampaknya memiliki batasan untuk tidak mengirim lebih dari 100 permintaan kesalahan ke log pesan, yang berarti setelah kesalahan / peringatan ke-100 saya tidak lagi dapat menangkap sinyal apa pun, bahkan jika lapisan-WMS adalah masih tidak merespons dengan benar. Namun demikian, jika saya mengirim pesan sendiri ke panel log sepertinya tidak ada batasan (lihat kode di bawah).
Apakah ada kemungkinan untuk menangkap kesalahan / peringatan langsung dari contoh yang bertanggung jawab di sini (saya kira itu adalah penyedia WMS), daripada menggunakan panel log pesan? Atau mungkin hanya menghapus / mengatur ulang panel pesan log dalam proses yang berjalan atau menghapus batasan?
Saya menggunakan QGIS 2.18.2 di Windows 10.
Berikut adalah kode 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)
PEMBARUAN: Saya mengirim permintaan fitur (lihat: https://hub.qgis.org/issues/16168 )