我在pyqgis中使用以下代码从WMS层捕获错误/警告,以便在检测到错误/警告后立即触发重新绘制(基于先前的问题:如何从日志消息面板捕获WMS错误消息)在QGIS和python中?)
但是显然,“ WMS”提供者似乎有一个限制,即不能向消息日志发送超过100个错误请求,这意味着在第100个错误/警告之后,即使WMS层处于仍然无法正确响应。但是,如果我将自己的消息发送到日志面板,则似乎没有任何限制(请参见下面的代码)。
是否有可能直接从此处负责的实例(我猜是WMS提供者)捕获错误/警告,而不是使用消息日志面板?还是只是在运行的进程中清除/重置日志消息面板或删除限制?
我正在Windows 10上使用QGIS 2.18.2。
这是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)
1
这个限制似乎在C ++代码的qgswmsprovider类中是固定的。从源代码编译QGIS是否适合您?
—
史蒂文·凯
@Steven Kay啊,好的,我知道,代码中有相应的部分……很不幸,我没有从源代码进行编译的经验。代码运行后,我需要在多台计算机上安装QGIS。但是如果没有其他选择,我想我别无选择...无论如何要提示!
—
ADorsch