Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Zapis stylów - nowa wtyczka
02-01-2012, 16:19,
#1
Zapis stylów - nowa wtyczka
Na swoim repozytorium wtyczek (http://www.rayo.strefa.pl/RayoRepository.xml) zamieściłem wersję eksperymentalną nowej wtyczki MySettings.
Wtyczka służy do zapisywania stylów w bazie PostgreSQL. Dla projektów, z których korzysta wielu użytkowników, każdy z nich może ustawić swoje własne style wyświetlania warstw i zapisać w bazie do późniejszego wykorzystania. Użytkownicy mogą stworzyć i zapisać dowolną ilość nazwanych stylów.
Wtyczka zapamiętuje symbolizację i inne ustawienia warstw oraz zakres wyświetlanej aktualnie mapy. Celowo nie są zapisywane ustawienia formularzy wprowadzania danych, typy edycji pól oraz akcje. Parametry te z reguły ustawione są przez administratora i nie powinny być zmieniane.

Aby używać wtyczki najpierw należy w bazie danych utworzyć dwie tabele wg schematu poniżej.

Kod:
CREATE TABLE qgis_user_project_settings
(
  id serial NOT NULL,
  "user" character varying(50) NOT NULL DEFAULT "current_user"(),
  settings_name character varying(50) NOT NULL,
  settings text NOT NULL,
  CONSTRAINT qgis_user_project_settings_pk PRIMARY KEY ("user", settings_name)
)
WITH (
  OIDS=FALSE
);

Kod:
CREATE TABLE qgis_user_layer_settings
(
  id serial NOT NULL,
  "user" character varying(50) NOT NULL DEFAULT "current_user"(),
  settings_name character varying(50) NOT NULL,
  layer character varying(50) NOT NULL,
  settings text NOT NULL,
  CONSTRAINT "qgis_user_layer_settings-PK" PRIMARY KEY ("user", settings_name, layer)
)
WITH (
  OIDS=FALSE
);

Użytkownikom należy nadać uprawnienia SELECT, UPDATE, INSERT, DELETE do powyższych tabel.
Następnie z repozytoriom zainstalować wtyczkę. W katalogu zainstalowanej wtyczki znajduje się plik settings.txt, w którym należy ustawić parametry dostępu do bazy danych. Pozostawienie pustych pól 'user' i 'password' spowoduje, że program będzie wyświetlał okno dialogowe z pytaniem o te dane (lub skorzysta z połączenia wcześniej otwartego przy wczytywaniu projektu).

Po zainstalowaniu wtyczki i otwarciu projektu można zmienić style wyświetlania warstw, a następnie zapisać je za pomocą wtyczki nadając im nazwę. Można zapisać style wszystkich warstw projektu lub tylko wybrane. To samo dotyczy ich późniejszego wczytywania.

Wtyczka może być też pomocna przy zapisywaniu stylów w celu przygotowania wydruków. Menadżer wydruków nie zapamiętuje ewentualnych zmian stylu dla wydruku więc można je zapisać za pomocą MySettings.

Wszelkie uwagi mile widziane.
03-01-2012, 09:14,
#2
RE: Zapis stylów - nowa wtyczka
Brzmi obiecująco, nawet miałem pytać o możliwość zapisywania stylów w bazie danych a tu taki prezencik Smile Wkrótce sprawdzę jak to działa.
03-01-2012, 21:52,
#3
RE: Zapis stylów - nowa wtyczka
Funkcjonalność jest bardzo przydatna, gdy udostępniasz centralnie projekt wielu użytkownikom. A jak wiadomo, każdy ma swój ulubiony kolor, symbolik itp Smile

Jeśli ktoś potrzebuje, to mogę też udostępnić starszą wersję wtyczki, która zapisuje ustawienia (style) do plików w katalogu domowym użytkownika. Może ona jednak zapisać tylko jeden styl.
04-01-2012, 01:03,
#4
RE: Zapis stylów - nowa wtyczka
1. Ikonka prześliczna Wink

2. mysettings.py:75: os.environ["USERPROFILE"] działa tylko pod Windą. Gdzie indziej zamiast tego jest klucz "HOME".

3. Fajnie by było, gdyby te dwie tabele były tworzone automatycznie pod jakimś klawiszem

4. Niestety po wciśnięciu klawisza sypią się błędy:
- dwa razy SQLowy z powodu próby odwołania się do tabeli bez nazwy:
SQL: select * from "public". limit 1
- i trzeci pythonowy:
File "/home/borys/.qgis/python/plugins/MySettings/mysettings.py", line 506, in get_current_user
provider.select([1],QgsRectangle(),False)
AttributeError: 'NoneType' object has no attribute 'select'

Chyba widzę przyczynę tych błędów. Jeśli wyprintuję uri warstwy, która jest tworzona w funkcji get_current_user, to mam nadliczbowy cudzysłów przy nazwie tabeli (oczywiście nie ma go w pliku settings.txt):

dbname=blabla host=localhost port=5432 user="blabla" password="bleble" sslmode=disable key=id table="public".""qgis_user_project_settings" sql="user"="current_user"()

Zastanawia mnie też nawias po current_user.
04-01-2012, 08:50,
#5
RE: Zapis stylów - nowa wtyczka
To się nazywa tester Smile
Poprawiona wersja jest już w repozytorium, odpowiedzi poniżej.


(04-01-2012, 01:03)borys napisał(a): 1. Ikonka prześliczna Wink

Tongue

(04-01-2012, 01:03)borys napisał(a): 2. mysettings.py:75: os.environ["USERPROFILE"] działa tylko pod Windą. Gdzie indziej zamiast tego jest klucz "HOME".

Przyznam się, że testowałem tylko po Windowsem.
Zamieniłem na "HOME".

(04-01-2012, 01:03)borys napisał(a): 3. Fajnie by było, gdyby te dwie tabele były tworzone automatycznie pod jakimś klawiszem

Nie jestem do końca przekonany. Z założenia to administrator administruje bazą i to on powinien sobie założyć tabele. Użytkownicy nawet nie mają praw do tego, więc i przycisk im niepotrzebny. Szczególnie, że tabele są zakładane tylko raz, po podjęciu decyzji o użytkowaniu wtyczki. Wszyscy użytkownicy zapisują dane do tych samych tabel.
Tak jak pisałem wcześniej wtyczka powstała głównie po to, aby dla jednego centralnego projektu każdy z użytkowników mógł zapamiętywać swoje style wyświetlania. Jeśli jednak będą pomysły wykorzystywania jej do innych celów i zakładanie tabel z wtyczki będzie potrzebne to w przyszłości mogę to dorobić. Konieczne też będzie wtedy rozbudowanie wtyczki o możliwość zapamiętywania ustawień dla kilku projektów.

(04-01-2012, 01:03)borys napisał(a): 4. Niestety po wciśnięciu klawisza sypią się błędy:
- dwa razy SQLowy z powodu próby odwołania się do tabeli bez nazwy:
SQL: select * from "public". limit 1
- i trzeci pythonowy:
File "/home/borys/.qgis/python/plugins/MySettings/mysettings.py", line 506, in get_current_user
provider.select([1],QgsRectangle(),False)
AttributeError: 'NoneType' object has no attribute 'select'

Chyba widzę przyczynę tych błędów. Jeśli wyprintuję uri warstwy, która jest tworzona w funkcji get_current_user, to mam nadliczbowy cudzysłów przy nazwie tabeli (oczywiście nie ma go w pliku settings.txt):

dbname=blabla host=localhost port=5432 user="blabla" password="bleble" sslmode=disable key=id table="public".""qgis_user_project_settings" sql="user"="current_user"()

Zastanawia mnie też nawias po current_user.

Prawdopodobnie dopisałeś coś na końcu wiersza w pliku settings.txt (po nazwie tabeli). Spację, enter lub coś podobnego.
W tej chwili odczytywanie danych z tego pliku jest maksymalnie uproszczone i nie ma żadnego sprawdzania poprawności. Tekst musi być jednowierszowy i kończyć się nazwą tabeli. W następnych wersjach postaram się to rozbudować.
Zauważyłem też teraz, że z powyższego powodu wtyczka zadziała prawidłowo tylko, jeśli tabele założone są w schemacie 'public'.
Nawias jest OK, bo to jest funkcja w bazie danych. Mnie zastanawiają cudzysłowy w tym miejscu, ale baza bez nich nie chce tego przyjąć jako funkcji Smile
04-01-2012, 16:36, (Ten post był ostatnio modyfikowany: 04-01-2012, 16:37 {2} przez borys.)
#6
RE: Zapis stylów - nowa wtyczka
Rayo napisał(a):Nie jestem do końca przekonany. Z założenia to administrator administruje bazą i to on powinien sobie założyć tabele. Użytkownicy nawet nie mają praw do tego, więc i przycisk im niepotrzebny. Szczególnie, że tabele są zakładane tylko raz, po podjęciu decyzji o użytkowaniu wtyczki. Wszyscy użytkownicy zapisują dane do tych samych tabel.
Tak jak pisałem wcześniej wtyczka powstała głównie po to, aby dla jednego centralnego projektu każdy z użytkowników mógł zapamiętywać swoje style wyświetlania. Jeśli jednak będą pomysły wykorzystywania jej do innych celów i zakładanie tabel z wtyczki będzie potrzebne to w przyszłości mogę to dorobić. Konieczne też będzie wtedy rozbudowanie wtyczki o możliwość zapamiętywania ustawień dla kilku projektów.

Rozumiem. Może zatem wrzucić to w plik README?

Rayo napisał(a):Prawdopodobnie dopisałeś coś na końcu wiersza w pliku settings.txt (po nazwie tabeli). Spację, enter lub coś podobnego.
W tej chwili odczytywanie danych z tego pliku jest maksymalnie uproszczone i nie ma żadnego sprawdzania poprawności. Tekst musi być jednowierszowy i kończyć się nazwą tabeli.

Już mam, Linuch wstawia tam znak końca wiersza. Zamieniłem nieco linie 78 i 79 i śmiga:
self.uri = self.uri.strip() + ' sql='
self.uri2 = self.uri.replace('qgis_user_layer_settings', 'qgis_user_project_settings')

Rayo napisał(a):W następnych wersjach postaram się to rozbudować.

Ja w takich wypadkach daję rozwijalną listę globalnych qgisowych połączeń (tych z QSettings: sekcja PostgreSQL->connections) i zapis wybranej pozycji w QSettings. Oszczędza to Ci sporo roboty, a i dla użytkownika łatwiejsze, bo i tak to połączenie musi mieć zdefiniowane, jeśli w tej bazie trzyma warstwy.

Rayo napisał(a):Nawias jest OK, bo to jest funkcja w bazie danych. Mnie zastanawiają cudzysłowy w tym miejscu, ale baza bez nich nie chce tego przyjąć jako funkcji Smile

Bo funkcje "userowe" wyjątkowo pisze się bez nawiasów:
http://www.postgresql.org/docs/8.3/stati...-info.html
Nie wiedziałem, że pisownia z nawiasami + cudzysłowami też działa Smile
04-01-2012, 21:35,
#7
RE: Zapis stylów - nowa wtyczka
(04-01-2012, 16:36)borys napisał(a): Rozumiem. Może zatem wrzucić to w plik README?

Tak, będzie plik README.


(04-01-2012, 16:36)borys napisał(a): Już mam, Linuch wstawia tam znak końca wiersza. Zamieniłem nieco linie 78 i 79 i śmiga:

Zamieniłem plik txt na xmla. Myślę, że teraz będzie jednakowo czytany i pod Linuksem i pod Windowsem. Dodatkowo w przyszłości będzie można w nim zapisać inne ustawienia.


(04-01-2012, 16:36)borys napisał(a): Ja w takich wypadkach daję rozwijalną listę globalnych qgisowych połączeń (tych z QSettings: sekcja PostgreSQL->connections) i zapis wybranej pozycji w QSettings. Oszczędza to Ci sporo roboty, a i dla użytkownika łatwiejsze, bo i tak to połączenie musi mieć zdefiniowane, jeśli w tej bazie trzyma warstwy.

Użytkownik nie musi mieć zdefiniowanych połączeń u siebie. Są one zdefiniowane i zapisane w projekcie. Jedyne co musi znać do nazwę użytkownika i hasło o które program pyta przy otwieraniu projektu Smile
Cały czas mam na myśli sytuację, gdy w firmie jest centralnie stworzony i udostępniany projekt, a 98% użytkowników potrafi (i potrzebuje) wykonywać tylko najprostsze czynności w GISie. Dlatego na firmowym repozytorium wolę umieścić wtyczkę z już zdefiniowanym połączeniem i bez dodatkowych opcji.

Jeśli jednak będzie potrzeba przerobienia wtyczki dla innych założeń to Twoja rada będzie jak znalazł Smile
04-01-2012, 21:48,
#8
RE: Zapis stylów - nowa wtyczka
Aaa, tera rozumiem, czemu ustawienia są w katalogu wtyczki Smile
09-01-2012, 12:27,
#9
RE: Zapis stylów - nowa wtyczka
W repozytorium umieściłem kolejną wersję wtyczki MySettings.
W obecnej wersji inaczej rozwiązałem sposób zapisu ustawień. Ustawienia są teraz zapisywane bezpośrednio w projekcie. Myślę, że jest to bardziej uniwersalne rozwiązanie. Dodatkowo nie wpływa ujemnie na administrację centralnymi projektami. Jeżeli ktoś nie ma uprawnień do zapisu centralnie udostępnionego projektu to nie nadpisze nam ustawień.
Wprowadziłem też możliwość wyboru ustawień z tych, które są przechowywane w QGISie, o co wnioskował Borys.
Następna wersja będzie umożliwiała przechowywanie styli dla więcej niż jednego projektu.

UWAGA: Wtyczka nadal jest w wersji eksperymentalnej.
11-01-2012, 00:26,
#10
RE: Zapis stylów - nowa wtyczka
Nowa wersja wtyczki została udostępniona (0.8.0)
Wtyczka potrafi zapisywać style wielu projektów dla wielu użytkowników. Projekty rozpoznawane są po nazwie, warstwy w projektach również. W związku z tym nazwy projektów muszą być unikalne, jak również nazwy warstw w ramach jednego projektu nie mogą się powtarzać.
W zasadzie jest to już cała planowana funkcjonalność. Teraz trochę testów i poprawienie ewentualnych błędów. U mnie w każdym razie działa.

Ta wersja potrzebuje nowych tabel w bazie. Definicje poniżej.

Kod:
CREATE TABLE qgis_projects
(
  id serial NOT NULL,
  project_name character varying(50) NOT NULL,
  project_id character varying(50) NOT NULL,
  CONSTRAINT "qgis_projects-PK" PRIMARY KEY (id),
  CONSTRAINT "qgis_projects-name-UNIK" UNIQUE (project_name)
)
WITH (
  OIDS=FALSE
);


Kod:
CREATE TABLE qgis_user_project_settings
(
  id serial NOT NULL,
  id_proj integer NOT NULL,
  user_name character varying(50) NOT NULL DEFAULT "current_user"(),
  settings_name character varying(50) NOT NULL,
  settings text NOT NULL,
  CONSTRAINT "qgis_user_project_settings-PK" PRIMARY KEY (id),
  CONSTRAINT "qgis_u_proj_sett-id_proj-FK" FOREIGN KEY (id_proj)
      REFERENCES qgis_projects (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT "qgis_user_project_settings-UNIK" UNIQUE (id_proj, user_name, settings_name)
)
WITH (
  OIDS=FALSE
);


Kod:
CREATE TABLE qgis_user_layer_settings
(
  id serial NOT NULL,
  id_style integer NOT NULL,
  layer character varying(50) NOT NULL,
  settings text NOT NULL,
  CONSTRAINT "qgis_user_layer_settings-PK" PRIMARY KEY (id),
  CONSTRAINT "qgis_user_layer_settings-FK" FOREIGN KEY (id_style)
      REFERENCES qgis_user_project_settings (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT "qgis_user_layer_settings-UNIK" UNIQUE (id_style, layer)
)
WITH (
  OIDS=FALSE
);


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Geopaczka zapis wms i przesłanie monikaaab 2 2 249 05-08-2022, 07:33
Ostatni post: monikaaab
  zapis georeferencji w pliku tfw phacot 3 5 404 18-10-2020, 23:24
Ostatni post: xmaziax
  QGIS - zapisywanie stylów do KML damianu90 3 12 687 02-09-2019, 19:44
Ostatni post: robert
  zapis rastra w bazie SQLite/Spatialite pitt 1 6 103 29-05-2018, 12:19
Ostatni post: xmaziax
  nowa warstwa shp mmz 6 15 772 23-03-2018, 14:02
Ostatni post: mmz
  Stylizacja - automatyczny zapis stylów dla wielu warstw Michau 2 12 069 10-10-2016, 20:43
Ostatni post: Italiano
  zapis grafiki ze stylów warstw hav 2 14 228 29-10-2010, 23:52
Ostatni post: hav
  Zapis warstwy txt do pliku shp Rayo 6 32 361 12-01-2010, 20:53
Ostatni post: m_k
  Nowa wersja QGIS Dafniś jest już dostępna robert 0 13 589 08-09-2009, 23:14
Ostatni post: robert

Skocz do: