QGIS의 로그 메시지 패널 문제를 해결하는 방법 :“100 개 이상의 요청 오류를 기록하지 않습니다.”


9

pyqgis에서 다음 코드를 사용하여 오류 / 경고가 감지되는 즉시 다시 그리기를 트리거하기 위해 WMS 계층에서 오류 / 경고를 포착하고 있습니다 (이전 질문 : 로그 메시지 패널에서 WMS 오류 메시지를 잡는 방법) 파이썬으로 QGIS에서? )

그러나 분명히 "WMS"제공 업체는 메시지 로그에 100 개 이상의 오류 요청을 보내지 않는 제한이있는 것 같습니다. 즉, 100 번째 오류 / 경고 후에는 WMS 계층이 더 이상 신호를 포착 할 수 없습니다. 여전히 올바르게 응답하지 않습니다. 그럼에도 불구하고 로그 패널에 자체 메시지를 보내면 아무런 제한이없는 것 같습니다 (아래 코드 참조).

메시지 로그 패널을 사용하는 대신 여기에서 담당하는 인스턴스 (WMS 제공 업체 인 것 같습니다)에서 직접 오류 / 경고를 포착 할 가능성이 있습니까? 아니면 실행중인 프로세스에서 로그 메시지 패널을 지우거나 재설정하거나 제한을 제거합니까?

Windows 10에서 QGIS 2.18.2를 사용하고 있습니다.

파이썬 코드는 다음과 같습니다.

# 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

@Steven Kay ah ok 코드에 해당 섹션이 있습니다 ... 불행히도 소스에서 컴파일 한 경험이 없습니다. 코드가 실행 되 자마자 여러 컴퓨터에 QGIS를 설치해야합니다. 그러나 다른 옵션이 없다면 나는 선택의 여지가 없다고 생각합니다 ... 어쨌든 힌트를 위해 thx!
ADorsch

답변:


3

현재 100 개의 제한이 WMS 공급자에 하드 코딩되어 있습니다. 그러나 QGIS는 훌륭한 오픈 소스 프로젝트이며이 제한을 구성 가능한 매개 변수로 바꾸는 기능 요청 을 제출할 수 있습니다 .

모든 개발자는이 기능 요청을 받아 새로운 풀 요청을 QGIS에 제출할 수 있습니다 . 솔루션이 승인되면 핵심 개발자는 향후 버전 3과 현재 2.14.x 및 2.18.x 버전 모두에 변경 사항을 적용 할 수 있습니다.

따라서 귀하의 질문에 대한 답변은 QGIS에 새로운 기능 요청 제출입니다.


그 조언을 위해 thx를 확인하십시오. 나는 일종의 해결 방법 아이디어를 원했지만 이것이 아마도 내가 얻을 수있는 것만 큼 많은 대답이라고 생각합니다. 따라서 소스 코드를 조작하여 소스에서 컴파일하거나 기능 요청을 제출하고 향후에 솔루션이 구현 될 수 있기를 희망해야합니다.
ADorsch

기능 요청을 준비하고 제출하면 나중에 동일한 제한에 직면 할 다른 사람들을 돕고 있습니다. 유용한 정보를 다시 커뮤니티에 반환하고 있습니다. 100 제한을 5000 또는 10000으로 변경하여 100 제한을 해결할 수는 있지만 개발자는 코드 일관성 및 문서를 업데이트 된 상태로 유지하면서 사용자뿐만 아니라 모든 사람에게 적합한 방식으로 요청에 참여하려고합니다. 기능 요청을 제출하면 QGIS 개선에 기여하게됩니다. 기능 요청이 승인되고 풀 요청이 병합 된 후 야간 빌드를 설치하고 사용할 수 있습니다.
jgrocha

물론, 나는 당신과 함께 있습니다! QGIS와 같은 성공적인 오픈 소스 도구는 활발한 커뮤니티를 기반으로하며, 매우 역동적이고 모든 사람이이 개발에 기여할 수있는 방법을 제시합니다.
ADorsch

그런데 기능 요청을 준비하겠습니다!
ADorsch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.