Forum QGIS

Pełna wersja: QgsDataProvider()
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Z poziomu Pythona próbuję utworzyć nowy obiekt QgsDataProvider na podstawie już istniejącego:

Kod:
provider = warstwa.dataProvider()
uri = provider.dataSourceUri()
providerNew = QgsDataProvider(uri)

Niestety otrzymuję komunikat:

Kod:
providerNew = QgsDataProvider(uri)
TypeError: qgis.core.QgsDataProvider represents a C++ abstract class and cannot be instantiated

Czy można to jakoś obejść?
A po cóż Ci obiekt klasy QgsDataProvider odpięty od warstwy? Możesz utworzyć pustą warstwę w pamięci, a razem z nią providera:

Kod:
warstwaNew = QgsVectorLayer('Polygon', 'moja fejkowa warstwa', 'memory')
providerNew = warstwaNew.dataProvider()
(25-07-2012, 00:05)borys napisał(a): [ -> ]A po cóż Ci obiekt klasy QgsDataProvider odpięty od warstwy?

Potrzebuję dostępu do danych z ich dodatkowym filtrowaniem za pomocą setSubsetString(). Nie muszę tego wyświetlać na mapie.
Nie chcę modyfikować "oryginalnego" providera (tego od warstwy 'warstwa'), bo ma to wpływ na wyświetlanie 'warstwy', a dodatkowo mogę coś namieszać i przez przypadek projekt zepsuć.

Pewnie będzie trzeba założyć dodatkową warstwę jak radzisz i z niej pobrać providera.