6 votos

Cómo coger WMS mensaje de error de registro del panel de mensajes en QGIS con python?

Estoy usando un WMS-servicio como mapa de fondo en un fichero automatizado de atlas proceso de impresión.

Por desgracia, la WMS-servicio parece haber un problema en el lado del servidor, ya que a veces no responde (ver mensaje de error: mapa de error de solicitud de ... servidor contestó bad request (ver imagen adjunta)). Por solo disparo de un repintado después de algunos segundos o minutos, el WMS se carga correctamente.

Ahora me gustaría atrapar a este comportamiento a través de python/pyqgis porque el atlas proceso de impresión se produce vacío páginas de fondo cuando el WMS es no responder. Por lo que tendría que comprobar si se produce este error concreto, y la fuerza de un triggerRepaint() hasta que el WMS-servidor responde correctamente. No sé cómo, ya que el error sólo aparece en el mensaje de registro en el panel, en la pestaña "WMS". Ya lo he intentado con try:...excepto... o por la comprobación de wmsLayer.isValid(), pero este no hizo el truco...

¿Hay alguien que en general sabe una manera de atrapar a este particular de error que aparecen en el registro del panel de mensajes?

Por desgracia, la WMS-servicio autorizado, así Im miedo de que el problema podría no ser reproducable...Pero espero que haya alguien por ahí que sabe una manera de detectar los errores del registro en el panel de mensajes.

Estoy usando QGIS 2.18.2

wms log messages panel error message

Mi pyqgis intentos de detectar el error han sido:

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='

try:
    wmsLayer = QgsRasterLayer(url_with_params, wmsLayer_name,'wms')
    QgsMapLayerRegistry.instance().addMapLayer(wmsLayer)
    wmsLayer.triggerRepaint()
except Exception as e:
    print e
#never raises any exception!

if wmsLayer.isValid():
    print "valid wms"
else:
    print "invalid wms"
#always prints "valid wms", meaning the layer is obviously valid but with an error response

No se pudo encontrar soluciones en la web, sin embargo, estaría agradecido por cualquier consejo!

6voto

Elliott Maynard Puntos 11

En Python QGIS Consola escribe:

def errorCatcher( msg, tag, level ):
    if tag == 'WMS' and level != 0:
        print "WMS Error caught! Details: {}".format( msg )
        # Do here other stuff you consider, such as triggering a repaint

QgsMessageLog.instance().messageReceived.connect( errorCatcher )

Lo que este fragmento de código hace es conectar el messageReceived de la SEÑAL de QgsMessageLog a errorCatcher función personalizada, que filtra todos los mensajes de la WMS ficha que son Advertencias o Errores (0: Info, 1:Advertencia, 2:Error) y le permite reaccionar a ellos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X