Forum QGIS

Pełna wersja: Przecięcie warstw
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam,

Szukam narzędzia w QGISie które pomoże mi zrobieniu przecięcia między dwoma warstwami. Mam jedną warstwę z której wybieram element i drugą poligonową, z której pobierane są informacje w których poligonach zawiera się wybrany element.

Np, że wybrana linia 1101 przecina obszary A01, B12, A09 albo obszar 184 przecina obszary A13, B04.
Zdaje się, że takiego gotowego narzędzia jeszcze nie ma. Może ktoś chciałby napisać wtyczkę? Prosta robota, w sam raz na początek przygody Smile
A można gdzieś znaleźć jakieś materiały odnośnie pisania wtyczek pod QGISa? W sensie jakieś kursy/poradniki/przykłady. Swego czasu trochę pisałem i może coś by się udało stworzyć.

A tak poza głównym tematem. Czy rysując linię lub poligon mogę dowiązać się do punktów już istniejących?
Można ustawić przyciąganie do wartsw( snapowanie). Ustawienia/Opcje przyciągania Smile
Są dwa poziomy wtajemniczenia: skryptowanie w konsoli Pythona oraz pisanie wtyczek. Na początek można otworzyć konsolę (w menu Wtyczki) i tam poćwiczyć sam język oraz dostęp do warstw, obiektów itp. Mnóstwo nietypowych działań (zwłaszcza na warstwie wektorowej), do których nie ma gotowego narzędzia, można wykonać za pomocą kilku poleceń i pętli w konsoli. Potem można zacząć tworzyć wtyczkę, która jest już znacznie bardziej złożonym tworem niż te kilka luźnych poleceń.

Skrypty i wtyczki piszemy w Pythonie 2.7 (być może 2.6 w niektórych instalacjach - niewielka różnica), rozmaite samouczki do samego języka są do wygooglania.

Samouczki do QGISa są chyba trzy:
- Największy, obejmujący zarówno Konsolę oraz pisanie wtyczek: http://www.qgis.org/pyqgis-cookbook/index.html
- Może lżejszy będzie taki do konsoli: http://www.qgisworkshop.org/html/worksho...rial2.html
- Naszego Piotrka i po ludzku, ale tylko do wtyczek: http://my.opera.com/p0cisk/blog/wlasna-w...poligonowa

Potrzebna będą jeszcze dwie ściągi:
- API QGIS-a (to jest do C++, ale nazwy klas i metod są te same): http://qgis.org/api/1.8/
- API Qt4 (głównie do budowania GUI wtyczek, ale też typy zmiennych QString i QVariant): http://pyqt.sourceforge.net/Docs/PyQt4/classes.html

Jeśli chodzi o oprogramowanie, to do zabawy w konsoli wystarczy sam QGIS :-) , do pisania wtyczek potrzebny będzie jakiś wygodny edytor (pod windowsami np. Notepad++), do budowania interfejsu wtyczek Designer z pakietu deweloperskiego Qt (ale przedmiotowa wtyczka obejdzie się bez niego, bo tu pewnie całym interfejsem będzie klawisz narzędzia oraz zwykłe okienko QMessageBox). No i jakiś program graficzny do narysowania ikonki :-)

Warto też podglądać istniejące wtyczki. Akurat dość rzadko we wtyczkach robi się nowe narzędzie mapowe (takie do klikania w te linie), ale przykład znajdziesz np. we wtyczce ProfileTool. Prawdopodobnie takie narzędzie jest najlepszym wyjściem, chociaż nie mam pewności, może prościej używać zwykłego narzędzia zaznaczania i niech wtyczka reaguje na sygnał selectionChanged(), emitowany przez warstwę... Można też zerknąć do wtyczki CADTools, jak tam jest rozwiązane wykrywanie klikania w elementy (jeśli obsługa tej wtyczki jest nieintuicyjna, to w helpie ma świetne filmiki).

Ważna uwaga: API w wersjach 1.0-1.8 jest wstecznie kompatybilne, natomiast w rozwojowej wersji 1.9.90 (de facto alpha nadchodzącej wersji 2.0) jest nieco zmienione, zwłaszcza jeśli chodzi o wektory. Dlatego powyżej podałem link do API 1.8 (link bez członu "1.8" prowadzi do obecnego rozwojowego API). Jeśli używasz wersji 1.8, to chyba bym się śmiało na niej uczył i nie kombinował z niestabilnym jeszcze API 2.0. Nie będzie to strata czasu, bo zmiany nie będą wielkie, a wszystkie samouczki są jeszcze do starego API.

Tu na forum czasaaaami co nieco o skryptowaniu można przeczytać, np. http://forum.quantum-gis.pl/thread-857.html . W razie kłopotów pytaj śmiało.

EDIT: Aha, jeśli piszesz wtyczkę, to po każdej zmianie w kodzie musisz ją przeładować. W tym celu potrzebujesz wtyczki Plugin Reloader.

EDIT: Chyba wtyczka IdentifyPlus będzie najlepsza na wzór.