독립형 응용 프로그램 내에서 pyqgis를 사용하고 있습니다. 이제 규칙에서 filterExpression으로 사용할 사용자 지정 표현식을 만들고 싶었습니다 ruleBasedRendererV2
. (이전에 기존 함수로 렌더러를 사용해 보았지만 모든 것이 잘 작동했습니다!)
사용자 정의 qgisfunction
(비트 AND 함수-아직 함수가 없으므로)는 다음과 같습니다.
from qgis.utils import qgsfunction
@qgsfunction(args="auto", group='Python')
def bitwise_and(value1, value2, feature, parent):
return value1 & value2
또한 다음을 통해 등록하려고했습니다.
from qgis.core import QgsExpression
QgsExpression.registerFunction(bitwise_and)
다음을 통해 표현식 테스트 :
expressionString = 'bitwise_and(2, 2) = 2'
exp = QgsExpression(expressionString)
if exp.hasParserError():
print(exp.parserErrorString())
( 2=2
항상 제공 True
)은 기능을 등록한 후에 작동하며, 그렇지 않으면 실패합니다. 그러나 여전히 규칙 내에서 표현식을 사용할 수 없습니다 ...
현재 함수를 포함하는 파일이 PATH에 자동으로 포함되는 프로젝트 폴더의 맨 위에 있습니까? (Nathan Woodrow에 따르면 파일은 PATH의 어느 위치 에나 배치 할 수 있습니다 ( https://nathanw.net/2012/11/10/user-defined-expression-functions-for-qgis/ 참조 ).
업데이트 : 함수 등록은 지금까지의 코드로 작동합니다. 이제 문제는 함수 자체에 있습니다 ...
업데이트 # 2 :
아주 이상한! do_nothing
두 가지 인수를 얻는 간단한 함수 는 내 코드에서 잘 작동합니다.
@qgsfunction(args="auto", group='Python')
def do_nothing(value1, value2, feature, parent):
return value1
식 사용 expString = 'do_nothing(2, 2) = 2'
업데이트 # 3 :
간단한 변화 do_nothing
로는 add_one
더 이상 작동하지 않습니다
@qgsfunction(args="auto", group='Python')
def add_one(value1, value2, feature, parent):
return value1 + 1
통해 전화 expString = 'add_one(2, 2) = 3'
. 그것이 리턴 타입과 관련이 있다고 생각하는 이유입니다!
@qgsfunction
코드에서 함수를 정의 할 때와 같이 코드 에서 함수 를 사용하고 있습니까? expressions
메인 앱 전용 스크립트를 만드는 경우 폴더 를 무시할 수 있습니다.
do_nothing
:). 그러나 내 원래 기능 bitwise_and
은 여전히 작동 하지 않습니다. 이제 함수의 반환 유형과 관련이 있다고 생각 do_nothing works
하지만 add_one
그렇지 않습니다!
~/.qgis2/python/expressions/
한 다음 QGIS를 다시로드하면 표현식 작성기 섹션에서 기능을 사용할 수 있습니다. Python