QGISのログメッセージパネルの問題を解決する方法:「100を超えるリクエストエラーをログに記録しない」。


9

エラー/警告が検出されるとすぐに再描画をトリガーするために、pyqgisで次のコードを使用してWMSレイヤーからのエラー/警告をキャッチしています(前の質問に基づいて:ログメッセージパネルからWMSエラーメッセージをキャッチする方法QGISでPythonを使っていますか?

しかし、明らかに「WMS」プロバイダーには、メッセージログに100を超えるエラーリクエストを送信しないという制限があるようです。つまり、100回目のエラー/警告の後、WMSレイヤーがまだ正しく応答していません。それでも、ログパネルに独自のメッセージを送信する場合、制限はないようです(以下のコードを参照)。

メッセージログパネルを使用する代わりに、ここで責任があるインスタンスから直接エラー/警告をキャッチする可能性はありますか(おそらくWMSプロバイダーです)。または、実行中のプロセスのログメッセージパネルをクリア/リセットするか、制限を解除しますか?

Windows 10でQGIS 2.18.2を使用しています。

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を参照)


1
この制限は、C ++コードのqgswmsproviderクラスに組み込まれているようです。ソースからQGISをコンパイルするオプションはありますか?
スティーブンケイ

@Steven Kay ah okわかりました、コードに対応するセクションがあります...残念ながら、ソースからコンパイルした経験はありません。コードが実行されたらすぐに、QGISを複数のコンピューターにインストールする必要があります。しかし、他に選択肢がない場合、私は選択の余地がないと思います...とにかくヒントのヒント!
ADorsch 2017年

回答:


3

現在、100の制限はWMSプロバイダーでハードコードされています。しかし、QGISは素晴らしいオープンソースプロジェクトであり、このリクエストを送信して、この制限を構成可能なパラメーターに変えることができます。

すべての開発者がこの機能リクエストを受け取り、新しいプルリクエストをQGISに送信できます。ソリューションが受け入れられれば、コア開発者は次のバージョン3と現在の2.14.xおよび2.18.xバージョンの両方に変更を適用できます。

したがって、あなたの質問への答えは、QGISへの新機能リクエストの提出です。


わかりました。私はある種の回避策のアイデアを得ることを望んでいましたが、これはおそらく私が得るであろう答えと同じくらいの答えだと思います。そのため、ソースコードを操作してソースからコンパイルすることを検討するか、機能のリクエストを送信し、将来的に解決策が実装されることを期待する必要があります...
ADorsch

機能のリクエストを準備して送信すると、同じ制限に直面する他の人を支援することになります。あなたは有用な何かをコミュニティに返しています。100の制限を5000または10000に変更することで修正できますが、開発者はあなただけでなくすべてに適した方法でリクエストに対応し、コードの一貫性とドキュメントを更新します。機能リクエストを送信することで、QGISの改善に貢献します。機能要求が受け入れられ、プル要求がマージされたら、ナイトリービルドをインストールして使用できます。
jgrocha 2017

絶対に、私はあなたとここにいます!あなたの声明のThxは、QGISのようなこのような成功したオープンソースツールは、それを非常に動的にするアクティブなコミュニティに基づいており、誰もがこの開発にどのように貢献できるかを指摘しています。
ADorsch 2017

さて、機能リクエストをご用意します!
ADorsch 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.