Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Dodawanie warstw za pomocą akcji
20-01-2011, 11:54, (Ten post był ostatnio modyfikowany: 20-01-2011, 12:46 {2} przez tomalos.)
#1
Dodawanie warstw za pomocą akcji
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 Big Grin

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ć?
21-01-2011, 02:39, (Ten post był ostatnio modyfikowany: 21-01-2011, 02:46 {2} przez borys.)
#2
RE: Dodawanie warstw za pomocą akcji
(20-01-2011, 11:54)tomalos napisał(a): Jak to ugryźć? Da się to w ogóle zrobić?

A co ma się nie dać Smile

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.
21-01-2011, 09:42,
#3
RE: Dodawanie warstw za pomocą akcji
Super! Dzięki Borys, nie omieszkam przypomnieć się po niedzieli odnośnie wywoływania warstwy z bazy Big Grin
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 '%'.
21-01-2011, 11:32,
#4
RE: Dodawanie warstw za pomocą akcji
Spróbuj dodać prefiks u: subset="nzw" LIKE u"Białaczów" . A złości się wtyczka GMap Overview.
21-01-2011, 18:06,
#5
RE: Dodawanie warstw za pomocą akcji
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 Smile
[Obrazek: zrzut_ekranu-9.png]
26-01-2011, 23:17, (Ten post był ostatnio modyfikowany: 27-01-2011, 00:15 {2} przez borys.)
#6
RE: Dodawanie warstw za pomocą akcji
Na ikonce jest uadny widoczek ;-)

Nie działa, bo bez sensu Ci napisałem, gdzie znacznik unikoda wstawić Wink 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.
02-02-2011, 13:17, (Ten post był ostatnio modyfikowany: 02-02-2011, 13:18 {2} przez tomalos.)
#7
RE: Dodawanie warstw za pomocą akcji
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").


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  SQL w akcji QGIS sebaq 0 6 353 26-06-2014, 10:38
Ostatni post: sebaq
  Podzielenie linii za pomocą punktów stycznych do niej. Kristoforos 1 9 970 16-12-2012, 00:28
Ostatni post: milena
  Akcje Pythona - dodawanie warstw do grupy tomalos 17 77 472 23-09-2011, 12:55
Ostatni post: tomalos
  Dodawanie akcji razem z warstwą tomalos 1 10 068 01-04-2011, 15:19
Ostatni post: tomalos
  Zbiorowa konwersja *.gml do *.shp za pomocą ogr2ogr tomalos 3 23 037 24-12-2010, 02:11
Ostatni post: tomalos
  dodawanie warstw vince123 2 13 566 02-12-2010, 22:45
Ostatni post: vince123

Skocz do: