J'utilise le code suivant dans pyqgis pour intercepter les erreurs / avertissements d'une couche WMS, afin de déclencher une repeinture dès qu'une erreur / avertissement est détectée (basé sur la question précédente: Comment intercepter un message d'erreur WMS à partir du panneau des messages de journal dans QGIS avec python? )
Mais évidemment, le fournisseur "WMS" semble avoir une restriction de ne pas envoyer plus de 100 requêtes d'erreur au journal des messages, ce qui signifie qu'après la 100ème erreur / avertissement, je ne suis plus en mesure de capter aucun signal, même si la couche WMS est ne répond toujours pas correctement. Néanmoins, si j'envoie mes propres messages au panneau de connexion, il ne semble pas y avoir de restriction (voir le code ci-dessous).
Existe-t-il une possibilité d'attraper l'erreur / l'avertissement directement à partir de l'instance responsable ici (je suppose que c'est le fournisseur WMS), au lieu d'utiliser le panneau de journal des messages? Ou peut-être simplement effacer / réinitialiser le panneau des messages du journal dans un processus en cours ou supprimer la limitation?
J'utilise QGIS 2.18.2 sur Windows 10.
Voici le code 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)
MISE À JOUR: J'ai soumis une demande de fonctionnalité (voir: https://hub.qgis.org/issues/16168 )
Réponses:
À l'heure actuelle, la limite de 100 est codée en dur dans le fournisseur WMS. Mais QGIS est un merveilleux projet open source et vous pouvez soumettre une demande de fonctionnalité pour transformer cette limite en paramètre configurable.
Tout développeur peut accepter cette demande de fonctionnalité et soumettre une nouvelle demande d'extraction à QGIS . Si la solution est acceptée, les développeurs principaux seront heureux d'appliquer les modifications à la fois pour la prochaine version 3 et pour les versions 2.14.x et 2.18.x actuelles.
Donc, la réponse à votre question est une nouvelle demande de fonctionnalité envoyée à QGIS.
la source