Как решить проблему с панелью сообщений журнала в QGIS: «Не регистрируется более 100 ошибок запросов».?

9

Я использую следующий код в pyqgis для перехвата ошибок / предупреждений с WMS-слоя, чтобы вызвать перерисовку, как только обнаружена ошибка / предупреждение (на основе предыдущего вопроса: как перехватить сообщение об ошибке WMS из панели сообщений журнала) в QGIS с питоном? )

Но очевидно, что у провайдера «WMS», похоже, есть ограничение не посылать более 100 запросов об ошибках в журнал сообщений, то есть после 100-й ошибки / предупреждения я больше не могу перехватить какой-либо сигнал, даже если WMS-уровень все еще не отвечает правильно. Тем не менее, если я отправляю собственные сообщения на панель журнала, похоже, никаких ограничений нет (см. Код ниже).

Есть ли возможность перехватить ошибку / предупреждение непосредственно от ответственного за это экземпляра (я полагаю, это WMS-провайдер) вместо использования панели журнала сообщений? Или, может быть, просто очистить / сбросить панель сообщений журнала в работающем процессе или снять ограничение?

Я использую QGIS 2.18.2 на Windows 10.

Вот код 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)

введите описание изображения здесь

ОБНОВЛЕНИЕ: я отправил запрос на функцию (см .: https://hub.qgis.org/issues/16168 )

ADorsch
источник
1
Кажется, что предел жестко связан с классом qgswmsprovider в коде C ++. Компиляция QGIS из исходных текстов - вариант для вас?
Стивен Кей
@ Стивен Кей, хорошо, я вижу, в коде есть соответствующий раздел ... К сожалению, у меня нет опыта компиляции из исходного кода. Как только мой код запущен, мне нужно установить QGIS на несколько машин. но если нет другого выбора, я думаю, у меня нет выбора ... в любом случае, спасибо за подсказку!
ADorsch

Ответы:

3

Прямо сейчас предел 100 жестко закодирован в провайдере WMS. Но QGIS - замечательный проект с открытым исходным кодом, и вы можете отправить запрос на добавление функции, чтобы превратить это ограничение в настраиваемый параметр.

Любой разработчик может принять этот запрос и отправить новый запрос на извлечение в QGIS . Если решение будет принято, разработчики ядра будут рады применить изменения как для следующей версии 3, так и для текущих версий 2.14.x и 2.18.x.

Итак, ответом на ваш вопрос является отправка запроса на новую функцию в QGIS.

jgrocha
источник
Хорошо, спасибо за этот совет. Хотя я надеялся получить какие-то обходные идеи, я думаю, что это такой же ответ, какой я возможно получу. Поэтому мне придется либо подумать о компиляции из исходного кода, манипулируя исходным кодом, либо отправить запрос на добавление функции и надеяться, что в будущем может быть реализовано решение ...
ADorsch
Если вы готовите и отправляете запрос функции, вы в будущем помогаете другим, которые столкнутся с тем же ограничением. Вы возвращаете что-то полезное обратно в сообщество. Хотя вы можете исправить ограничение 100, изменив его на 5000 или 10000, разработчики постараются удовлетворить ваш запрос таким образом, чтобы он подходил всем, а не только вам, поддерживая согласованность кода и обновляя документацию. Отправляя запрос функции, вы вносите свой вклад в улучшение QGIS. После того, как запрос функции будет принят, а запрос извлечения объединен, вы можете установить и использовать ночные сборки.
jgrocha
Абсолютно, я с тобой здесь! Спасибо за ваше заявление, подчеркивая, что такой успешный инструмент с открытым исходным кодом, как QGIS, основан на активном сообществе, что делает его настолько динамичным и как каждый может внести свой вклад в это развитие.
ADorsch
Кстати, я подготовлю запрос функции!
ADorsch