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)
AKTUALIZACJA: Wysłałem prośbę o funkcję (patrz: https://hub.qgis.org/issues/16168 )
Odpowiedzi:
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.
źródło