21-09-2011, 19:16,
|
|
tomalos
geoboss
|
Liczba postów: 364
51
Dołączył: 29-09-2009
Reputacja:
3
|
|
RE: Akcje Pythona - dodawanie warstw do grupy
Akcie działają aż miło Bardzo mi pomogliście... ale są jeszcze dwie drobnostki.
1. Nie potrafię sobie poradzić z polskimi znakami z "ogonkami" (wychodzą krzaczki) jeśli pojawiają się w nazwie gminy, dla której obiekty dodaję akcją:
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')
Zresztą tak jest zawsze jak dodaję warstwy akcją Pythona a w nazwie dodanej warstwy na wystąpić polski znak z "ogonkiem".
2. Warstwy rastrowe dodane akcją Pythona do konkretnej grupy lądują co prawda w grupie, jednak zachowują się jakby leżały "na wierzchu". Włączenie i wyłączenie wyświetlania dodanej warstwy przywołuje ją do porządku.
Jesteście w stanie poradzić coś na te drobnostki?
|
|
21-09-2011, 19:25,
|
|
Rayo
geoboss
|
Liczba postów: 352
47
Dołączył: 09-12-2009
Reputacja:
3
|
|
RE: Akcje Pythona - dodawanie warstw do grupy
(21-09-2011, 19:16)tomalos napisał(a): 1. Nie potrafię sobie poradzić z polskimi znakami z "ogonkami" (wychodzą krzaczki) jeśli pojawiają się w nazwie gminy, dla której obiekty dodaję akcją:
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')
Zresztą tak jest zawsze jak dodaję warstwy akcją Pythona a w nazwie dodanej warstwy na wystąpić polski znak z "ogonkiem".
Dodanie litery 'u' przed nazwą warstwy powinno pomóc. Tzn zapis powinien wyglądać tak:
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%'",u'%NazwaGm','postgres')
Cytat:2. Warstwy rastrowe dodane akcją Pythona do konkretnej grupy lądują co prawda w grupie, jednak zachowują się jakby leżały "na wierzchu". Włączenie i wyłączenie wyświetlania dodanej warstwy przywołuje ją do porządku.
Co znaczy, że zachowują się jakby były na wierzchu? Na mapie przykrywają inne warstwy?
|
|
21-09-2011, 19:38,
|
|
tomalos
geoboss
|
Liczba postów: 364
51
Dołączył: 29-09-2009
Reputacja:
3
|
|
RE: Akcje Pythona - dodawanie warstw do grupy
Cytat:Co znaczy, że zachowują się jakby były na wierzchu? Na mapie przykrywają inne warstwy?
Dokładnie tak. Po przesunięciu warstwy wyżej lub niżej albo wyłączeniu i włączeniu jej wyświetlania problem znika.
|
|
21-09-2011, 19:41,
|
|
p0cisk
geofomaniak
|
Liczba postów: 90
1
Dołączył: 27-01-2010
Reputacja:
3
|
|
RE: Akcje Pythona - dodawanie warstw do grupy
Cytat:2. Warstwy rastrowe dodane akcją Pythona do konkretnej grupy lądują co prawda w grupie, jednak zachowują się jakby leżały "na wierzchu". Włączenie i wyłączenie wyświetlania dodanej warstwy przywołuje ją do porządku.
Też to zauważyłem. Wygląda mi to na bug. Czy dodanie na końcu polecenia
Kod: qgis.utils.iface.mapCanvas().refresh()
rozwiązuje ten problem?
Jeszcze kwestia bardziej skomplikowanych skryptów Pythona odpalanych z akcji. Można stworzyć plik .py w katalogu z projektem i go zaimportować w akcji, a następnie uruchomić z niego dowolną funkcję,do której można przekazać parametry z tabeli atrybutów.W pliku trzeba tylko pamiętać o imporcie odpowiednich modułów żeby wszystko działało.
|
|
21-09-2011, 22:09,
|
|
Rayo
geoboss
|
Liczba postów: 352
47
Dołączył: 09-12-2009
Reputacja:
3
|
|
RE: Akcje Pythona - dodawanie warstw do grupy
Może brak odświeżania mapy po zmianie jej pozycji w legendzie nie jest błędem, ale celowym zamysłem. Jeżeli akcja zmieniałaby pozycję kilku (-nastu, -dziesięciu) warstw, a program po każdej warstwie odświeżał widok to trwałoby to dosyć długo.
Niektóre działania na mapie z poziomu Pythona powodują automatyczne jej odświeżanie i czasami pisząc wtyczkę/akcję lepiej na początku wyłączyć renderowanie, a dopiero na końcu kodu włączyć je z powrotem i odświeżyć mapę. Na pewno przyspieszy to działanie.
|
|
22-09-2011, 08:39,
(Ten post był ostatnio modyfikowany: 22-09-2011, 09:03 {2} przez tomalos.)
|
|
tomalos
geoboss
|
Liczba postów: 364
51
Dołączył: 29-09-2009
Reputacja:
3
|
|
RE: Akcje Pythona - dodawanie warstw do grupy
Po dodaniu warstwy akcją (zarówno wektorowej jak i rastrowej) ładowała się ona w domyślnym stylu pomimo zadeklarowania w akcji stylu z pliku, jednak nie było to problemem bo jakiekolwiek przesunięcie mapy ją odświeżało. Dodanie na końcu polecenia
Kod: qgis.utils.iface.mapCanvas().refresh()
podziałało na styl, warstwy ładują się z tym poleceniem od razu w zadeklarowanym stylu.
Okazało się jednak, że warstwy (rastrowe i wektorowe) po załadowaniu akcją do jakiejś grupy wyświetlają się jakby "nie wiedziały", że są w tej grupie i przykrywają wszystkie załadowane do projektu warstwy, dodanie do akcji polecenia
Kod: qgis.utils.iface.mapCanvas().refresh()
nie wpływa na kolejność wyświetlania a jedynie na styl wyświetlania. Odświeżenie widoku przyciskiem "Odśwież" też tego nie zmienia.
Aha, dodanie litery 'u' przed nazwą warstwy nie pomogło, nadal są krzaczki zamiast polskich znaków z ogonkami.
|
|
22-09-2011, 19:58,
(Ten post był ostatnio modyfikowany: 22-09-2011, 20:32 {2} przez Rayo.)
|
|
Rayo
geoboss
|
Liczba postów: 352
47
Dołączył: 09-12-2009
Reputacja:
3
|
|
RE: Akcje Pythona - dodawanie warstw do grupy
(22-09-2011, 08:39)tomalos napisał(a): Okazało się jednak, że warstwy (rastrowe i wektorowe) po załadowaniu akcją do jakiejś grupy wyświetlają się jakby "nie wiedziały", że są w tej grupie i przykrywają wszystkie załadowane do projektu warstwy, dodanie do akcji polecenia
Kod: qgis.utils.iface.mapCanvas().refresh()
nie wpływa na kolejność wyświetlania a jedynie na styl wyświetlania.
Odświeżenie widoku przyciskiem "Odśwież" też tego nie zmienia.
To jest chyba jakiś błąd. Odświeżanie wywołane z Pythona też nie poprawia sytuacji. Trzeba to wziąć sposobem. Dopisz na końcu polecenia, które wyłączą i włączą warstwę.
Kod: qgis.utils.iface.legendInterface().setLayerVisible (layer, False); qgis.utils.iface.legendInterface().setLayerVisible (layer, True)
Sprawdziłem, pomaga. Nie sprawdzałem tylko, czy odświeży też styl i będzie można zrezygnować z
Kod: qgis.utils.iface.mapCanvas().refresh()
(22-09-2011, 08:39)tomalos napisał(a): Aha, dodanie litery 'u' przed nazwą warstwy nie pomogło, nadal są krzaczki zamiast polskich znaków z ogonkami.
W takim razie nazwę warstwy zapisz następująco:
Kod: unicode('%NazwaGm','UTF-8')
|
|
23-09-2011, 12:55,
|
|
tomalos
geoboss
|
Liczba postów: 364
51
Dołączył: 29-09-2009
Reputacja:
3
|
|
RE: Akcje Pythona - dodawanie warstw do grupy
Udało się, wszystko działa, dzięki.
A polecenie
Kod: qgis.utils.iface.legendInterface().setLayerVisible (layer, False); qgis.utils.iface.legendInterface().setLayerVisible (layer, True)
odświeży styl i można już zrezygnować z
Kod: qgis.utils.iface.mapCanvas().refresh()
.
|
|
|