|
Akcje Pythona - dodawanie warstw do grupy
|
|
14-09-2011, 08:48 AM
Post: #1
|
|||
|
|||
|
Akcje Pythona - dodawanie warstw do grupy
Stworzyłem akcję na warstwie wektorowej dodającą ortofotomapę (wirtualny raster) danego obszaru:
Cytat:Typ - Python Czy można tak rozbudować tą akcję, żeby ortofotomapa dodawała się do konkretnej grupy warstw (np: ortofoto 2009) w projekcie? |
|||
|
14-09-2011, 08:08 PM
Post: #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, 03:42 PM
Post: #3
|
|||
|
|||
|
RE: Akcje Pythona - dodawanie warstw do grupy
Jest tam coś takiego:
Cytat: Jednak nie mam pojęcia jak to ugryźć, nie potrafię samodzielnie napisać nawet linijki w Pythonie ![]() 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 ) 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, 08:38 PM
Post: #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)-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, 09:04 PM
Post: #5
|
|||
|
|||
RE: Akcje Pythona - dodawanie warstw do grupy
(16-09-2011 08:38 PM)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, 09:25 PM
Post: #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, 09:38 PM
Post: #7
|
|||
|
|||
|
RE: Akcje Pythona - dodawanie warstw do grupy
Coś takiego powinno zadziałać:
Kod: layer = qgis.utils.iface.addRasterLayer('%raster','rast')Tylko nie wychodzi mi zapisanie tego w jednej linii akcji ![]() P.S. Nazwy grup muszą być unikalne. |
|||
|
16-09-2011, 10:18 PM
Post: #8
|
|||
|
|||
|
RE: Akcje Pythona - dodawanie warstw do grupy
Ale się rozkręciliście
Dzięki, nie mogę teraz sprawdzić, ale wygląda obiecująco A na style wyświetlania po załadowaniu warstwy w też coś macie?
|
|||
|
16-09-2011, 10:54 PM
Post: #9
|
|||
|
|||
RE: Akcje Pythona - dodawanie warstw do grupy
(16-09-2011 10:18 PM)tomalos napisał(a): A na style wyświetlania po załadowaniu warstwy w też coś macie? 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 AM
Post: #10
|
|||
|
|||
RE: Akcje Pythona - dodawanie warstw do grupy
Cytat:Coś takiego powinno zadziałać: 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']Pozdrawiam |
|||
|
« Starszy wątek | Nowszy wątek »
|

Szukaj
Użytkownicy
Kalendarz
Pomoc




) 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)?


A na style wyświetlania po załadowaniu warstwy w też coś macie?