Come risolvere il problema con il pannello dei messaggi di registro in QGIS: "Non registrare più di 100 errori di richiesta".


9

Sto utilizzando il seguente codice in pyqgis per rilevare errori / avvisi da un livello WMS, al fine di attivare un ridisegno non appena viene rilevato un errore / avviso (basato sulla domanda precedente: Come rilevare il messaggio di errore WMS dal pannello dei messaggi di registro in QGIS con Python? )

Ma ovviamente il provider "WMS" sembra avere una restrizione a non inviare più di 100 richieste di errore al registro dei messaggi, il che significa che dopo il 100 ° errore / avviso non sono più in grado di catturare alcun segnale, anche se lo strato WMS è continua a non rispondere correttamente. Tuttavia, se invio i propri messaggi al pannello di registro non sembra esserci alcuna restrizione (vedere il codice di seguito).

Esiste la possibilità di rilevare l'errore / avviso direttamente dall'istanza responsabile qui (suppongo che sia il provider WMS), invece di utilizzare il pannello di registro dei messaggi? O forse semplicemente cancellare / ripristinare il pannello dei messaggi di registro in un processo in esecuzione o rimuovere la limitazione?

Sto usando QGIS 2.18.2 su Windows 10.

Ecco il codice 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)

inserisci qui la descrizione dell'immagine

AGGIORNAMENTO: ho inviato una richiesta di funzionalità (vedi: https://hub.qgis.org/issues/16168 )


1
Il limite sembra essere cablato nella classe qgswmsprovider nel codice C ++. Compilare QGIS dalla fonte è un'opzione per te?
Steven Kay,

@Steven Kay ah ok vedo, c'è la sezione corrispondente nel codice ... Purtroppo non ho esperienza nella compilazione dalla fonte. Non appena il mio codice è in esecuzione, devo installare QGIS su più macchine. ma se non c'è altra opzione immagino di non avere scelta ... comunque grazie per il suggerimento!
ADorsch,

Risposte:


3

In questo momento, il limite di 100 è hardcoded nel provider WMS. Ma QGIS è un meraviglioso progetto open source e puoi inviare una richiesta di funzionalità per trasformare questo limite in un parametro configurabile.

Qualsiasi sviluppatore può accettare questa richiesta di funzionalità e inviare una nuova richiesta pull a QGIS . Se la soluzione viene accettata, gli sviluppatori core saranno felici di applicare le modifiche sia per la prossima versione 3 che per le attuali versioni 2.14.xe 2.18.x.

Quindi, la risposta alla tua domanda è una nuova richiesta di funzionalità inoltrata a QGIS.


Ok grazie per quel consiglio. Sebbene sperassi di ottenere qualche tipo di soluzione alternativa, immagino che questa sia una risposta tanto quanto probabilmente otterrò. Quindi dovrei considerare la compilazione dal sorgente manipolando il codice sorgente o inviare una richiesta di funzionalità e sperare che ci possa essere una soluzione implementata in futuro ...
ADorsch,

Se prepari e invii una richiesta di funzionalità, in futuro aiuterai gli altri a dover affrontare la stessa limitazione. Stai restituendo qualcosa di utile alla comunità. Sebbene sia possibile correggere la limitazione 100 modificandola in 5000 o 10000, gli sviluppatori proveranno a soddisfare la richiesta in modo adatto a tutti, non solo a te, mantenendo il codice coerente e la documentazione aggiornata. Inviando una richiesta di funzione, stai contribuendo a migliorare QGIS. Dopo che la richiesta di funzionalità è stata accettata e la richiesta pull è stata unita, è possibile installare e utilizzare le build notturne.
jgrocha,

Assolutamente, sono qui con te! Grazie per la tua affermazione, sottolineando che uno strumento open source di successo come QGIS si basa su una comunità attiva che lo rende così altamente dinamico e su come tutti possono contribuire a questo sviluppo.
ADorsch,

In ogni caso, preparerò una richiesta di funzionalità!
ADorsch,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.