Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Akcje Pythona - dodawanie warstw do grupy
21-09-2011, 19:16,
#11
RE: Akcje Pythona - dodawanie warstw do grupy
Akcie działają aż miło Smile 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,
#12
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,
#13
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,
#14
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,
#15
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.)
#16
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.)
#17
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,
#18
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()
.


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

Skocz do: