Ich verwende den folgenden Code in pyqgis, um Fehler / Warnungen von einer WMS-Schicht abzufangen, um ein Repaint auszulösen, sobald ein Fehler / eine Warnung erkannt wird (basierend auf der vorherigen Frage: Wie man WMS-Fehlermeldungen vom Protokollnachrichtenfenster abfängt in QGIS mit Python? )
Aber offensichtlich scheint der "WMS" -Anbieter die Einschränkung zu haben, nicht mehr als 100 Fehleranforderungen an das Nachrichtenprotokoll zu senden, was bedeutet, dass ich nach dem 100. Fehler / der 100. Warnung kein Signal mehr empfangen kann, selbst wenn die WMS-Schicht dies ist reagiert immer noch nicht richtig. Wenn ich jedoch eigene Nachrichten an das Protokollfeld sende, scheint es keine Einschränkung zu geben (siehe Code unten).
Gibt es eine Möglichkeit, den Fehler / die Warnung direkt von der hier verantwortlichen Instanz abzufangen (ich denke, es ist der WMS-Anbieter), anstatt das Nachrichtenprotokollfeld zu verwenden? Oder löschen Sie einfach das Protokollmeldungsfenster in einem laufenden Prozess oder setzen Sie es zurück oder entfernen Sie die Einschränkung?
Ich verwende QGIS 2.18.2 unter Windows 10.
Hier ist der Python-Code:
# 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)
UPDATE: Ich habe eine Funktionsanfrage eingereicht (siehe: https://hub.qgis.org/issues/16168 ).
Antworten:
Derzeit ist das 100-Limit im WMS-Anbieter fest codiert. QGIS ist jedoch ein wunderbares Open Source-Projekt, und Sie können eine Funktionsanforderung senden , um dieses Limit in einen konfigurierbaren Parameter umzuwandeln.
Jeder Entwickler kann diese Funktionsanforderung annehmen und eine neue Pull-Anforderung an QGIS senden . Wenn die Lösung akzeptiert wird, übernehmen die Kernentwickler die Änderungen gerne sowohl für die kommende Version 3 als auch für die aktuellen Versionen 2.14.x und 2.18.x.
Die Antwort auf Ihre Frage ist also die Übermittlung einer neuen Funktionsanforderung an QGIS.
quelle