QGIS


Tworzenie skryptów Pythona w QGIS za pomocą narzędzi geoprocesingu

Wtyczka Processing (do wersji QGIS 1.8 SEXTANTE) zawiera wiele pomocnych narzędzi usprawniających pracę z danymi przestrzennymi w QGIS. Jednym z nich jest mechanizm pozwalający na tworzenie i uruchamianie przez użytkowników skryptów napisanych w języku programowania Python. Dzięki temu aby dodać nową funkcjonalność nie trzeba tworzyć nowej wtyczki, a przy tym martwić się o zbudowanie interfejsu, właściwe wypełnienie metadanych itp. Skrypty traktowane są przez Processing w ten sam sposób jak pozostałe algorytmy. Można je więc uruchomić w oknie dialogowym lub w trybie wsadowym jak również wykorzystać w graficznym modelarzu. Co więcej, w skryptach można wykorzystać już istniejące algorytmy.

Edytor skryptu

Aby stworzyć nowy skrypt należy w oknie Narzędzia geoprocessingu rozwinąć pozycję Scripts ->Tools i podwójnie kliknąć na Create new script. Zostanie wyświetlony edytor skryptu. Posiada on kilka funkcji ułatwiających pisanie kodu źródłowego jak kolorowanie i autouzupełnianie składni, zwijanie/rozwijanie bloków kodu czy numerowanie linii. W górnej części okna dostępne są przyciski umożliwiające m.in. zapis zmian, edycję pomocy czy uruchomienie skryptu.

edytor

Tworzenie skryptu

Definiowanie danych wejściowych

Na początku kodu można określić nazwę grupy, w której będzie wyświetlany skrypt w oknie Narzędzi geoprocessingu:

[code lang=”python”]##Nazwa grupy=group[/code]

Jeśli sami nie określimy grupy to skrypt zostanie przypisany do grupy User scripts.

Następnie należy określić pola do wprowadzania przez użytkownika niezbędnych parametrów. Każdy parametr określa się w jednej linii zaczynającej się znakami ##, następnie należy podać jego nazwę, typ danych oraz, w niektórych przypadkach, opcje:

[code lang=”python”]##nazwa_zmiennej=typ_danych [opcje][/code]

Nazwy zmiennych nie powinny zawierać spacji – zamiast niej należy wpisać podkreślnik – wtyczka automatycznie zamieni go w spację. Nie należy również korzystać ze znaków specjalnych, w tym polskich znaków diakrytycznych. Opcje pozwalają m.in. na ustawienie domyślnych wartości lub typu geometrii warstwy wektorowej, w większości przypadków nie są one jednak wymagane. Należy je oddzielić od typu danych pojedynczą spacją. Aktualnie dostępne są następujące typy danych:

  1. raster – pole wyboru umożliwiające wybór jednej z wczytanych do QGIS warstw rastrowych lub wskazanie pliku na dysku;
  2. vector – jw. z tym że dotyczy warstw wektorowych. Domyślnie dostępne są wszystkie rodzaje warstw, jednak istnieje możliwość określenia rodzaju geometrii poprzez ustawienie odpowiedniej opcji: point, line, polygon. Przykładowo w celu ograniczenia wyboru użytkownika do warstw punktowych należy wpisać:
    [code lang=”python” gutter=”false”]##warstwa_punktowa=vector point[/code]
  3. table – pole wyboru z tabelami, wyświetlane są warstwy wektorowe jak i tabele nieprzestrzenne (pliki CSV, excel);
  4. field – pole wyboru z polami z tabeli atrybutów danej warstwy wektorowej lub tabeli. Warstwę określa się poprzez podanie jej nazwy jako opcji np.:
    [code lang=”python”]##warstwa=vector
    ##pole_tabeli=field warstwa[/code]
  5. multiple raster i multiple vector – umożliwiają jednoczesny wybór więcej niż jednej warstwy;
  6. selection – pole wyboru ze zdefiniowanymi elementami, kolejne pozycje należy rozdzielić średnikiem:
    [code lang=”python” gutter=”false”]##typ_dzialki=selection budowlana;rolnicza;woda powierzchniowa;nieznany[/code]
  7. 
    

    selection

  8. boolean – wybór wartości logicznej prawda/fałsz (tak/nie);
  9. number – wartość liczbowa, jako opcję można podać wartość domyślną np.:
    [code lang=”python” gutter=”false”]##liczba=number 4
    ##liczba_rzeczywista=number 2.5[/code]

    Liczby rzeczywiste należy podawać z kropką;

  10. string – dowolny łańcuch znaków, podobnie jak przy liczbie można określić wartość domyślną;
  11. extent – zakres geograficzny (Xmin, Xmax, Ymin, Ymax);
  12. crs – wybór układu współrzędnych, domyślnym układem jest WGS 84, ale można to zmienić ustawiając opcję parametru np.:
    [code lang=”python” gutter=”false”]##uklad=crs EPSG:2180[/code]
  13. file – wybór dowolnego pliku z dysku;
  14. folder – jw. ale wybór katalogu;

Tak przedstawiają się powyższe kontrolki w oknie skryptu:

cale_okno - Kopia

Określanie danych wyjściowych

Dane wyjściowe określa się w taki samo sposób jak wejściowe. Jako typ danych należy podać output, natomiast jako opcję należy wpisać wybrany rodzaj:

  1. output raster – warstwa rastrowa;
  2. output vector – warstwa wektorowa;
  3. output table – tabela;
  4. output html – format HTML;
  5. output file – plik;
  6. output number – liczba;
  7. output string – łańcuch znaków.

[code lang=”python”]##warstwa_wyjsciowa=output vector
##liczba_iteracji=output number[/code]

Skrypt może mieć określonych wiele danych wyjściowych. Wartości przyjmowane przez zmienne wyjściowe to, w zależności od ich rodzaju, ścieżka dostępu do pliku (1-5), liczba (6) lub łańcuch znaków (7).

Funkcje pomocnicze

Dostęp do parametrów określonych przez użytkownika odbywa się poprzez odwołanie do zmiennej za pomocą zdefiniowanej na początku nazwy (stąd zakaz korzystania w nazwach zmiennych ze spacji i znaków specjalnych). Część danych jak liczby czy łańcuchy znaków są określone wprost tzn. w formie podanej w oknie skryptu. Aby mieć dostęp do pozostałych można skorzystać z dodatkowych funkcji udostępnianych przez wtyczkę Processing które ułatwiają pracę z danymi wejściowymi:

  • getObject(str) – zwraca klasę reprezentującą w QGIS warstwę (QgsVectorLayer lub QgsRasterLayer), jako parametr może przyjmować warstwę wskazaną przez użytkownika;
  • features(layer) – zwraca iterator po obiektach danej warstwy;
    [notice]Jeśliw opcjach Geoprocesingu zaznaczona jest opcja Use only selected features to zostaną zwrócone tylko zaznaczone obiekty. Jeśli nie ma zaznaczenia to iteracja odbędzie się po wszystkich obiektach.[/notice]
  • values(layer, field1, field2, …) – zwraca słownik, w którym kluczem jest nazwa pola z tabeli atrybutów, a wartość to lista wszystkich wartości z tego pola (obsługuje tylko wartości numeryczne!);
  • uniqueValues(layer, field) – zwraca listę unikalnych wartości z pola w tabeli atrybutów.

Poniższy przykład pozwala zapisać do pliku tekstowego unikalne wartości z tabeli atrybutów warstwy wektorowej:

[code lang=”python”]##input=vector
##pole=field input
##plik=output file
wektor = processing.getObject(input)
wartosci = processing.uniqueValues(wektor, pole)
f = open(plik, ‚w’)
try:
for wartosc in wartosci:
f.write(‚%s\n’ % str(wartosc))
finally:
f.close()
[/code]

  1. Zdefiniowanie warstwy wejściowej. Zmienna input przechowuje ścieżkę dostępu do warstwy.
  2. Wybór przez użytkownika pola z tabeli atrybutów wybranej warstwy.
  3. Plik, do którego zostaną zapisane dane.
  4. Pobranie wskaźnika do warstwy wejściowej (klasa QgsVectorLayer).
  5. Pobranie unikalnych wartości z wybranego pola tabeli atrybutów.
  6. Otwarcie pliku do zapisu.
  7. Zabezpieczenie przed błędem w trakcie zapisu.
  8. Iteracja po pobranych wartościach.
  9. Zapis wartości do pliku, dane konwertowane są do łańcucha znaków.
  10. Po zakończeniu…
  11. … zamknięcie pliku.

Drugą grupą funkcji pomocniczych są funkcje pozwalające tworzyć nowe warstwy rastrowe, wektorowe i tabele. Znajdują się one w module processing.core.

  • VectorWriter(warstwa_wyjsciowa,kodowanie_znakow,pola,typ_geometrii,uklad_wspolrzednych)
  • RasterWriter(warstwa_wyjsciowa, minX, minY, maxX, maxY, rozmiar_komorki, liczba_kanalow, uklad_wspolrzednych)
  • TableWriter(tabela_wyjsciowa,kodowanie_znakow,pola)

[code lang=”python”]##input=vector
##output=output vector
from processing.core.VectorWriter import VectorWriter
vectorLayer = processing.getObject(input)
writer = VectorWriter(output, vectorLayer.dataProvider().encoding(), vectorLayer.pendingFields(),vectorLayer.wkbType(), vectorLayer.crs())
features = processing.features(vectorLayer)
for feat in features:
writer.addFeature(feat)
del writer[/code]

  1. Zdefiniowanie warstwy wejściowej.
  2. Definicja warstwy wyjściowej, zmienna output również przechowuje ścieżkę do pliku.
  3. Import klasy VectorWriter do stworzenia nowej warstwy na dysku.
  4. vectorLayer przechowuje instancję klasy QgsVectorLayer.
  5. Stworzenie pliku na dysku, większość parametrów pobrana jest z warstwy wejściowej.
  6. Stworzenie iteratora po obiektach warstwy.
  7. Pętla po obiektach warstwy.
  8. Dodanie obiektu do nowej warstwy.
  9. Zamknięcie pliku nowej warstwy.

Wykorzystanie istniejących algorytmów

Istnieje również możliwość wykorzystania dostępnych algorytmów wtyczki Processing. W tym celu należy wywołać funkcję runalg z odpowiednimi parametrami:

[code lang=”python”]##input_raster=raster
##input_wektor=vector
##warstwa_wyjsciowa=output vector

wektor = processing.getObject(input_wektor)
raster = processing.getObject(input_raster)
processing.runalg(‚qgis:pointsfromlines’, raster, wektor, warstwa_wyjsciowa)[/code]

W powyższym przykładzie zmienne raster i wektor to odpowiednio instancje klas QgsRasterLayer i QgsVectorLayer uzyskane dzięki funkcji getObject.
W jaki sposób można uzyskać informacje o algorytmach? I w tym przypadku z pomocą przychodzi wtyczka Processing. Najprościej jest z nich korzystać za pomocą Konsoli Pythona QGIS.
Funkcja alglist wyświetla wszystkie dostępne algorytmy:

[code lang=”python”]>>> processing.alglist()
Add autoincremental field—————>qgis:addautoincrementalfield
Add field to attributes table———–>qgis:addfieldtoattributestable
Advanced Python field calculator——–>qgis:advancedpythonfieldcalculator
Basic statistics for numeric fields—–>qgis:basicstatisticsfornumericfields
Basic statistics for text fields——–>qgis:basicstatisticsfortextfields
Clip————————————>qgis:clip
…[/code]

Po lewej stronie wyświetlany jest krótki opis algorytmu, a po prawej stronie jego nazwa, którą należy użyć jako pierwszy parametr funkcji runlag. Możliwe jest ograniczenie wyników poprzez podanie tekstu (fragmentu nazwy lub opisu) jako parametru funkcji alglist() np.:

[code lang=”python”]>>> processing.alglist(‚buffer’)
Fixed distance buffer——————->qgis:fixeddistancebuffer
Variable distance buffer—————->qgis:variabledistancebuffer
Grid buffer—————————–>saga:gridbuffer
Grid proximity buffer——————->saga:gridproximitybuffer
…[/code]

Aby uzyskać szczegółowe informacje odnośnie konkretnego algorytmu należy skorzystać z funkcji alghelp np.:

[code lang=”python”]>>> processing.alghelp(‚qgis:fixeddistancebuffer’)
ALGORITHM: Fixed distance buffer
INPUT
DISTANCE
SEGMENTS
DISSOLVE
OUTPUT [/code]

Funkcja ta wyświetla opis algorytmu oraz jego parametry. Jeśli algorytm ma parametry typu <ParameterSelection>, czyli wybór z góry określonych opcji, dodatkowo na końcu znajduje się spis dostępnych wartości.

[code lang=”python”]&gt;&gt;&gt; processing.alghelp(&quot;saga:slopeaspectcurvature&quot;)
ALGORITHM: Slope, aspect, curvature
ELEVATION
METHOD
SLOPE
ASPECT
CURV
HCURV
VCURV

METHOD(Method)
0 – [0] Maximum Slope (Travis et al. 1975)
1 – [1] Maximum Triangle Slope (Tarboton 1997)
2 – [2] Least Squares Fitted Plane (Horn 1981, Costa-Cabral &amp; Burgess 1996)
3 – [3] Fit 2.Degree Polynom (Bauer, Rohdenburg, Bork 1985)
4 – [4] Fit 2.Degree Polynom (Heerdegen &amp; Beran 1982)
5 – [5] Fit 2.Degree Polynom (Zevenbergen &amp; Thorne 1987)
6 – [6] Fit 3.Degree Polynom (Haralick 1983)[/code]

Opcje te można wylistować również funkcją algoptions(nazwa_algorytmu). Aby je ustawić należy podać numer danej opcji według kolejności:

[code lang=”python” gutter=”false”]processing.runlag(&quot;saga:slopeaspectcurvature&quot;, raster, 1, nachylenie, …)[/code]

W powyższym przykładzie zostanie użyta metoda Maximum Triangle Slope.

Informacje o postępie algorytmu

W trakcie działania skryptu może zdarzyć się, że chcemy wyświetlić dodatkowe informacje o aktualnym postępie pracy. Jest to szczególnie przydatne przy czasochłonnych operacjach. Z pomocą przychodzi moduł progress, który udostępnia metody pozwalające ustawić procentowe zaawansowanie obliczeń lub opis aktualnych działań:

  • progress.setPercentage(i) – pozwala ustawić wartość paska postępu w dolnej części okna, parametr i powinien mieć wartość od 0 do 100;
  • progress.setInfo(tekst, error=False) – wyświetla podany komunikat w oknie Log. Jeśli drugi argument zostanie ustawiony na True to wyświetlony tekst będzie miał kolor czerwony (przydatne przy informowaniu o błędach);
  • progress.setText(tekst) – jw. ale dodatkowo tekst pojawia się nad paskiem postępu;
  • progress.setCommand(tekst) – wyświetla komunikat w oknie Log w formacie tekstu o stałej szerokości znaków;
  • progress.setDebugInfo(tekst) – wyświetla komunikat w oknie Log w kolorze niebieskim;
  • progress.setConsoleInfo(tekst) – jw. ale w kolorze jasnoszarym.

[notice]Funkcje setCommand, setDebugInfo i setConsoleInfo wyświetlą informacje w oknie tylko jeśli w opcjach Geoprocesingu zaznaczona jest opcja Show extra info in Log panel. Są one pomocne głównie przy tworzeniu skryptu, w ostatecznej wersji należy używać setInfo lub setText.[/notice]

Przykładowe użycie powyższych funkcji:

[code lang=”python”]from time import sleep
progress.setInfo(‚setInfo(tekst)’)
progress.setInfo(‚setInfo(tekst, True)’, True)
progress.setCommand(‚setCommand(tekst)’)
progress.setDebugInfo(‚setDebugInfo(tekst)’)
progress.setConsoleInfo(‚setConsoleInfo(tekst)’)
for i in range(10):
progress.setPercentage(i*10)
progress.setText(‚setPercentage: %d’ % (i*10))
sleep(0.5)[/code]

log_window

Przerywanie działania skryptu

Jeżeli po uruchomieniu algorytmu wystąpi krytyczny błąd uniemożliwiający dalsze działanie należy go przerwać. W tym celu można wykorzystać klasę GeoAlgorithmExecutionException, która pozwala przerwać działanie skryptu oraz wyświetlić odpowiedni komunikat:

[code lang=”python”]##dzielnik=number 0
from processing.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
if dzielnik == 0:
raise GeoAlgorithmExecutionException(u’Dzielenie przez zero!’)

[/code]

error_log

Edytor pomocy

help_editor

Edytor pomocy pozwala przygotować opis algorytmu i jego parametrów. Można go wywołać przyciskiem edithelp. W górnej części wyświetlony jest podgląd pomocy. Poniżej, z lewej strony znajduje się lista elementów do edycji. Dostępne pozycje:

  • Algorithm description – ogólny opis skryptu;
  • Input parameters – opis poszczególnych parametrów;
  • Output – opis danych wyjściowych;
  • Algorithm created by – autor skryptu;
  • Algorithm help written by – autor pomocy.

Po wybraniu pozycji w prawej części okna można wpisać treść pomocy dla danego elementu. Pliki pomocy mają taką samą nazwę jak skrypt, ale mają rozszerzenie .help.


Stworzone skrypty widoczne są w oknie Narzędzia geoprocessingu pod pozycją Scripts . Po zapisaniu można je używać jak pozostałe algorytmy lub wykorzystać w graficznym modelarzu lub innym skrypcie.

narzedzia_geoprocessingu_skrypty

Domyślnie przechowywane one są w katalogu konfiguracyjnym QGIS /.qgis2/processing/scripts/. Ścieżkę tą można zmienić w opcjach geoprocesingu. Można je kopiować i przenosić na inne komputery jak zwykłe pliki.

skrypty_pliki

Tagi: ,
QGIS 2.0 wydany!

splash_qgis2.0

Po wielu miesiącach wytężonej pracy wydana została nowa wersja QGIS oznaczona numerem 2.0 i nazwą Dufour. Przynosi ona wiele zmian dla użytkowników, zarówno w istniejących dotychczas funkcjonalnościach jak i nowych narzędziach ułatwiających pracę z danymi przestrzennymi. Należy zaznaczyć że aplikacja zmieniła swoja nazwę, od wersji 2.0 Quantum GIS został przemianowany na QGIS.

Najważniejsza zmiana nie jest widoczna dla użytkownika od razu po uruchomieniu aplikacji. Jej efektem jest to, że wtyczki z wcześniejszych wersji oprogramowania nie działają w nowej wersji. Jest to związane ze znacznymi zmianami w API, które jest teraz bardziej przejrzyste i logiczne dla programistów. Na szczęście większość wtyczek została już przepisana i jest dostępna przez (również zaprojektowany od nowa) menedżer wtyczek, a liczba kompatybilnych rozszerzeń sukcesywnie rośnie.

Interfejs użytkownika został odświeżony. Zmieniono wygląd większości ikon, zakładki w oknach dialogowych zostały zastąpione przez listę wyświetlaną z lewej strony danego okna, udoskonalono konsolę Pythona i narzędzie do etykietowania obiektów. Zarządzanie stylami warstw wektorowych odbywa się teraz z pomocą rozwijanej listy, a nie kolejnych okien dialogowych. Również obsługa warstw rastrowych została gruntownie przebudowana. Wtyczkę SEXTANTE zintegrowano z QGIS i przemianowano na Processing (przetłumaczone w polskiej wersji na Narzędzia). Narzędzia geoprocessingu można teraz wywołać z poziomu konsoli, która jest wywoływana poprzez kombinację klawiszy Ctrl+Alt+M.

Wśród nowych funkcjonalności chyba najefektowniejszą jest dodanie możliwości przenikania się warstw (tzw. blend mode), przykłady wykorzystania można znaleźć pod tymi adresami:

Nowa wtyczka Kontrola topologii pozwala na sprawdzanie wzajemnych zależności pomiędzy obiektami lub warstwami co pozwala na odnalezienie i ewentualne usunięcie błędów geometrycznych. Dodano natywne sterowniki pozwalające na bezpośrednią obsługę baz danych Oracle i usługi Web Coverage Service.

Zmiany nie ominęły również kompozytora wydruków. Dzięki integracji wtyczki Atlas można generować serie wydruków w oparciu o wybraną warstwę, dodano prowadnice i przyciąganie do obiektów ułatwiające odpowiednie rozmieszczenie kompozycji czy wsparcie dla wielokolumnowych legend. Kompozytor pozwala od teraz tworzyć również wielostronicowe dokumenty.

Razem z wydaniem nowej wersji QGIS odświeżona została strona główna projektu http://qgis.org/.

Powyżej przedstawiono jedynie część zmian jakie wprowadzono w QGSI 2.0. W serwisie Flickr dostępne są galerie zrzutów ekranowych przedstawiające QGIS 2.0 w akcji (QGIS i przykładowe mapy – linki z oficjalnego polskiego bloga projektu).

Najnowszą wersję można ściągnąć z tej strony. Dostępna jest wersja 32 i 64 bitowa. Dla systemów Windows jest ona również dostępna przez instalator OSGeo4W.

Tagi:
9. zjazd twórców Quantum GIS w Valmiera na Łotwie

W dniach 11-14 kwietnia odbył się zjazd twórców programu Quantum GIS. Spotkanie zorganizowane zostało w miejscowości Valmiera na Łotwie.

Wielkimi krokami zbliża się termin wydania Quantum GIS w wersji 2.0, który wyznaczony został na 7 czerwca 2013 r. Kolejna wersja wprowadza wiele zmian, nie tylko związanych z dodaniem nowych funkcjonalności, ale również modyfikację wewnętrznej struktury programu (m.in. API związanym z obsługą warstw wektorowych). Od początku kwietnia do głównej gałęzi rozwojowej programu nie są dodawane nowe funkcje (nie licząc kilku kilku wybranych elementów nad którymi jeszcze trwają prace), programiści skupiają się na dopracowaniu nowych rozwiązań i usunięciu zidentyfikowanych błędów. Zagadnienia poruszone na spotkaniu dotyczyły m.in.:

  • poprawy wyglądu i funkcjonalności Instalatora Wtyczek,
  • wyglądu i stabilności modułu SEXTANTE,
  • zwiększenia wydajności tabeli atrybutów przy dużych zbiorach danych,
  • symbolizacji warstw,
  • przechowywania stylów w bazie danych,
  • usunięcia błędów, poprawy stabilności działania QGIS, rozwiązania problemów z kodowaniem znaków.

Ponadto omówiono zmiany na stronie głównej Quantum GIS, uaktualnienie dokumentacji oraz nowe sposoby dofinansowania projektu i kierunki dalszego jego rozwoju.

Kolejne spotkanie planowane jest we wrześniu 2013 r. w Brighton, w południowej części Wielkiej Brytanii.

Zdjęcia ze spotkanie #1 i #2.

Na różnych blogach już pojawiają się informacje o nowych funkcjonalnościach:

Tagi:
Usprawnianie pracy z Konsolą Pythona w Quantum GIS

Dzięki Konsoli Pythona, wbudowanej w Quantum GIS, użytkownik może korzystać z udostępnionego przez tą aplikację API do przeglądania i manipulowania danymi przestrzennymi. Podczas uruchamiania programu automatycznie wczytywane są moduły qgis.core i qgis.utils, dzięki czemu od razu po otworzeniu Konsoli można korzystać z dostępnych w nich klas i funkcji.

Jeśli często korzystamy z konsoli, możemy usprawnić swoją pracę poprzez dostosowanie modułów wczytywanych podczas startu Quantum GIS. Aby tego dokonać należy zmodyfikować plik console.py znajdujący się w katalogu qgis_path\python\qgis, gdzie qgis_path to katalog, w którym został zainstalowany QGIS (np. C:\OSGeo4W\apps\qgis).

[notice]Jeśli używamy wersji rozwojowej master należy zmodyfikować plik console_sci.py znajdujący się w katalogu qgis_path\python\console. Należy pamiętać, że w przypadku aktualizacji oprogramowania, np. instalatorem OSGeo4W, plik ten zostanie nadpisany, a wprowadzone zmiany utracone![/notice]

W powyższym pliku należy znaleźć linię:

[code lang=”python” firstline=”33″]_init_commands = ["from qgis.core import *", "import qgis.utils"][/code]

Zmienna _init_commands to lista zawierająca polecenia, które zostaną wykonane podczas pierwszego uruchamiania Konsoli Pythona podczas danej sesji. Jak widać najpierw wczytywane są wszystkie klasy z moduły qgis.core, a następnie moduł qgis.utils. Dodając nowe pozycje do listy można w prosty sposób dostosować zestaw modułów ładowanych przy starcie QGIS, np. zmieniając linię kodu na:

[code lang=”python” firstline=”33″]_init_commands = ["from qgis.core import *", "import qgis.utils",
"from qgis.utils import iface"][/code]

dostęp do aktualnej instancji klasy QgisInterface będzie znacznie prostszy – wystarczy wpisać iface.activeLayer() aby uzyskać dostęp do aktualnie zaznaczonej warstwy na liście (normalnie należy wpisać qgis.utils.iface.activeLayer()). W ten sposób można załadować dowolne dostępne moduły Pythona jak np. PyQt4 czy math.

_PConsole

Dostęp do instancji klasy QgisInterface przed…

mod_PConsole

…i po wprowadzeniu modyfikacji.

Tagi: ,
Wykorzystanie języka programowania Python w Quantum GIS

Python jest obiektowym językiem programowanie, który dzięki swojej prostocie i efektywności zyskuje coraz więcej zwolenników. Potwierdzeniem tego faktu jest przyznanie po raz kolejny nagrody dla najlepszego języka programowania i najlepszego języka skryptowego w 2012 r. w plebiscycie Readers’ Choice Awards magazynu Linux Journal. Główne cechy tego języka to:

  • prosta i czytelna składnia (m.in. dzięki wymuszeniu stosowania wcięć),
  • pełna i intuicyjna obiektowość,
  • język wysokiego poziomu (składnia jest łatwo zrozumiała dla człowieka),
  • działa na wielu rodzajach systemów – kod źródłowy, jeśli nie zawiera funkcji specyficznych dla danego systemu, działa w środowiskach Windows, Linux czy MacOS,
  • dynamiczny system typów,
  • duża liczba standardowych bibliotek,
  • możliwość instalowania dodatkowych modułów lub tworzenie własnych rozszerzeń.

Czytaj całość

Tagi: ,
Oceń swoje ulubione wtyczki QGIS

Od kilku dni pod adresem http://plugins.qgis.org/plugins/ dostępna jest nowa funkcja, dzięki której każdy użytkownik może oceniać wtyczki do QGIS. Aby oddać głos nie trzeba być zalogowanym w serwisie. Wystarczy wejść na powyższą stronę, wybrać plugin i zaznaczyć odpowiednią liczbę gwiazdek. Maksymalnie można przyznać 5 gwiazdek.

Ocena wtyczki brana jest pod uwagę przy tworzeniu rankingu wtyczek dostępnym pod tym adresem. W rankingu brane są pod uwagę również liczba oddanych głosów i liczba ściągnięć wtyczki. Autorem nowej funkcjonalności jest Alessandro Pasotti.

Tagi:
Quantum GIS 1.8 wydany!

Kilka dni temu światło dzienne ujrzała nowa wersja programu Quantum GIS 1.8 Lisboa.
Wydanie to przynosi wiele nowych narzędzi oraz usprawnienia dotychczasowej funkcjonalności. Poprawionych zostało również wiele błędów.

Nową wersję można ściągnąć z oficjalnej strony programu qgis.org.

Główne nowe funkcje:

  • QGIS Browser – przeglądarka plików dostępna jako samodzielna aplikacja oraz panel w oknie QGIS. Pozwala na bezpośrednie wczytywanie warstw poprzez przeciąganie plików do okna głównego QGIS. Można również dodawać zdefiniowane warstwy z baz danych (m.in. PostGIS, SpatiaLite) lub połączenia z serwerami WMS i WFS.
  • DB Manager został oficjalnie dołączony do Quantum GIS. Wtyczka pozwala mi.in zarządzać danymi przestrzennymi w bazach danych (tworzyć, edytować i kasować tabele przestrzenne), tworzyć zapytania SQL czy dodawać warstwy do QGIS.
  • Action Tool – nowe narzędzie ułatwiające uruchamianie Akcji zdefiniowanych we właściwościach warstwy.
  • MSSQL Spatial – natywny sterownik do połączenia z bazą danych Microsoft SQL Server.
  • Nowe typy symbolizacji dla poligonów: wypełnienie linowe i punktowe.
  • Nowy typ symbolizacji dla punktów: elipsa, trójkąt, prostokąt i krzyż.
  • Możliwość tworzenia wielolinijkowych opisów w legendzie mapy w kompozytorze wydruków.
  • Etykietowanie warstw z pomocą złożonych wyrażeń.
  • Plugin Mapa termiczna (Heatmap) – nowy plugin do tworzenia rastrowych map termicznych z warstwy punktowej.
  • GPS Tracking – zmieniony interfejs narzędzia do śledzenia pozycji z odbiornika GPS, poprawienie błędów i wprowadzenie usprawnień.
  • Reorganizacja menu pluginów – wtyczki zostały pogrupowane w kilka kategorii, m.in. wektor, raster, bazy danych. Każda kategoria ma swoje własne menu i pasek narzędzi, który można ukryć.
  • Pole wyboru z predefiniowanymi skalami mapy.
  • Narzędzie pozwalające centrować widok mapy do zaznaczonych obiektów.
  • Nowe narzędzia dostępne we wtyczce fTools: Zagęść geometrię, Twórz indeks przestrzenny.
  • Nowy sposób symbolizacji warstw oparty na regułach.
  • Zmienione okno wyboru układu współrzędnych.
  • Zmienione okno zarządzania zakładkami.
  • Nowe repozytorium wtyczek ustawione jako domyślne.
  • Wsparcie dla typu danych PostGIS TopoGeometry reprezentującego geometrie zdefiniowane przez topologiczne elementy.
  • Zapisywanie wierszy tabeli atrybutów w pamięci podręcznej w celu przyspieszenia funkcjonalności.
  • Kolejność rysowania warstw w oknie mapy może być ustawiona niezależnie od ich kolejności w liście warstw.
  • Możliwość korzystania z wyrażeń w kalkulatorze pól.
  • Grupowanie wybranych warstw.
  • Odczytywanie i zapisywanie stylów warstw z i do plików SLD (Styled Layer Descriptor).
  • Wsparcie protokołu WFS w QGIS Server.
  • Możliwość bezpośredniego wczytania warstw spakowanych do formatu zip lub gzip.
  • Możliwość kopiowania i wklejania stylów pomiędzy warstwami.
  • Możliwość określenia wielkości kafli dla warstw WMS
  • Możliwość osadzania warstw z innych projektów (wraz z symbolizacją) w aktywnym projekcie.
  • i wiele innych …

Źródło: qgis.org

Tagi:
Personalizacja wtyczki OpenLayers

Wtyczka OpenLayers do QGIS pozwala dodawać podkłady mapowe z kilku popularnych serwisów m.in. Google Maps i OpenStreetMap. Jej opis można znaleźć w dziale QGIS wtyczki. Domyślnie użytkownik ma dostęp do 11 rodzajów map. W prosty sposób można jednak zmienić standardowe ustawienia usuwając nieużywane oraz dodając nowe podkłady.

Wtyczka OpenLayers opiera się na wykorzystaniu prerenderowanych kafelków pobieranych z serwerów. Za pomocą biblioteki OpenLayers i udostępnianych przez twórców serwisów mapowych API umożliwia pobieranie odpowiednich kafli znajdujących się w zasięgu widoku i wyświetlanie ich w oknie QGIS. Zazwyczaj twórcy udostępniają kilkanaście/kilkadziesiąt poziomów skalowych przedstawiających różny stopień szczegółowości. Minusem tego rozwiązania jest to, że mapy najlepiej są wyświetlane w konkretnych skalach poza którymi podkłady mogą być przesunięte względem innych warstw. Mapy wyświetlane w ten sposób określa się jako slippy maps, wykorzystywane są m.in. na stronie OpenStreetMap. Więcej o tematyce kafelkowania można znaleźć we wpisie TileCache – przyspieszenie dla WMS. Czytaj całość

Tagi: , ,
Instalacja i konfiguracja QGIS Server

Wprowadzenie

Najczęściej, rozważając wybór serwera WMS dostępnego na wolnej licencji, ma się na myśli jeden z dwóch projektów: UMN MapServer albo GeoServer. Obydwa mają już za sobą długą historię, liczną społeczność oraz wielu użytkowników. Mają jednak również swoje wady, w tym jedną największą: wszelkich ustawień wizualizacji danych dokonuje się tekstowo. Szczególnie dokuczliwy w tym zakresie jest GeoServer, wykorzystujący język SLD z jego nadmiernie rozbudowaną składnią. W przypadku chęci stworzenia bardziej rozbudowanej symbolizacji, staje się to poważnym problemem.

Na szczęście pojawiła się interesująca alternatywa dla tych programów – QGIS Server. Dzięki niemu możemy opublikować w postaci usługi WMS projekty stworzone w QGIS Desktop, z użyciem graficznego interfejsu użytkownika i bogatych opcji wizualizacji danych. 

Ponieważ uruchomienie QGIS Server na komputerze lokalnym nie przedstawia większych trudności, skupię się zatem na tym, jak dokonać tego na zewnętrznym serwerze. 

Dalszy opis zakłada, że dysponujemy serwerem VPS lub dedykowanym, z zainstalowanym systemem Debian/Ubuntu, do którego mamy dostęp przez SSH i uprawnienia superużytkownika.

Instalacja 

Instalację zaczniemy od zalogowania się na serwer jako użytkownik z uprawnieniami administracyjnymi, lub jeśli konfiguracja nie dopuszcza takiego logowania bezpośrednio przez SSH – wydajemy komendę sudo su, dzięki czemu nie trzeba będzie wpisywać „sudo“ przed każdą kolejną.

Wersja stabilna 1.7, niestety, nie nadaje się do użycia jako serwer – każde skierowane do niego zapytanie skończy się komunikatem błędu 500 Internal Server Error. Jest to spowodowane błędem programistycznym, wykrytym już po opublikowaniu wydania. Konieczne jest zatem skorzystanie z usług wersji Master. Na stronie http://hub.qgis.org/projects/quantum-gis/wiki/Download#Master odnajdziemy repozytorium odpowiednie dla naszej dystrybucji. Otwieramy do edycji plik /etc/apt/sources.list i wklejamy właściwe linie, na przykład dla Ubuntu 11.10 będą one następujące:

deb     http://qgis.org/debian-nightly oneiric main
deb-src http://qgis.org/debian-nightly oneiric main

W kolejnym kroku wydajemy komendy:

apt-get update
apt-get install qgis-mapserver libapache2-mod-fcgid

Jeśli wszystko poszło dobrze, QGIS Server powinien zostać zainstalowany w katalogu /usr/lib/cgi-bin/qgis_mapserv.fcgi . Jeśli jednak zdecydujemy się teraz skierować do niego zapytanie, odpowiedź będzie brzmiała Internal Server Error – brak jest bowiem dostępnych plików projektu.

Przygotowanie projektu 

W QGIS Desktop

W oknie Właściwości projektu znajduje się zakładka o nazwie Serwer WMS, która odpowiada za ustawienia związane z publikacją projektu w sieci. Najważniejszym z nich jest sekcja „Tylko te układy współrzędnych“ – trzeba koniecznie ją zaznaczyć i wybrać rzeczywiście przydatne, w przeciwnym wypadku serwer zwróci w odpowiedzi na GetCapabilities wszystkie dostępne, włącznie z bardzo egzotycznymi.

Oprócz tego konieczne jest ustawienie zapisu bezwzględnych ścieżek dostępu.

Symbole SVG 

Wszystkie niestandardowe symbole SVG muszą zostać przekopiowane na serwer. Domyślnie odczytywane są one z katalogu /usr/share/qgis/svg.

Symbole stworzone innymi metodami – poprzez złożenie czcionek, kształtów i kolorów – są zapisywane w pliku .qgs, zatem nie trzeba się nimi przejmować.

Ścieżki dostępu

Najbardziej komfortowa sytuacja ma miejsce wtedy, gdy komputer używany do pracy nad projektem ma identyczny system operacyjny i konfigurację, co serwer – w takim wypadku można już przystąpić do kopiowania danych i pliku projektu. Jeśli jednak jest inaczej, trzeba będzie dokonać pewnych zmian w pliku projektu przy pomocy edytora tekstu – najlepiej, żeby był dostosowany do edycji dokumentów XML.

Żeby projekt stworzony w QGIS Desktop zadziałał prawidłowo na serwerze, wszystkie ścieżki dostępu muszą się zgadzać. W przypadku przenoszenia projektu z systemu Windows należy zwrócić szczególną uwagę na katalog domowy (Windows  używa C:/Users/nazwa, natomiast Linux – /home/nazwa). Dla przykładu porównanie definicji warstwy Shapefile dla Linux i Windows:

Linux

              _home_admin_punkty_shp20120227210555964
            /home/admin/punkty.shp
            
            
            /home/admin/punkty.shp

Windows

              _Users_admin_punkty_shp20120227210555964
            C:/Users/admin/punkty.shp
            
            
            C:/Users/admin/punkty.shp

W przypadku danych przechowywanych w bazie PostGIS trzeba sprawdzić parametry połączenia – te są na szczęście zapisywane identycznie niezależnie od systemu.

Kopiowanie plików

Dane umieszczamy w katalogach zgodnie z podanymi w pliku projektu ścieżkami, pamiętając o tym, żeby mogły być odczytane przez wszystkich (chmod 644 albo chmod a+r).

Jeśli chodzi zaś o plik projektu, to istnieje kilka możliwości:

  • umieszczenie w katalogu domowym użytkownika. Jest to najprostsze rozwiązanie, ale i mało eleganckie: adres serwera WMS będzie miał postać http://domena.pl/cgi-bin/qgis_mapserv.fcgi?map=/home/admin/projekt.qgs 
  • umieszczenie w katalogu /usr/lib/cgi-bin. Najlepsze rozwiązanie, gdy publikowany jest tylko jeden projekt – adres będzie miał postać http://domena.pl/cgi-bin/qgis_mapserv.fcgi
  • utworzenie dla każdego projektu podkatalogu w /usr/lib/cgi-bin, oraz przekopiowanie tam plików qgis_mapserv.fcgi, wms_metadata.xml i admin.sld. Wówczas adres przyjmie postać http://domena.pl/cgi-bin/projekt1/qgis_mapserv.fcgi

Teraz wystarczy już tylko zrestartować serwer HTTP:

/etc/init.d/apache2 restart

i można dokonać próby połączenia.

Pierwsze zapytanie będzie przetwarzane dość długo, gdyż serwer będzie potrzebował czasu na przetworzenie pliku projektu. Kolejne powinny być przetworzone już dużo szybciej.

Tagi: ,
eVis – przeglądanie zdjęć w QGIS

Stare porzekadło mówi, że obraz jest wart więcej niż tysiąc słów. Dodając do tego czas, jaki byłby potrzebny na zapisanie owego tysiąca słów w terenie – mało kto stwierdzi, że geotagowane zdjęcia są tylko gadżetem, nieprzydatnym w „poważnym“ GIS. Dzięki jednej z wtyczek QGIS mamy możliwość przeglądanie owych zdjęć bezpośrednio z poziomu aplikacji. Wystarczy posiadać warstwę wektorową z kolumną, w której przechowywane są ścieżki do zdjęć (zapisanych na dysku) i przypisanych do odpowiednich obiektów.

Aby móc przeglądać załączone zdjęcia należy za pomocą narzędzia Zarządzaj wtyczkami uaktywnić wtyczkę (powinna być domyślnie zainstalowana), o nazwie eVis. Po aktywacji, narzędzia z nią związane powinny pojawić się w menu Bazy danych.

Pierwsze z nich, o nazwie Połączenie z bazą danych eVis, nie będzie tym razem potrzebne. Interesujące są natomiast dwa kolejne:

Narzędzie ID zdarzeń eVis – działa tak jak zwykłe narzędzie Identyfikuj, po kliknięciu na punkt z „aparatem“ powinno pokazać się okno ze zdjęciem:

Przeglądarka eVis

Przeglądarka eVis

Jeśli jednak zdjęcie się nie wyświetli, konieczne może być dokonanie konfiguracji na zakładce Opcje – „Atrybut zawierający ścieżkę dostępu do pliku“ powinien być ustawiony na filepath.

Przeglądarka zdarzeń eVis – umożliwia przeglądanie zdjęć po kolei, aktywne zdjęcie będzie zaznaczone na mapie symbolem gwiazdki 

Więcej informacji:

Strona domowa projektu eVis: http://biodiversityinformatics.amnh.org/open_source/evis/documentation.php

Tagi:

GIS SUPPORT sp. z o.o.


SZKOLIMY

z QGIS oraz innego otwartego oprogramowania GIS.

zobacz ofertę szkoleń


WSPIERAMY

świadczymy komercyjne wsparcie dla oprogramowania open source GIS w Polsce. Wdrażamy i pomagamy w migracji na otwarte oprogramowanie

dowiedz się więcej


PROGRAMUJEMY

mamy bardzo duże doświadczenie w tworzeniu aplikacji GIS oraz geoportali w oparciu o komponenty open source GIS

dowiedz się więcej