Saya menggunakan kode berikut dalam pyqgis untuk menangkap kesalahan / peringatan dari lapisan WMS, untuk memicu pengecatan ulang segera setelah kesalahan / peringatan terdeteksi (berdasarkan pertanyaan sebelumnya: Cara menangkap pesan kesalahan WMS dari panel pesan log dalam QGIS dengan python? )
Tapi jelas penyedia "WMS" tampaknya memiliki batasan untuk tidak mengirim lebih dari 100 permintaan kesalahan ke log pesan, yang berarti setelah kesalahan / peringatan ke-100 saya tidak lagi dapat menangkap sinyal apa pun, bahkan jika lapisan-WMS adalah masih tidak merespons dengan benar. Namun demikian, jika saya mengirim pesan sendiri ke panel log sepertinya tidak ada batasan (lihat kode di bawah).
Apakah ada kemungkinan untuk menangkap kesalahan / peringatan langsung dari contoh yang bertanggung jawab di sini (saya kira itu adalah penyedia WMS), daripada menggunakan panel log pesan? Atau mungkin hanya menghapus / mengatur ulang panel pesan log dalam proses yang berjalan atau menghapus batasan?
Saya menggunakan QGIS 2.18.2 di Windows 10.
Berikut adalah kode 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)
PEMBARUAN: Saya mengirim permintaan fitur (lihat: https://hub.qgis.org/issues/16168 )
Jawaban:
Saat ini, batas 100 dikodekan dalam penyedia WMS. Tetapi QGIS adalah proyek open source yang luar biasa dan Anda dapat mengirimkan permintaan fitur untuk mengubah batas ini menjadi parameter yang dapat dikonfigurasi.
Setiap pengembang dapat menerima permintaan fitur ini dan mengirimkan permintaan tarik baru ke QGIS . Jika solusinya diterima, pengembang inti akan dengan senang hati menerapkan perubahan baik untuk versi 3 yang akan datang dan untuk versi 2.14.x dan 2.18.x saat ini.
Jadi, jawaban pertanyaan Anda adalah pengiriman permintaan fitur baru ke QGIS.
sumber