Jak uzyskać funkcje według ich atrybutów (podobnych do Iqueryfilter w arcobjects) w Qgis przy użyciu Pythona? Czy zamiast pobierać wszystkie funkcje i filtrować je ręcznie, istnieje jakaś opcja użycia klauzuli where, aby ją odfiltrować?
Przykład: Mam nazwę pola o nazwie „Hrabstwa”. Ma ponad pięćdziesiąt tysięcy funkcji. Nie można pobrać wszystkich funkcji i przefiltrować ze względu na czasochłonność. Mogę więc wykonać zapytanie za pomocą iqueryfilter.whereclause = 'Counties = Norwich' w arcobjects. Podobne rzeczy potrzebuję w PyQgis.
Odpowiedzi:
Silnik wyrażeń QGIS jest w stanie to zrobić przy użyciu
QgsFeatureRequest.setFilterExpression( unicode )
metody (od QGIS 2.2)Począwszy od QGIS 2.10 jest nawet możliwe, że takie filtrowanie zapewni dodatkową wydajność w porównaniu z innymi typami filtrowania (takimi jak implementacje Pythona).
Zasadniczo ma to zastosowanie, jeśli spełnione są następujące trzy warunki:
Używasz warstwy z dostawcą PostgisW tej chwili (2.16) implementuje to znacznie więcej niż tylko dostawca Postgis (spatialite, ogr, oracle ...).>
,=
,IN
,NOT NULL
... są obsługiwane)Z QGIS 3.0 jest to nawet możliwe
źródło
W tym poście - który można uznać za odpowiedź na zduplikowane pytanie - szczegółowo opisano, jak pobrać wszystkie atrybuty z warstwy. Autor opisuje proces, którego szukasz, ręcznie filtrując dane po ich zwróceniu. Jest to całkiem kompletne odniesienie, a ich link naprawdę powinien ci pomóc.
źródło
Za pomocą zapytania SQL można to również łatwo zrobić za pomocą
ogr
. Możesz wykonać ten kod na przykład w konsoli python QGIS lub w samodzielnym skrypcie.Przykład :
źródło
Określanie filtrów SQL nie jest jeszcze obsługiwane przy użyciu interfejsu API QGIS od wersji 1.9.
Jak rozumiem z tego artykułu z listy mailingowej , obsługa „SQL dostawcy natywnego” będzie dostępna tylko w przyszłej wersji.
źródło