ฉันใช้รหัสต่อไปนี้ใน pyqgis เพื่อตรวจจับข้อผิดพลาด / คำเตือนจาก WMS- เลเยอร์เพื่อที่จะทริกเกอร์ทาสีทันทีที่ตรวจพบข้อผิดพลาด / คำเตือน (ตามคำถามก่อนหน้า: วิธีการจับข้อผิดพลาด WMS จากแผงข้อความบันทึก ใน QGIS กับ python หรือไม่? )
แต่เห็นได้ชัดว่าผู้ให้บริการ "WMS" ดูเหมือนจะมีข้อ จำกัด ว่าจะไม่ส่งคำขอข้อผิดพลาดมากกว่า 100 รายการไปยังบันทึกข้อความซึ่งหมายถึงหลังจากข้อผิดพลาด / คำเตือนครบ 100 ครั้งแล้วฉันไม่สามารถรับสัญญาณใด ๆ ได้อีกต่อไป ยังไม่ตอบสนองอย่างถูกต้อง อย่างไรก็ตามหากฉันส่งข้อความของตัวเองไปที่แผงควบคุมดูเหมือนจะไม่มีข้อ จำกัด ใด ๆ (ดูรหัสด้านล่าง)
มีความเป็นไปได้ที่จะตรวจจับข้อผิดพลาด / คำเตือนโดยตรงจากอินสแตนซ์ที่รับผิดชอบที่นี่ (ฉันเดาว่าเป็นผู้ให้บริการ WMS) แทนที่จะใช้แผงบันทึกข้อความ หรืออาจแค่ล้าง / รีเซ็ตพาเนลข้อความบันทึกในกระบวนการที่กำลังรันอยู่หรือลบข้อ จำกัด ออกไป
ฉันใช้ QGIS 2.18.2 บน Windows 10
นี่คือรหัสหลาม:
# 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 )