Bagaimana mengatasi masalah dengan panel pesan log di QGIS: “Tidak mencatat lebih dari 100 kesalahan permintaan.”?

9

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)

masukkan deskripsi gambar di sini

PEMBARUAN: Saya mengirim permintaan fitur (lihat: https://hub.qgis.org/issues/16168 )

ADorsch
sumber
1
Batas tampaknya terprogram dalam kelas qgswmsprovider dalam kode C ++. Apakah mengkompilasi QGIS dari sumber merupakan pilihan bagi Anda?
Steven Kay
@ Seven Kay ah ok saya mengerti, ada bagian sesuai dalam kode ... Sayangnya saya tidak punya pengalaman dalam mengkompilasi dari sumber. Segera setelah kode saya berjalan, saya perlu menginstal QGIS pada beberapa mesin. tetapi jika tidak ada pilihan lain saya kira saya tidak punya pilihan ... tetap thx untuk petunjuk!
ADorsch

Jawaban:

3

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.

jgrocha
sumber
Ok terima kasih untuk saran itu. Meskipun saya berharap untuk mendapatkan beberapa jenis solusi, saya kira ini adalah jawaban yang mungkin akan saya dapatkan. Jadi saya harus mempertimbangkan kompilasi dari sumber dengan memanipulasi kode sumber atau mengirimkan permintaan fitur dan berharap bahwa mungkin ada solusi yang diterapkan di masa depan ...
ADorsch
Jika Anda menyiapkan dan mengirimkan permintaan fitur, Anda membantu orang lain di masa depan yang akan menghadapi batasan yang sama. Anda mengembalikan sesuatu yang bermanfaat kembali ke komunitas. Meskipun Anda dapat memperbaiki batasan 100 dengan mengubahnya menjadi 5000 atau 10000, pengembang akan mencoba untuk menghadiri permintaan Anda dengan cara yang cocok untuk semua, tidak hanya untuk Anda, menjaga kode konsisten dan dokumentasi diperbarui. Dengan mengirimkan permintaan fitur, Anda berkontribusi untuk meningkatkan QGIS. Setelah permintaan fitur diterima dan permintaan tarik digabungkan, Anda dapat menginstal dan menggunakan build malam.
jgrocha
Tentu saja, aku bersamamu di sini! Terima kasih atas pernyataan Anda, tunjukkan, bahwa alat sumber terbuka yang sukses seperti QGIS didasarkan pada komunitas aktif yang membuatnya sangat dinamis, dan bagaimana setiap orang dapat berkontribusi pada pengembangan ini.
ADorsch
Saya akan menyiapkan permintaan fitur!
ADorsch