Bağımsız bir uygulamada pyqgis kullanıyorum. Şimdi kural olarak filterExpression olarak kullanmak için özel bir ifade oluşturmak istedim ruleBasedRendererV2
. (Daha önce mevcut işlevlerle oluşturucuyu denedim ve her şey iyi çalıştı!)
Özel qgisfunction
(bitsel AND işlevi - henüz böyle bir işlev olmadığından) şöyle görünür:
from qgis.utils import qgsfunction
@qgsfunction(args="auto", group='Python')
def bitwise_and(value1, value2, feature, parent):
return value1 & value2
Ayrıca, kaydetmeye çalıştım:
from qgis.core import QgsExpression
QgsExpression.registerFunction(bitwise_and)
İfadeyi şu yolla test etme:
expressionString = 'bitwise_and(2, 2) = 2'
exp = QgsExpression(expressionString)
if exp.hasParserError():
print(exp.parserErrorString())
( 2=2
Her zaman bu şekilde verilir True
) işlevi kaydettikten sonra çalışır ve değilse başarısız olur. Ama yine de, ifadeyi kural içinde kullanamıyorum ...
Şu anda, işlevi içeren dosya otomatik olarak PATH'e dahil edilen proje klasörümde en üstte yer alıyor, değil mi ?! (Nathan Woodrow'a göre, dosya PATH'ın herhangi bir yerine yerleştirilebilir - bkz. Https://nathanw.net/2012/11/10/user-defined-expression-functions-for-qgis/ ).
GÜNCELLEME: Fonksiyonun kaydedilmesi şu ana kadar çalışıyor, yukarıdan kodla - şimdi sorun fonksiyonun kendisinde yatıyor ...
GÜNCELLEME # 2:
Çok ilginç! do_nothing
İki argüman almak basit fonksiyon benim kodda iyi çalışıyor:
@qgsfunction(args="auto", group='Python')
def do_nothing(value1, value2, feature, parent):
return value1
İfadeyi kullanma expString = 'do_nothing(2, 2) = 2'
GÜNCELLEME # 3:
Basit bir değişiklik do_nothing
için add_one
artık çalışmaz:
@qgsfunction(args="auto", group='Python')
def add_one(value1, value2, feature, parent):
return value1 + 1
aracılığıyla çağırıyor expString = 'add_one(2, 2) = 3'
. Bu yüzden geri dönen tip ile ilgili bir şey olduğunu düşünüyorum ?!
@qgsfunction
işlevi kullandığınız gibi, kodunuzdaki işlevi mi kullanıyorsunuz ? expressions
Sadece ana uygulama için olan kendi komut dosyanızı oluşturuyorsanız klasörü yok sayabilirsiniz
do_nothing
). Ama orijinal bitwise_and
işlevim hala çalışmıyor. Şimdi, o zamandan beri, işlevin dönüş türü ile ilgili bir şey olduğunu düşünüyorum do_nothing works
, ama add_one
değil!
~/.qgis2/python/expressions/