Mam problem z ustaleniem, jak iterować warstwy mapy. Mogę uzyskać dostęp do aktualnie podświetlonej warstwy w spisie treści, iface.activeLayer()
ale chcę, aby mój kod działał na wszystkich warstwach.
W interfejsie API nie widzę niczego, co zapewnia łatwy dostęp do tej funkcji i nie mogę znaleźć dobrego przykładu online, ale może coś przeoczyłem?
Odpowiedzi:
Próbować...
Zaczerpnięte z consolidatethread.py z wtyczką QConsolidate .
Opis obiektu QgsLegendInterface zwrócony z legendInterface ().
Edycja : dodano informacje o „ja” powyżej.
źródło
Istnieją również dwa inne sposoby:
da ci listę warstw
lub
źródło
2.16
powyżej i powyżejW przypadku QGIS 2.6 poniżej znajduje się kod identyfikujący każdą warstwę i grupujący ją:
Uwaga: Po zgrupowaniu muszę usunąć zduplikowaną warstwę, więc użyłem
root.removeLayer(lyr)
.źródło
W przypadku QGIS 3
QgsMapLayerRegistry
przeniesiono funkcjonalność doQgsProject
.Tak więc, do iteracji po warstwach mapy, powinieneś użyć tej struktury:
.mapLayers()
zwraca słownik o strukturze{layer_x_id: layer_x, layer_y_id: layer_y, ....}
. Następnie możesz iterować po warstwach takich jak:Ponieważ
.mapLayers()
zwraca słownik (dict
), możesz także użyć.values()
metody słownika, która zwraca tylko taką,list
która zawiera w tym przypadku warstwy. Następnie możesz iterować po warstwach takich jak:Jeśli wolisz, możesz iterować w ten sposób:
źródło
for layer in layers: print(layer)
Możesz użyć skryptu, aby wydrukować klucze. Lub po prostu użyjprint(layers.keys())
bezfor
pętli.