Mam problem / pytanie dotyczące Pythona i QGIS. Czy można uzyskać dane jednej wybranej funkcji w QGIS przy użyciu Pythona, a jeśli tak, to w jaki sposób?
W moim przykładzie mam warstwę, która pokazuje kilka działek do planowania urbanistycznego. Jeśli teraz wybiorę jedną z paczek, chcę uzyskać dane dokładnie dla tej paczki. Dane te powinny zostać odczytane przez skrypt Pythona, a następnie dodane do automatycznie utworzonego pliku PDF. Ostatni krok jest łatwy, ale nie otrzymałem danych z tej wybranej funkcji.
Możliwe jest uzyskanie danych z aktywnej warstwy, ale czy możliwe jest również uzyskanie danych z jednej wybranej funkcji tej warstwy?
Mam nadzieję, że możesz mi pomóc. pozdrowienia
Chciałem tylko opublikować kilka aktualizacji poprzedniej odpowiedzi w świetle zmian w QGIS Python API od wersji 2.0 .
Tak jak poprzednio, otrzymasz listę wybranych funkcji
iface.activeLayer().selectedFeatures()
, jednak wQGIS
wersjach>= 2.0
używasz teraz tej funkcjiQgsFeature.attributes()
zamiastQgsFeature.attributeMap()
. Dwie funkcje nie są dokładnie takie same:attributes()
teraz zwraca listę , podczas gdy staraattributeMap()
zwróciła słownik . Poświęć chwilę, aby zapoznać się z dokumentacją API dlaQgsFeature.attributes()
,QgsAttributes
itp zrozumieć, w jaki sposób atrybuty są przechowywane / dostępne.Jeśli jesteś zainteresowany, możesz przeczytać o uzasadnieniu zmian API w tym wątku na liście mailowej: [Qgis-developer] nowe funkcje wyboru interfejsu wektorowego . W skrócie (słowami dewelopera QGIS, Martina Dobiasa):
Jako przykład konkretnie tego, o co pytałeś (jak uzyskać dane dla pojedynczej wybranej funkcji), załóżmy, że posiadasz warstwę zawierającą
city
funkcje, z których każda ma listę atrybutów, w tymcounty
atrybut. Aby uzyskaćcounty
wartość dla wybranego miasta (powiedzmyHelena, AR
), wykonaj następujące czynności w konsoli Python:Jeśli chcesz wartości wszystkich pól w tabeli atrybutów miasta, po prostu użyj:
źródło
Chciałbym dodać coś użytecznego do odpowiedzi udzielonej przez J. Taylora i wskazać, że obecna zaakceptowana odpowiedź z 2012 roku nie jest już poprawna:
Obiekt QgsFeature obsługuje użyteczny
__geo_interface__
atrybut, który zwraca słownik z danej funkcji. Słownik jest w rzeczywistości w standardzie GeoJSON, więc uwzględniono wszystkie pary atrybut-wartość i geometrię. Ta funkcja istnieje od jakiegoś czasu, po raz pierwszy opisana przez Seana Gilliesa w 2012 roku, z przykładem użycia tutaj . Nie mogłem znaleźć żadnej informacji, z której wersji QGIS jest ona dostępna i nie próbowałem jeszcze QGIS 3, ale na pewno byłem dostępny przynajmniej z QGIS 2.14.TL; DR:
źródło