Jak rozwiązać problem z panelem komunikatów dziennika w QGIS: „Nie rejestrowanie więcej niż 100 błędów żądania.”?

9

Korzystam z następującego kodu w pyqgis, aby wyłapać błędy / ostrzeżenia z warstwy WMS, aby wywołać odmalowanie natychmiast po wykryciu błędu / ostrzeżenia (na podstawie poprzedniego pytania: Jak złapać komunikat o błędzie WMS z panelu komunikatów dziennika w QGIS z pythonem? )

Ale najwyraźniej dostawca „WMS” wydaje się mieć ograniczenie nie wysyłania więcej niż 100 żądań błędu do dziennika komunikatów, co oznacza, że ​​po 100. błędzie / ostrzeżeniu nie jestem w stanie złapać żadnego sygnału, nawet jeśli warstwa WMS jest nadal nie reaguje poprawnie. Niemniej jednak, jeśli wysyłam własne wiadomości do panelu dziennika, wydaje się, że nie ma żadnych ograniczeń (patrz kod poniżej).

Czy istnieje możliwość wychwycenia błędu / ostrzeżenia bezpośrednio z instancji, która jest tutaj odpowiedzialna (chyba jest to dostawca WMS), zamiast korzystania z panelu dziennika komunikatów? A może po prostu wyczyść / zresetuj panel komunikatów dziennika w trwającym procesie lub usuń ograniczenie?

Używam QGIS 2.18.2 na Windows 10.

Oto kod 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)

wprowadź opis zdjęcia tutaj

AKTUALIZACJA: Wysłałem prośbę o funkcję (patrz: https://hub.qgis.org/issues/16168 )

ADorsch
źródło
1
Limit wydaje się być ustalony w klasie qgswmsprovider w kodzie C ++. Czy kompilacja QGIS ze źródła jest dla Ciebie opcją?
Steven Kay
@Steven Kay ah ok, widzę, w kodzie znajduje się odpowiednia sekcja ... Niestety nie mam doświadczenia w kompilacji ze źródła. Jak tylko mój kod się uruchomi, muszę zainstalować QGIS na kilku komputerach. ale jeśli nie ma innej opcji, myślę, że nie mam wyboru ... w każdym razie dziękuję za podpowiedź!
ADorsch

Odpowiedzi:

3

W tej chwili limit 100 jest zakodowany na stałe w dostawcy WMS. Ale QGIS to wspaniały projekt typu open source i możesz przesłać żądanie funkcji, aby zmienić ten limit w konfigurowalny parametr.

Każdy programista może przyjąć to żądanie funkcji i przesłać nowe żądanie ściągnięcia do QGIS . Jeśli rozwiązanie zostanie zaakceptowane, główni programiści z przyjemnością zastosują zmiany zarówno w nadchodzącej wersji 3, jak i bieżącej wersji 2.14.xi 2.18.x.

Tak więc odpowiedzią na twoje pytanie jest przesłanie prośby o nową funkcję do QGIS.

jgrocha
źródło
Ok, dziękuję za tę radę. Chociaż miałem nadzieję uzyskać jakieś pomysły na obejście tego problemu, wydaje mi się, że to tyle samo odpowiedzi, ile prawdopodobnie dostanę. Musiałbym więc rozważyć kompilację ze źródła przez manipulowanie kodem źródłowym lub przesłać żądanie funkcji i mam nadzieję, że w przyszłości może zostać zaimplementowane rozwiązanie ...
ADorsch
Jeśli przygotujesz i prześlesz prośbę o dodanie funkcji, w przyszłości pomagasz innym, którzy napotkają takie same ograniczenia. Zwracasz coś przydatnego z powrotem do społeczności. Chociaż możesz naprawić ograniczenie 100, zmieniając je na 5000 lub 10000, programiści postarają się spełnić twoje żądanie w sposób odpowiedni dla wszystkich, nie tylko dla ciebie, utrzymując spójność kodu i aktualizację dokumentacji. Przesyłając żądanie funkcji, przyczyniasz się do poprawy QGIS. Po zaakceptowaniu żądania funkcji i scaleniu żądania ściągnięcia można zainstalować i używać kompilacji nocnych.
jgrocha
Oczywiście, jestem tutaj z tobą! Dziękujemy za wypowiedź, wskazując, że tak skuteczne narzędzie typu open source, takie jak QGIS, opiera się na aktywnej społeczności, co czyni ją tak dynamiczną i jak wszyscy mogą przyczynić się do tego rozwoju.
ADorsch
Nawiasem mówiąc, przygotuję prośbę o dodanie funkcji!
ADorsch