So lösen Sie das Problem mit dem Protokollmeldungsfenster in QGIS: "Nicht mehr als 100 Anforderungsfehler protokollieren."

9

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)

Geben Sie hier die Bildbeschreibung ein

UPDATE: Ich habe eine Funktionsanfrage eingereicht (siehe: https://hub.qgis.org/issues/16168 ).

ADorsch
quelle
1
Das Limit scheint in der Klasse qgswmsprovider im C ++ - Code fest verdrahtet zu sein . Ist das Kompilieren von QGIS aus dem Quellcode eine Option für Sie?
Steven Kay
@Steven Kay ah ok ich sehe, es gibt den entsprechenden Abschnitt im Code ... Leider habe ich keine Erfahrung beim Kompilieren aus dem Quellcode. Sobald mein Code ausgeführt wird, muss ich QGIS auf mehreren Computern installieren. aber wenn es keine andere möglichkeit gibt, habe ich wohl keine wahl ... trotzdem danke für den hinweis!
ADorsch

Antworten:

3

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.

jgrocha
quelle
Ok, danke für diesen Rat. Obwohl ich gehofft hatte, eine Art Workaround-Idee zu bekommen, denke ich, dass dies eine ebenso gute Antwort ist, wie ich wahrscheinlich bekommen werde. Ich müsste also entweder in Betracht ziehen, aus dem Quellcode zu kompilieren, indem ich den Quellcode manipuliere, oder eine Feature-Anfrage senden und hoffen, dass in Zukunft eine Lösung implementiert wird ...
ADorsch
Wenn Sie eine Funktionsanforderung vorbereiten und senden, helfen Sie in Zukunft anderen, die denselben Einschränkungen unterliegen. Sie geben etwas Nützliches an die Community zurück. Während Sie die 100-Beschränkung beheben können, indem Sie sie in 5000 oder 10000 ändern, werden Entwickler versuchen, Ihre Anfrage auf eine Weise zu bearbeiten, die für alle und nicht nur für Sie geeignet ist, wobei der Code konsistent bleibt und die Dokumentation aktualisiert wird. Durch das Senden einer Funktionsanforderung tragen Sie zur Verbesserung von QGIS bei. Nachdem die Funktionsanforderung akzeptiert und die Pull-Anforderung zusammengeführt wurde, können Sie die nächtlichen Builds installieren und verwenden.
Jgrocha
Absolut, ich bin hier bei dir! Vielen Dank für Ihre Aussage, dass ein so erfolgreiches Open-Source-Tool wie QGIS auf einer aktiven Community basiert, die es so dynamisch macht und wie jeder zu dieser Entwicklung beitragen kann.
ADorsch
Ich werde übrigens eine Feature-Anfrage vorbereiten!
ADorsch