Akcje Pythona - dodawanie warstw do grupy - Wersja do druku +- Forum QGIS (http://forum.quantum-gis.pl) +-- Dział: Desktop GIS (http://forum.quantum-gis.pl/forum-4.html) +--- Dział: QGIS (http://forum.quantum-gis.pl/forum-5.html) +--- Wątek: Akcje Pythona - dodawanie warstw do grupy (/thread-553.html)
1
2
|
RE: Akcje Pythona - dodawanie warstw do grupy - tomalos - 21-09-2011 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? RE: Akcje Pythona - dodawanie warstw do grupy - Rayo - 21-09-2011 (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ą: 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? RE: Akcje Pythona - dodawanie warstw do grupy - tomalos - 21-09-2011 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. RE: Akcje Pythona - dodawanie warstw do grupy - p0cisk - 21-09-2011 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() 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. RE: Akcje Pythona - dodawanie warstw do grupy - Rayo - 21-09-2011 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. RE: Akcje Pythona - dodawanie warstw do grupy - tomalos - 22-09-2011 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() 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() Aha, dodanie litery 'u' przed nazwą warstwy nie pomogło, nadal są krzaczki zamiast polskich znaków z ogonkami. RE: Akcje Pythona - dodawanie warstw do grupy - Rayo - 22-09-2011 (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 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') RE: Akcje Pythona - dodawanie warstw do grupy - tomalos - 23-09-2011 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) Kod: qgis.utils.iface.mapCanvas().refresh() |