Yanıtlar:
Katman referansını alın:
layer = iface.activeLayer()
Özellikleri ifadeye göre seçin:
layer.selectByExpression( "\"ogc_fid\"=482" )
Bu adımları takip et:
Katman referansını alın:
cLayer = iface.mapCanvas().currentLayer()
İfadeden bir featureIterator edinin:
expr = QgsExpression( "\"ogc_fid\"=482" )
it = cLayer.getFeatures( QgsFeatureRequest( expr ) )
2'de elde edilen sonuçtan özellik ID'lerinin bir listesini oluşturun:
ids = [i.id() for i in it]
3'te elde edilen kimliğe sahip özellikleri seçin:
cLayer.setSelectedFeatures( ids )
Not: dize değeri olan bir ifade ayarlamak istiyorsanız , böyle bir değere tırnak işaretleri eklemeniz gerekir:
expr = QgsExpression( " \"name\" = 'my string' " )
Dize değeriniz bir değişkenten geliyorsa, bunu yapabilirsiniz:
myVariable = 'my string'
expr = QgsExpression( " \"name\" = '{}' ".format(myVariable) )
"\"ogc_fid\"=482 AND \"name\"='hello world'"
. BTW, yorumunuza eklediğiniz bağlantı aslında BinaryOperatorText
Python bağlarında statik özniteliğin bulunmadığını, ancak işleçlerin QgsExpression
Python bağlamaları ile kullanılsalar bile çalıştığını belirtiyor .
expr = QgsExpression("\"police_ref\" = 'P0580996'")
. Arama terimine (tek tırnak için) bir kesme karakteri eklemeyi denedim ama bir fark yaratmıyor. İlginç bir şekilde, sorguladığım öznitelik tablosunu açar ve orada ifade oluşturucuyu kullanırsam, örnek olarak kullandığım police_ref ilk sıradaysa, ancak başka türlü değilse, bir seçim yapar
Bu benim için QGIS Python Konsolunda çalıştı
layer = qgis.utils.iface.activeLayer()
layer .selectByExpression(" \"ogc_fid\" = '{}' ".format(482))
Yalnızca GUI arayüzünde test etmeniz gerekir: "İfadeye Göre Seç". Çalışırsa, çift tırnak işareti "" ile çevrili Python kodunuza yapıştırabilirsiniz.
exp = QgsExpression("ogc_fid=482")
Bir dizeyle karşılaştırırsanız, tek tırnak ekleyebilirsiniz ''.
exp = QgsExpression("ogc_fid='482'")
Python ile aynı prensiptir, çift tırnak ve tek tırnak arasındaki farkı yaratabilir.
"\"ogc_fid\"=482 AND name=\"hello world\""
? Burada bunun python'da mevcut olmadığını söylüyor: qgis.org/api/… . Belki de bu sınırlamayı aşmanın bir yolunu biliyorsunuzdur?