Dodawanie warstw za pomocą akcji - 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: Dodawanie warstw za pomocą akcji (/thread-359.html) |
Dodawanie warstw za pomocą akcji - tomalos - 20-01-2011 Chcę stworzyć akcję, która będzie dodawała do aktywnego projektu QGISa warstwy. Wujek Google podpowiedział, że trzeba zrobić akcję typu Python wyglądającą tak: Kod: qgis.utils.iface.addVectorLayer('/home/tomasz/gis/wektor/warstwa.shp','warstwa','ogr') I super, działa! Tylko, że ja potrzebuję czegoś więcej 1. Warstwa, na której chcę mieć zrobioną akcję to warstwa poligonowa (konkretnie gminy). 2. Dodawana warstwa ma być z bazy PostGIS, a nie szejp jak w przykładzie. 3. Warstwa ma milion obiektów, a ja chcę tylko obiekty z danej gminy. 4. Obiekty mają atrybut mówiący o tym w jakiej gminie się znajdują ("gmina"), każdy obiekt znajduje się tylko w jednej gminie (czyli zapytanie wygląda tak: "gmina" LIKE 'Widawa') Jak to ugryźć? Da się to w ogóle zrobić? RE: Dodawanie warstw za pomocą akcji - borys - 21-01-2011 (20-01-2011, 11:54)tomalos napisał(a): Jak to ugryźć? Da się to w ogóle zrobić? A co ma się nie dać Kod: qgis.utils.iface.addVectorLayer('/home/tomasz/gis/wektor/warstwa.shp|layerid=0|subset="costam" > 3','warstwa','ogr') W przypadku postgresa będzie podobnie, trzeba poszperać w ogrowym formacie podawania źródła danych. Tylko ostrożnie, bo błąd podczas wykonywania zapytanie wywala cały program (zajmę się tym po weekendzie, tylko niech mi ktoś przypomni, pliz). Na przykład w przypadku szejpa dzieje się tak przy próbie pominięcia członu layerid, ale widzę, że niektóre szejpy w ogóle wywalają. Na dziś dzień trzeba niestety cierpliwie poszukać właściwego formatu, podnosząc program co chwila. EDIT: Jednak nie widzę takich, co "w ogóle wywalają" ;-) Zawsze jest to błąd w zapytaniu, np. błędna ścieżka lub nazwa pola. Pusty wynik zapytania też nie jest groźny. RE: Dodawanie warstw za pomocą akcji - tomalos - 21-01-2011 Super! Dzięki Borys, nie omieszkam przypomnieć się po niedzieli odnośnie wywoływania warstwy z bazy Póki co natrafiłem na drobny problemy przy szejpach, pojawia się jeśli dane są tekstem i występują znaki z ogonkami, taka akcja: qgis.utils.iface.addVectorLayer('/home/tomasz/Geoinformacja/wektor/rezeprzy.shp|layerid=0|subset="nzw" LIKE "Białaczów"','rezerwat','ogr') generuje taki błąd: Wystąpił błąd podczas wykonywania kodu Pythona: Traceback (most recent call last): File "/home/tomasz/.qgis/python/plugins/gmap_overview_plugin/gmap_gui.py", line 80, in onChangeExtent html = html.replace('{scale}',str(self.getZoomScale())) File "/home/tomasz/.qgis/python/plugins/gmap_overview_plugin/gmap_gui.py", line 97, in getZoomScale return list(zoom).index(zoom.min()) ValueError: list.index(x): x not in list Wersja Pythona: 2.6.5 (r265:79063, Apr 16 2010, 13:28:26) [GCC 4.4.3] Wersja QGIS: 1.7.0-Trunk Trunk, 15058M Lokalizacja Pythona: ['/home/tomasz/.qgis/python/plugins/GeoCoding', '/home/tomasz/.qgis/python/plugins/GeoCoding', '/home/tomasz/.qgis/python/plugins/elevation', '/home/tomasz/.qgis/python/plugins/cswclient', '/usr/share/qgis/python', '/home/tomasz/.qgis/python', '/home/tomasz/.qgis/python/plugins', '/usr/share/qgis/python/plugins', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/python2.6/dist-packages/gst-0.10', '/usr/lib/pymodules/python2.6', '/usr/lib/python2.6/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.6/gtk-2.0', '/usr/lib/python2.6/dist-packages/wx-2.8-gtk2-unicode', '/usr/local/lib/python2.6/dist-packages', '/usr/share/qgis/python', '/home/tomasz/.qgis/python/plugins/mmqgis/forms', '/usr/share/qgis/python', '~/.qgis/python', '/home/tomasz/.qgis/python/plugins/ziplayers/logic', '/home/tomasz/.qgis/python/plugins/ziplayers/gui', '/home/tomasz/.qgis/python/plugins/imgshowhide/logic', '/home/tomasz/.qgis/python/plugins/imgshowhide/gui', '/usr/share/qgis/python/plugins/fTools/tools', '/home/tomasz/Geoinformacja/projekty'] Jako rozwiązanie tymczasowe zastosowałem zamiast znaków z ogonkami znak '%'. RE: Dodawanie warstw za pomocą akcji - borys - 21-01-2011 Spróbuj dodać prefiks u: subset="nzw" LIKE u"Białaczów" . A złości się wtyczka GMap Overview. RE: Dodawanie warstw za pomocą akcji - tomalos - 21-01-2011 Faktycznie, mogłem się domyślić, że chodzi o tą wtyczkę, zainstalowałem ją z ciekawości i już odinstalowałem. Dodanie 'u' zmieniło tyle, że jak powiększam do zasięgu warstwy to ustawia się prawidłowy zasięg dla całej warstwy shp, bez 'u' ląduję w kosmosie. I zmieniła się ikonka RE: Dodawanie warstw za pomocą akcji - borys - 26-01-2011 Na ikonce jest uadny widoczek ;-) Nie działa, bo bez sensu Ci napisałem, gdzie znacznik unikoda wstawić Trza całe źródło warstwy ująć w u' ... ': Kod: qgis.utils.iface.addVectorLayer(u'/home/tomasz/Geoinformacja/wektor/rezeprzy.shp|layerid=0|subset="nzw" LIKE "Białaczów"','rezerwat','ogr') Dla warstwy Postgresowej wyglądałoby to tak: Kod: qgis.utils.iface.addVectorLayer(u"dbname=nazwabazy host=localhost port=5432 user=eustachy password=muriel key=id table=rezeprzy (the_geom) sql=nzw LIKE 'Białaczów'",'rezerwat','postgres') Tak tak, za parametrem table wstawiamy luzem (ale w nawiasie) nazwę kolumny geometrii. Zwróć uwagę na cudzysłowy. Python akceptuje zarówno pojedyncze, jak i podwójne, byle konsekwentnie zagnieżdżać: "to jest 'jakiś' napis". Postgres natomiast wymaga podawania wartości tekstowych w pojedynczych nawiasach, co wymusza ujęcie całego parametru u"źródło danych" w podwójne. RE: Dodawanie warstw za pomocą akcji - tomalos - 02-02-2011 Uciekłem od cywilizacji na kilka dni, więc nie mogłem wcześniej podziękować. Dzięki za pomoc, dodawanie warstwy z bazy działa bardzo fajnie, co mnie cieszy. Nadal jednak są problemy z polskimi znakami. Warstwa niby się dodaje (pojawia się w na liście z normalną ikonką), jednak wygląda na pustą (brak danych w tabeli, powiększenie do zasięgu wywala w kosmos - w okienku skali pojawia się napis "skala nieprawidłowa"). |