Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Akcje Pythona - dodawanie warstw do grupy
14-09-2011, 08:48,
#1
Akcje Pythona - dodawanie warstw do grupy
Stworzyłem akcję na warstwie wektorowej dodającą ortofotomapę (wirtualny raster) danego obszaru:
Cytat:Typ - Python
Nazwa - Dodaj ortofoto
Akcja - qgis.utils.iface.addRasterLayer('%Path%Image')

Czy można tak rozbudować tą akcję, żeby ortofotomapa dodawała się do konkretnej grupy warstw (np: ortofoto 2009) w projekcie?
14-09-2011, 20:08,
#2
RE: Akcje Pythona - dodawanie warstw do grupy
http://www.qgis.org/api/classQgsLegendInterface.html

W opisie jest slot moveLayer. Może da się to jakoś wykorzystać.
16-09-2011, 15:42,
#3
RE: Akcje Pythona - dodawanie warstw do grupy
Jest tam coś takiego:
Cytat:
Kod:
virtual void QgsLegendInterface::moveLayer     (     QgsMapLayer *      ml,
        int      groupIndex    
    )             [pure virtual, slot]
Move a layer to a group.

Jednak nie mam pojęcia jak to ugryźć, nie potrafię samodzielnie napisać nawet linijki w Pythonie Sad

Mam jeszcze jedno pytanie, stworzyłem akcję na warstwie gmin, która wyświetla obiekty z bazy dla tej gminy.
Kod:
qgis.utils.iface.addVectorLayer (u"dbname='mojabaza' host=192.168.0.1 port=5432 key='gid' table='obiekty'(the_geom)sql=id LIKE '%ident%'",'%NazwaGm','postgres')

Czy (a raczej - jak Big Grin) można rozbudować tą akcję w taki sposób, aby obiekty wyświetliły się w stylu w jakim ja chcę a nie domyślnym (losowy kolor wypełnienia i czarne granice)?
16-09-2011, 20:38,
#4
RE: Akcje Pythona - dodawanie warstw do grupy
Cześć
Kolejne polecenia można oddzielać średnikami. Mi udało się wczytać warstwę rastrową i przesunąć ją do pierwszej grupy za pomocą polecenia:
Kod:
layer = qgis.utils.iface.addRasterLayer('%raster','rast'); qgis.utils.iface.legendInterface().moveLayer(layer,1)
Polecenie moveLayer ma dwa parametry:
-wskaźnik do warstwy w legendzie (pobierany przy wczytywaniu rastra)
-numer grupy, gdzie 0 - brak grupy (warstwa pojawia się na samej górze), 1 - pierwsza grupa od gór, 2-druga grupa od góry itd.
Nie wiem tylko jak wyciągnąć numer grupy z aktualnie zaznaczonej warstwy, jak masz ustaloną kolejność grup to możesz pobrać ten parametr z kolumny warstwy wektorowej.
16-09-2011, 21:04,
#5
RE: Akcje Pythona - dodawanie warstw do grupy
(16-09-2011, 20:38)p0cisk napisał(a): -numer grupy, gdzie 0 - brak grupy (warstwa pojawia się na samej górze), 1 - pierwsza grupa od gór, 2-druga grupa od góry itd.

Małe sprostowanie: 1-pierwsza pozycja od góry, 2-druga itd
Warstwy niegrupowane też są numerowane. Jeżeli w projekcie masz 2 warstwy, a potem dwie grupy to nr pierwszej grupy to 3 (trzecia pozycja w legendzie). Druga grupa ma wtedy nr 4.
16-09-2011, 21:25,
#6
RE: Akcje Pythona - dodawanie warstw do grupy
Rzeczywiście, indeksowane są wszystkie warstwy znajdujące się na pierwszym poziomie, i jeśli indeks w poleceniu moveLayer wskazuje na zwykłą warstwę to raster pozostaje na samej górze.
16-09-2011, 21:38,
#7
RE: Akcje Pythona - dodawanie warstw do grupy
Coś takiego powinno zadziałać:

Kod:
layer = qgis.utils.iface.addRasterLayer('%raster','rast')
lista = qgis.utils.iface.legendInterface().groupLayerRelationship()
for i in range(0,len(lista)):
   if lista[i][0]=='nazwa_grupy':
      qgis.utils.iface.legendInterface().moveLayer(layer,i+1)

Tylko nie wychodzi mi zapisanie tego w jednej linii akcji Smile

P.S.
Nazwy grup muszą być unikalne.
16-09-2011, 22:18,
#8
RE: Akcje Pythona - dodawanie warstw do grupy
Ale się rozkręciliście Smile Dzięki, nie mogę teraz sprawdzić, ale wygląda obiecująco Cool A na style wyświetlania po załadowaniu warstwy w też coś macie? Angel
16-09-2011, 22:54,
#9
RE: Akcje Pythona - dodawanie warstw do grupy
(16-09-2011, 22:18)tomalos napisał(a): A na style wyświetlania po załadowaniu warstwy w też coś macie? Angel

Mam taką propozycję. Wczytujesz 'ręcznie' daną warstwę. We właściwościach ustawiasz wymagany styl i zapisujesz na dysku. To będzie Twój wzorzec stylu, który będzie zaczytywany po dodaniu warstwy przez akcję. A akcja wygląda tak:

Kod:
warstwa=qgis.utils.iface.addRasterLayer(Twoja_warstwa); warstwa.loadNamedStyle(ścieżka_dostępu_do_pliku_ze_stylem)
17-09-2011, 10:21,
#10
RE: Akcje Pythona - dodawanie warstw do grupy
Cytat:Coś takiego powinno zadziałać:

Kod:
Kod:
layer = qgis.utils.iface.addRasterLayer('%raster','rast')
lista = qgis.utils.iface.legendInterface().groupLayerRelationship()
for i in range(0,len(lista)):
    if lista[i][0]=='nazwa_grupy':
       qgis.utils.iface.legendInterface().moveLayer(layer,i+1)

Tylko nie wychodzi mi zapisanie tego w jednej linii akcji

Powyższy kod można zapisać w jednej linii w ten sposób:
Kod:
layer = qgis.utils.iface.addRasterLayer('%raster','rast'); lista = qgis.utils.iface.legendInterface().groupLayerRelationship();[qgis.utils.iface.legendInterface().moveLayer(layer,i) for i in range(0,len(lista)) if lista[i][0]=='nazwa_grupy']
Trochę przetestowałem na różnych konfiguracjach grup i warstw i u mnie działa.
Pozdrawiam


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Nie wykryto wsparcia pythona aasky 4 2 513 16-11-2021, 22:31
Ostatni post: xmaziax
  input w konsoli pythona Kzyhó 0 2 992 20-03-2019, 12:48
Ostatni post: Kzyhó
  Akcje w QGIS hasan1685 1 4 559 23-01-2019, 15:18
Ostatni post: xmaziax
  problem z wtyczką pythona i wydrukiem KarolinaDko 2 7 119 06-11-2018, 18:44
Ostatni post: jerresso
  Akcje Rayo 32 123 423 15-11-2016, 11:30
Ostatni post: sebaq
  Kadrowanie rastra - błąd kodu Pythona Niebieska 12 38 756 20-10-2016, 20:45
Ostatni post: Niebieska
  Błąd wyświetlania legendy - grupy/podgrupy banan8 2 9 920 19-09-2016, 09:31
Ostatni post: banan8
  comboBox w konsoli Pythona sevil37 0 6 078 24-04-2016, 21:52
Ostatni post: sevil37
  Błąd wtyczki MetaSearch (błąd pythona) norek_norek 0 8 812 02-01-2015, 10:28
Ostatni post: norek_norek
  menu 'akcje' w formularzu edycji QGIS 2.6 sebaq 0 7 301 05-11-2014, 20:56
Ostatni post: sebaq

Skocz do: