Odpowiedzi:
Uzyskaj odniesienie do warstwy:
layer = iface.activeLayer()
Wybierz funkcje według wyrażenia:
layer.selectByExpression( "\"ogc_fid\"=482" )
Wykonaj następujące kroki:
Uzyskaj odniesienie do warstwy:
cLayer = iface.mapCanvas().currentLayer()
Uzyskaj FeatureIterator z wyrażenia:
expr = QgsExpression( "\"ogc_fid\"=482" )
it = cLayer.getFeatures( QgsFeatureRequest( expr ) )
Zbuduj listę identyfikatorów funkcji na podstawie wyników uzyskanych w 2 .:
ids = [i.id() for i in it]
Wybierz funkcje z identyfikatorami uzyskanymi w 3 .:
cLayer.setSelectedFeatures( ids )
UWAGA: Jeśli chcesz ustawić wyrażenie z wartością ciągu , musisz dodać znaki cudzysłowu do takiej wartości, w ten sposób:
expr = QgsExpression( " \"name\" = 'my string' " )
Jeśli wartość ciągu pochodzi od zmiennej, możesz to zrobić:
myVariable = 'my string'
expr = QgsExpression( " \"name\" = '{}' ".format(myVariable) )
"\"ogc_fid\"=482 AND \"name\"='hello world'"
. BTW, link podany w komentarzu faktycznie oznacza, że atrybut statyczny BinaryOperatorText
nie jest dostępny w powiązaniach Pythona, ale operatory działają QgsExpression
, nawet jeśli są używane przez powiązania Pythona.
expr = QgsExpression("\"police_ref\" = 'P0580996'")
. Próbowałem dodać znak przerwania do wyszukiwanego terminu (dla pojedynczych cudzysłowów), ale to nie robi różnicy. Co ciekawe, jeśli otworzę tabelę atrybutów, o którą pytam, i użyję konstruktora wyrażeń, dokona wyboru, jeśli policja_ref, której użyję jako przykład, znajduje się w pierwszym rzędzie, ale nie inaczej
To działało dla mnie w QGIS Python Console
layer = qgis.utils.iface.activeLayer()
layer .selectByExpression(" \"ogc_fid\" = '{}' ".format(482))
Musisz go tylko przetestować w interfejsie GUI: „Wybierz według wyrażenia”. Jeśli to działa, możesz wkleić go w kodzie Pythona otoczonym podwójnymi cudzysłowami „”.
exp = QgsExpression("ogc_fid=482")
Jeśli porównasz do ciągu, możesz dodać pojedynczy cudzysłów „”.
exp = QgsExpression("ogc_fid='482'")
Jest to ta sama zasada w pythonie, może różnicować podwójny cytat i pojedynczy cytat.
"\"ogc_fid\"=482 AND name=\"hello world\""
? Tutaj napisano, że nie jest to dostępne w Pythonie: qgis.org/api/… . Może znasz sposób na obejście tego ograniczenia?