Kurs Quantum GIS

Creative Commons License
Kurs Quantum GIS by Robert Szczepanek
na licencji Creative Commons Uznanie autorstwa-Na tych samych warunkach 3.0.
W przypadku tworzenia utworów zależnych proszę o kontakt.

Lekcja 1 - podstawy pracy z programem

Program Quntum GIS (QGIS) jest wolnym i otwartym oprogramowaniem. Strona główna projektu znajduje się pod adresem http://www.qgis.org. Na stronie dostępne są aktualne wersje programu oraz kody źródłowe. Dostępne jest również forum dyskusyjne umożliwiające wymianę uwag na temat programu.

Przedstawione poniżej ćwiczenia zostały dostosowane do wersji QGIS 1.0.0 Preview2. Należy pamiętać o tym, że jest to wersja robocza, a tym samym nie pozbawiona błędów.

W początkowych ćwiczeniach wykorzystamy przykładowe mapy Alaski udostępniane podczas instalacji systemu. Wszystkie pliki dostępne są w kartotece C:\GIS DataBase.

qgis

Rys.1 Widok ogólny programu QGIS 1.0.

Po uruchomieniu programu pojawia sie okno główne z kilkoma obszarami:

Lokalizacja i rozmiary niektórych obszarów (obiektów) moga być dostosowywane do aktualnych potrzeb. Dotyczy to w szczególności paska narzędzi, legendy oraz szybkiego podglądu. Po zatrzymaniu kursora nad wybraną ikoną na pasku narzędzi, po chwili wyświetlona zostanie krótka podpowiedź dotycząca jej działania.

Mapy wektorowe i rastrowe

Pracę rozpoczniemy od dodania kilku map wektorowych oraz mapy rastrowej. Aby dodać warstwę wybieramy odpowiednią ikonę z paska narzędzi (rys.2). Mapy wektorowe znajdują się w podkartotece vmap0_shapefiles, mapa rastrowa zlokalizowana jest w kartotece raster.

Rys.2 Ikony: dodaj warstwe wektorową; dodaj warstw rastrową

Samodzielnie wyświetl mapę rastrową landcover.tif i nałóż na nią kilka map wektorowych. Kolejność map w legendzie determinuje kolejność ich wyświetlania. Warstwy są wyświetlane od najniżej do najwyżej położonej. Z tego powodu, zwykle mapy rastrowe są umieszczane pod mapami wektorowymi. Aby zmienić kolejność warstw, wystarczy przeciągnąć i upuścić w wybrane miejsce w oknie legendy daną warstwę. Ale nawet w sytuacji, gdy warstwa rastrowa znajduje się na samej górze lub chcemy wyświetlić kilka warstw rastrowych równocześnie, można tego dokonać dzięki zastosowaniu przeźroczystości warstw. Ustaw warstwę rastrową na samej górze a następnie kliknij dwukrotnie na nazwie warstwy lub wybierz z menu kontekstowego (prawy klawisz myszy) Właściwości warstwy. W zakładce Przeźroczystość możesz ustawić dowolną wartość przeźroczystości (Global transparency) tak, aby widoczne były warstwy pod spodem. Nie musisz przy tym zamykać okna naciskając OK. Wystarczy że wybierzesz Zastosuj, a wprowadzone zmiany będą od razy widoczne.

Podgląd warstw

Poruszanie się po mapach możliwe jest na wiele sposobów. Najbardziej intuicyjne na początku jest wykorzystywanie paska narzędzi (rys.3)

zoom

Rys.3 Ikony do podglądu warstw.

W miarę poznawania programu wygodniejsze może okazać się używanie kółka na myszy do powiekszania i pomniejszania lub skrótów klawiaturowych, które można odszukać w menu. Poszczególne warstwy wyświetlane w legendzie, mogą być włączone lub wyłączone. W calu łatwiejszego zlokalizowania obszaru mapy który jest aktualnie wyświetlany można wykorzystać opcję dodawania poszczególnych warstw do szybkiego podglądu znajdującego się w lewym dolnym rogu okna aplikacji.

Właściwości warstw wektorowych

Każda warstwa posiada wiele właściwości. Odpowiednie ich dopasowanie umożliwia stworzenie przejrzystej i czytelnej mapy. Jako przykładem posłużymy sie mapa wektorową airports na której naniesione zostały punkty lokalizacji lotnisk. Standardowo obiekty punktowe wyświetlane są w postaci okręgów, ale możliwa jest zmiana tego ustawienia tak, aby był to dowolny inny kształt. Wykorzystując właściwości warstwy spróbuj wyświetlić lotniska tak jak pokazano na rysunku 4 wraz z nazwami.

airports

Rys.4 Dostosowanie warstwy wektorowej lotnisk.

Projekt

Przygotowany układ warstw można zapisać jako projekt, do ponownego wykorzystania.

Zadanie praktyczne

Spróbuj samodzielnie stworzyć kompozycję mapy składającą się z kilku warstw wektorowych. Całość zapisz jako projekt.

Lekcja 2 - tabela atrybutów

Rozpocznijmy pracę nad nowym projektem. Na początek dodajemy do projektu warstwę wektorową Alaska. Wybierz kolory mało nasycone dla tej warstwy (obrys i wypełnienie). Obrys niech będzie nieco ciemniejszy od wypełnienia. Spróbuj teraz ustalić optymalną szerokość obrysu. Jaka wartość daje najlepsze rezultaty?

Jako kolejną warstwę wektorową wyświetl miejscowości zapisane pliku Builtups. Ponieważ są to niewielkie obszary wyświetlmy również ich etykiety. I tutaj pojawia się problem widoczny w centralnej części Alaski - niektóre nazwy są nieczytelne. Czy domyślasz się dlaczego?

Żeby temu zaradzić włączymy bufor etykiet. Może to spowodować przysłonięcie niektórych nazw, ale dzięki temu będziemy mogli przeczytać większość etykiet bez problemów.

Warstwa wektorowa Railroads obrazuje przebieg linii kolejowej. Sprawdź przez jakie miejscowości prowadzi ta linia. Spróbuj zmienić nazwę tej warstwy na polską, np. kolej. Jeśli chcesz ograniczyć obraz do zakresu jednej warstwy, po jej wybraniu wybierz ikonę lub z menu podręcznego Powiększ do zasięgu warstwy.

Pamiętaj, aby regularnie zapisywać efekty swojej pracy w pliku projektu.

Kolejna warstwą do dodania będą rurociągi - Pipelines. Z mapą wektorową zwykle związana jest tabela atrybutów. W celu jej wyświetlenia należy wywołać Otwórz tabelę atrybutów. Każdy wiersz w tabeli reprezentuje jeden obiekt (np. segment polilinii), każda kolumna to oddzielny atrybut. Nasza warstwa wektorowa w polu LOCDESC wyróżnia dwie kategorie on ground surface [rurociągi naziemne] oraz below surface [rurociągi podziemne]. Twoim zadaniem będzie wyświetlenie tych dwóch rodzajów rurociągów w ramach jednej warstwy. Wykorzystaj w tym celu odpowiedni typ legendy oraz pole klasyfikacji. Rurociąg podziemny wyświetl linią kropkowaną.

Kolejną dodaną warstwą wektorową będą lotniska Airports. Spróbujmy pokazać na mapie gdzie są zlokalizowane lotniska wojskowe przypisując im piktogram dużego samolotu. Pozostałe lotniska wyświetlmy jako małe samoloty. W tym celu musisz wykorzystać atrybuty związane z tą warstwą.

W tabeli atrybutów dla lotnisk jest również informacja o wysokości nad poziomem morza na jakiej znajduje się dane lotnisko. Wykorzystamy tę informację do wizualizacji. Dodamy jeszcze raz tę samą warstwę, ale wykorzystamy inne jej atrybuty. Podziel lotniska na 5 równych klas w zalezności od wysokości na której się znajdują. Przesuń warstwę w wysokościami lotnisk poniżej warstwy z piktogramami samolotów. Na tym przykładzie widać, że w ramach jednej warstwy wektorowej można zapisać wiele informacji i w dowolny sposób je wizualizować.

cats

Rys.3 Wykorzystanie atrybutów warstw.

Zadanie praktyczne

Czy potrafisz w ramach nowego projektu, na podstawie warstwy wektorowej z punktami wysokościowymi Elevp odwzorować schematycznie topografię terenu.

Lekcja 3 - tworzenie warstw wektorowych

Rozpoczynamy nowy projekt. Zaczniemy od stworzenia nowej warstwy wektorowej nowa warstwa. Wyświetli się okno dialogowe, w którym należy zdefiniować podstawowe parametry warstwy. Tworzona warstwa zapisana jest w domyślnym formacie - ESRI shapefile. Pierwsza warstwa będzie typu punktowego. Aby utworzyć warstwę konieczne jest zdefiniowanie przynajmniej jednego pola atrybutów. Nazwijmy go przykładowo Nazwa, a poniewaz wpiszemy w nim tekst, wybieramy typ String. Aby dodać atrybut do listy należy wybrać przycisk dodaj atrybut. Dopisz jeszcze dwa inne atrybuty o dowolnych nazwach i przy pomocy przycisku usuń atrybut usuń jeden z nich. Jeśli wszystkie atrybuty są poprawne wybieramy OK. Powinno pojawić się okno dialogowe, w którym podajemy nazwę naszej warstwy. Zapisz warstwę w swojej kartotece pod nazwąDzielnice. W wybranej przez Ciebie lokalizacji zostanie utworzona kartoteka o nazwie Dzielnice, a w niej cztery pliki o różnych rozszerzeniach. Plik *.prj zawiera informacje o odwzorowaniu mapy, plik *.shp zawiera dane geometryczne, *.shx to plik indeksu, zaś plik *.dbf zawiera dane opisowe (atrybuty). Nasza warstwa powinna pojawić się w legendzie.

Aby dodać obiekty punktowe do naszej warstwy musimy rozpocząć jej edycję edycja. Po tej operacji przycisk dodaj punkt staje się aktywny. Wybierzmy go i wskażmy dowolny punkt na mapie. Powinno pojawić się okno służące do wprowadzenia atrybutu wskazanego punktu. Spróbuj wskazać (zdigitalizować) kolejny punkt. Jeśli punkt ten po wpisaniu atrybutów nie pojawi się na mapie, to znaczy że włączone jest przyciąganie. Aby je wyłączyć wybierz z menu Ustawienia | Opcje | Digitalizacja i wyzeruj tolerancje przyciągania. Opcje przyciągnia definiwane sa również w Ustawienia | Właściwości projektu. Zapisywanie zmian wprowadzonych w warstwie jest realizowane w trakcie kończenia edycji. Edycje można włączać/wyłączać z paska narzędzi oraz z okna tabeli atrybutów.

W analogiczny sposób stwórz warstwę wektorową typu linia oraz poligon. W przypadku rysowania linii i poligonów ostatni punkt zaznacz prawym klawiszem myszy.

Do szybkiego sprawdzenia atrybutów określonych obiektów możesz wykorzystać przycisk info na pasku narzędzi.

Zadanie praktyczne

Stwórz nowy projekt i wyświetl następujące warstwy wektorowe: Alaska, Storagep (Zbiorniki), Swamp (Bagna) oraz Builtups (Miejscowości). W pierwszej kolejności zmień nazwy warstw w legendzie na polskie podane w nawiasach. Do tych nazw będziemy się odwoływać w dalszej części.

Twoje zadanie będzie polegało na stworzeniu warstwy wektorowej Gazociąg, na której zaprojektujesz przebieg linii przesyłowej gazu. Punktem początkowym będzie jedyny punkt z gazem z warstwy Zbiorniki, zaś punktem docelowym będzie miejscowość Palmer zapisana na warstwie Miejscowości. Tak zaprojektuj przebieg trasy, aby omijała ona Bagna. Nadaj swojej trasie następujące atrybuty: Nazwa - "gazociąg im. [Twoje nazwisko]"; rok budowy: 2008; koszt [mln. USD]: 23.

Drugą warstwą którą stworzysz będzie strefa ochronna gazociągu - poligon.

edycja wektora

Rys.5 Przykładowy przebieg trasy gazociągu.

Lekcja 4 - edycja warstw wektorowych i akcje

Edycja warstw wektorowych

Zacznijmy od zapisania nowego projektu, np. pod nazwą lekcja4. Dodaj do projektu warstwę wektorową Lakes. Mając zaznaczoną tę warstwę w legendzie wybierz z menu podręcznego (prawy klawisz myszy) opcję Zapisz jako shape... i zapisz kopię tej warstwy pod nazwą Jeziora w swojej kartotece. Odwzorowania nie zmieniamy, akceptujemy domyślne. Po zapisaniu kopii usuwamy z projektu warstwę oryginalną i dodajemy właśnie stworzoną warstwę Jeziora.

Rozpocznij edycję warstwy i dorysuj dwa duże jeziora. Jako atrybut cat wpisz odpowiednio 100 i 101, jako nazwy Śniardwy i Mamry, powierzchnie odpowiednio 113 i 104. Jeżeli wyłączymy teraz tryb edycji zostaniemy zapytani czy chcemy zapisać zmiany.

Spróbujemy teraz dokonać prostej edycji polegającej na przesunięciu kilku wierzchołków naszych nowych jezior w inne miejsca. Opcje przyciągania zdefiniowane są w dwóch miejscach:

W naszym przypadku minimalna zmiana ustawień to ustalenie promienia poszukiwań przy edycji wierzchołków na 9999. Spróbuj teraz samodzielnie włączyć tryb edycji i zmienić lokalizację kilku wierzchołków.

Zakładki

Przy pomocy klawisza zaznacz jezioro Śniardwy. Następnie wybierz z paska narzędzi aby wybrany obiekt wypełnił cały obszar mapy. Ten widok można zapamiętać jako zakładkę wybierając z menu Widok > Nowa zakładka. Nadaj jej nazwę jeziora. To samo zrób z drugim jeziorem. Teraz naciśnij literę B na klawiaturze i zobacz jak możesz przełączać widoki.

Zakładki mogą znakomicie ułatwiać pracę z dużymi mapami.

Akcje

Na przykładzie tej warstwy pokażemy jak można wykorzystać akcje. Akcje to programy lub skryptu, które możemy powiązać z dowolnym obiektem. Mając np. warstwę wektorową z lotniskami, możemy powiązać każde lotnisko z jego zdjęciem zapisanym na dysku. Po wybraniu lotniska na mapie dzięki akcji można zdefiniować, że uruchomi się (dowolna) przeglądarka zdjęć i wyświetli nasze lotnisko. Oczywiście przeglądarka musi mieć podane, które zdjęcie ma wyświetlić. Takie informacje mogą być zapisane w tabeli atrybutów lub bazie danych. Ponieważ nie mamy zdjęć lotnisk stworzymy akcje, które umożliwią automatyczne wyszukanie informacji o jeziorze w sieci www na podstawie jego nazwy.

Zaczynamy od wyświetlenia zakładki Akcje w oknie właściwości warstwy. Do każdej warstwy można przypisać wiele akcji. My zdefiniujemy jedną i nadamy jej nazwę np. szukaj jeziora w sieci.

action

Rys.6 Definiowanie akcji dla warstwy wektorowej.

Drugim krokiem jest zdefiniowanie akcji która ma zostać wykonana. W tym celu wybieramy przycisk po prawej stronie okna akcja i w oknie dialogowym odnajdujemy lokalizację przeglądarki internetowej (Firefox lub Explorer). Są ona najczęściej zlokalizowane na dysku C: w kartotece Program Files w odpowiednich folderach. Należy szukać plików wykonywalnych z rozszerzeniem *.exe. Po zakończeniu wyboru cały tekst należy umieścić w cydzysłowie. Po pomyślnym wpisaniu akcji wybieramy przycisk Wstaw akcję i akceptujemy całość.

Pora na sprawdzenie jak to działa w praktyce. Uaktywnij na pasku narzędzi ikonę Informacje o obiekcie a następnie wskaż dowolne jezioro. Powinno pojawić się okno ze szczegółowymi informacjami o wskazanym obiekcie. Jedną z wyświetlonych właściwości będzie nasza akcja. Jej kliknięcie powinno spowodować uruchomienie przeglądarki internetowej i wyświetlenie domyślnej strony.

W kolejnym kroku spróbujemy wykorzystać w naszej akcji jeden z atrybutów tabeli, w którym wpisane sa nazwy jezior - pole NAMES. W tym celu musimy pozownie wyświetlić okno właściwości warstwy i dopisać w polu akcji wywołanie w oknie przeglądarki strony google. Kliknij na akcję znajdująca się na liście, aby wyświetlić jej Nazwe i Akcję w oknach edycyjnych. Wklej poniższy kod w oknie akcji.
http://google.com/search?q=""
Pozostaje nam dopisanie w końcowym cudzysłowie frazy, któa ma być poszukiwana. Ustaw w tym miejscu kursor. Z listy wybierz pole, z którego system ma pobierać wartości i kliknij przycisk Dodaj pole. Na koniec wybierz przycisk Aktualizuj akcję i zamknij okno. Sprawdź jak akcja działa teraz.

Lekcja 5 - wykorzystanie internetu

Na dzisiejszej lekcji zamiast wykorzystywać gotowe mapy, spróbujemy samodzielnie poszukać w internecie odpowiednich warstw tematycznych.

Źródła danych mapowych

Na początek poszukajmy mapy, na której będziemy mieli informacje o zaporach (ang.dam). Spróbuj samodzielnie odnaleźć na serwerze http://geodata.grid.unep.ch/ odpowiednie dane w formacie shape (shapefile), wgraj je do swojej kartoteki i rozpakuj. Dodaj skopiowane dane jako warstwę wektorową do nowego projektu. Warstwa zawiera tabelę atrybutów, z których najciekawsze to:

Wykorzystując atrybut pojemości spróbuj tak ustawić symbolikę, aby zapory wieksze były wyświetlane jako większe koła. Czy na podstawie atrybutów potrafisz wybrać tylko zapory wybudowane przed rokiem 1900? Ile jest takich zapór? Możesz np. wykorzystać w tym celu kreatora zapytań wyboru z okna tabeli i wykonać zapytanie [YEAR>0 AND YEAR < 1900].

Czy widzisz na którym kontynencie są największe zapory? Chyba nie, bo nie wiadomo gdzie są kontynenty :). Kolejnym krokiem będzie zatem wyświetlenie podkładu z kontynentami. Wykorzystamy w tym celu jeden ze standardów wymiany danych przestrzennych - WMS. Web Map Service umożliwia pobieranie w trybie on-line odpowiednich fragmentów map z serwerów obsługujących ten standard. Program Quantum GIS wspiera ten standard jako klient i potrafi pobrać odpowiedni fragment mapy i wyświetlić go jako warstwę. Dodajmy zatem warstwę WMS korzystając z serwera NASA(JPL). Po połączeniu z serwerem zostanie wyświetlona lista dostępnych warstw, które są udostępniane w postaci rastrowej. Wybierzmy pierwszą z nich - global_mosaic. Aby była nam pomocna, nowa warstwa musi oczywiście pojawić się pod warstwą z zaporami i należy ustawić jej odpowiednią przeźroczystość.

dams

Rys.7 Rozmieszczenie zapór.

Sprawdź na mapie jakie zapory z obszaru Polski znalazły się na tej warstwie i kiedy zostały zbudowane.

Oczywiście lokalizację kontynentów i poszczególnych krajów można również dodać jako warstwę wektorową. Spróbuj samodzielnie dodać warstwę wektorową z podziałem politycznym świata i odpowiednio ją wyświetl [http://www.cipotato.org/diva/data/MoreData.htm].

Pomiar odległości i powierzchni

Do pomiaru odległości i powierzchni wykorzystywane są ikony znajdujące się na pasku narzędziowym. measure Sprawdź jaka odległosć dzieli dwie nasze zapory. Spróbuj wyznaczyć powierzchnię obszaru Polski a następnie porównaj otrzymany wynik z tym zapisanym w tabeli atrybutów. W jakich jednostkach podawana jest powierzchnia?

Zadanie praktyczne

Korzystając z serwera http://geodata.grid.unep.ch/ znajdź i załaduj do Quantum mapę opadów średnich rocznych (Precipitation - Millimeters). Zauważ, że dla niektórych krajów brak jest danych i należy to odpowiednio wyświetlić. Stwórz kilka kategorii klasyfikując je w czytelny sposób. Jaki jest opad średni roczny w Polsce i jakich lat dotyczy pozyskana warstwa? Jak Twoim zdaniem wygląda retencjonowanie wód w polskich zbiornikach retencyjnych w kontekście opadów atmosferycznych? Jak wyglądamy pod tym względem na tle innych krajów europejskich?

precipitation

Rys.8 Średnie opady roczne w Europie.

Lekcja 6 - warstwy rastrowe

Jednym z popularniejszym formatów zapisu informacji przestrzennych w formacie rastrowym jest TIFF, a w zasadzie jego rozszerzona wersja GeoTIFF. Cechą odróżniającą TIFF od innych popularnych formatów rastrowych takich jak JPG czy PNG jest możliwość zapisania w samym pliku TIFF metadanych przestrzennych. Istnieje również możliwość zapisania matadanych przestrzennych w odrębnym pliku tekstowym, który może mieć rozszerzenie .tfw, .tifw/.tiffw, .wld lub .tab. Format TIFF umożliwia kompresję zapisu i jest formatem bezstratnym w przeciwieństwie do np. JPG. W formatach rastrowych są zapisywane na przykład zdjęcia satelitarne. Mapy(warstwy) rastrowe są obsługiwane w programie Quantum przez bibliotekę GDAL.

Do ćwiczeń z mapami rastrowymi wykorzystamy przykładowe mapy dostępne pod adresem ftp://ftp.remotesensing.org/pub/geotiff/samples/. Skopuj do swojej kartoteki z mapami plik made_up/bogota.tif. We właściwościach warstwy spróbuj zmienić plaletę wykorzystywaną do wyświetlania warstwy.

Histogram

Jednym z ważniejszych narzędzi do szybkiej analizy warstw rastrowych jest histogram. Sprawdź w zakładce właściwości warstwy jak działa. Wczytaj kilka innych warstw rastrowych z podanej wcześniej strony i sprawdź ich histogramy. Co jest na osi rzędnych a co na osi odciętych? Zauważ, że po przeliczeniu histogramu odpowiednie statystyki zostają zapisane w metadanych.

Wzmocnienie kontrastu

Porównaj histogramy dwóch warstw: Bogota oraz tm (z kartoteki pci_eg na stronie www). Spróbuj przy pomocy opcji Wzmocnienie kontrastu z zakładki Symbolika poprawić wyświetlany obraz. Czy dokonując zmian zmieniasz równocześnie wartości zapisane na mapie?

Sprawdź jak zmieniając wartość odchylenia standardowego we właściwościach kanału możesz poprawić czytelność obrazu rastrowego.

Piramidy

Często warstwa rastrowa jest dużym plikiem i niepotrzebnie obciąża pracę systemu. Takim przykładem może być warstwa landcover z kartoteki Alaska/raster. Ma ona prawie 15MB i na niektórych komputerach może spowolnić ich działanie. Zanim cokolwiek dalej zrobisz, skopiuj tę warstwę z poziomu systemu operacyjnego do własnej kartoteki z mapami a następnie wczytaj ją do programu.

Jednym z rozwiązań problemu wydajności jest zastosowanie piramid. Zbuduj piramidę dla tej warstwy i sprawdź jak/czy działa ten mechanizm.

Lekcja 7 - wprowadzenie do systemu GRASS

GRASS a QGIS

Nazwa GRASS to akronim od Geographic Resources Analysis Support System. Początki historii GRASSa to lata 1982-1995. System był pierwotnie rozwijany przez laboratoria naukowe armii USA. Jest jednym z najbardziej rozbudowanych systemów GIS, obecnie rozwijany przez miedzynarodowy zespół programistów z całego świata. GRASS jest systemem mającym swe początki w zamierzchłych czasach, kiedy na komputerach panował UNIX. Dopiero ostatnie wersje umożliwiły łatwą pracę w systemie Windows. QGIS to młodszy brat GRASSa. Dzięki ścisłej współpracy zespołów rozwijających te dwa systemy możliwe jest wykorzystanie wybranych funkcji GRASSa wewnątrz QGIS. Obydwa systemy są udostepniane jako otwarte i wolne oprogramowanie. Na serwerze ohloh moża zobaczyć dokładne statystyki związane z rozwojem tych dwóch systemów: GRASS i Quantum GIS

Praca z funkcjami GRASSa z poziomu QGIS

Prezentowane zadania oparte są częściowo na materiałach udostępnionych przez Markusa Netelera i wykorzystują standardowy zestaw map dostarczanych z systemem GRASS i QGIS - Spearfish.

Aby wykorzystać potencjał GRASSa w QGIS w pierwszej kolejności należy z menu głównego właczyć wtyczkę o nazwie GRASS. Po tej operacji na pasku narzędzi powinnien pojawić się dodatkowy zestaw ikon związanych z GRASSem.

grass

Rys.9 Pasek narzędzi GRASS

Mapy GRASS zapisywane są w 3-poziomowej strukturze kartotek: Baza danych -> Lokacja -> Mapset. Baza danych to miejsce, w którym zgromadzone są wszystkie pliki związane z mapami. Lokacja GRASS jest kolekcją map dla określonego terytorium lub projektu. Mapset GRASS jest kolekcją map użytkownika. Użytkownik może czytać mapy ze wszystkich mapsetów w lokacji, ale może otwierać do zapisu wyłącznie własny mapset (którego jest właścicielem).
Zaczniemy więc od utworzenia nowego mapsetu. Naszą lokacją będzie spearfish a jako nazwę mapsetu wpisz swoje nazwisko. W każdej lokacji dostępny jest mapset PERMANENT, ale służy on w zasadzie tylko do odczytu standardowych dla danej lokacji map. Wszystkie kolejne komendy będą odnosiły się do paska narzędzi GRASS. Dodajmy warstwę rastrową elevation.dem oraz warstwę wektorową roads. Mapa roads zawiera pięć kategorii dróg. Nas będzie interesowała kategoria cat=1. Wyświetl ją kolorem czarnym o grubości 1. Jest to autostrada międzystanowa. Naszym zadaniem będzie stworzenie strefy 2km wokół tej autostrady.

Mając wybraną warstwę roads uruchom komendę Otwórz narzędzia GRASS. Po uruchomieniu tej komendy w pierwszej zakładce dostępne będą wszystkie funkcje GRASS uporządkowane według realizowanych zadań. Ta metoda poszukiwań świetnie sprawdza się na początku, gdy nie do końca wiemy czego szukamy. W zakładce drugiej dostępna jest lista modułów wraz z wygodną wyszukiwarką. Sprawdza się, gdy wiemy jakiej funkcji szukamy. Nazwy poszczególnych modułów rozpoczynają się od litery reprezentującej grupę modułów (np. r.* ro raster a v.* to wektor). Po uruchomieniu odpowiedniego modułu dodawana jest jego zakładka. W ramach tej zakładki jednym z dostępnych elementów jest Podręcznik szczegółowo opisujący działanie modułu.

Na początek sprawdźmy jakie kategorie zawiera mapa roads. Służy do tego moduł v.db.select. W wyniku działania modułu w oknie Wyjście powinno zostać wyświetlonych pięć kategorii oraz kategoria 0. Wiedząc, że interesuje nas tylko droga z kategorii 1, wydzielimy ją z mapy wektorowej i zapiszemy jako nową warstwę. Wykorzystamy w tym celu moduł v.extract.where. Jako warunek wyboru wpiszmy cat=1, zaś mapa wyjściowa niech otrzyma nazwę autostrada. Po uruchomieniu komendy w oknie Wyjście wyświetlane są komunikaty zwracane przez moduł. Jeśli po pomyślnym zakończeniu pracy modułu wybierzesz Zobacz wynik, nowo stworzona mapa zostanie automatycznie dodana do legendy.

Ostatnim krokiem będzie wyznaczenie strefy buforowej od obiektów na warstwie autostrada. Do tego zadania wykorzystamy moduł v.buffer. Jednostkami mapy są metry, więc jako wartość bufora podamy 2 000. Warstwę wyjściową nazwijmy autostrada_2km. Po odpowiedmin ustawieniu przeźroczystości uzyskujemy końcową wersję strefy od autostrady.

autostrada

Rys.10 Strefa 2km od autostrady.

Lekcja 8 - numeryczny model terenu

Pracę rozpoczynamy od otwarcia mapsetu utworzonego na poprzedniej lekcji w lokacji spearfish60. Wyświetlmy warstwę rastrową elevation.dem. Na warstwie tej mamy zapisane informacje o wysokości terenu w każdym elementarnym obszarze (pikselu).

Aby lepiej zwizualizować topografię wykorzystamy funkcję r.shaded.relief, która generuje mapę cieni. Załóżmy, że będziemy chcieli zobaczyć jak wygląda analizowany teren o zachodzie słońca. W omawianej funkcji azymut jest podawany w stopniach i liczony od północy zgodnie z ruchem wskazówek zegara. Mapę wyjściową nazwijmy sunset. Po wygenerowaniu mapy pozostaje nam jedynie dopasowanie przeźroczystości warstwy z cieniami.

sunset

Rys.11 Cienie padające podczas zachodu słońca.

Kolejna funkcja umożliwia automatyczne obliczenie spadków terenu - r.slope.aspect.slope. Nazwijmy mapę wyjściową spadki.

Do szczegółowych analiz geomorfologicznych warto wykorzystać bardziej zaawansowany model - r.param.scale. Jako parametr Morphometric parameter ... wybierz Feature. Dla każdego okna obliczeniowego będą generowane obiekty morfologiczne takie jak grzbiety, szczyty, etc. Aby mapa nie była zbyt drobiazgowa zwiększ wielkość okna obliczeniowego z 3 na 21. Mapę wyjściowa możesz nazwać np. morfo. Korzystając z dokumentacji spróbuj dowiedzieć sie gdzie można znaleźć więcej informacji na temat tego modułu.

Najczęściej operacje na mapach rastrowych wykonuje się w przesuwnym oknie o niewielkich rozmiarach. Jeśli okno ma rozmiar 3x3 piksele, to na podstawie wartości zapisanych w 9 pikelach stanowiących okno określana jest wartość nowego piksela centralnego. Z tego też względu okna mają nieparzyste rozmiary. Operacje przeprowadzone na oknie mogą mieć np. charakter statystyczny. Przy pomocy fukncji r.neighbors stwórz nowa wersję warstwy elevation.dem. Policz wartość średnią [average] dla okna o rozmiarze 9. Stwórz analogicznie jak na początku lekcji mapę cieniowaną dla nowo powstałej warstwy. Czy widoczna jest różnica w wyglądzie tych dwóch map?

Ćwiczenie praktyczne

Sprawdź jak wybrane opcje wpływają na wynik działania funkcji r.neighbors. Jaka statystyka najlepiej sprawdzi się np. próbie generalizacji mapy rastrowej landcover.30m?

Lekcja 9 - algebra mapowa

Na lekcji 9 ponownie pracować będziemy na mapach GRASSa. Rozpoczynamy więc od otwarcia własnego mapsetu w lokacji Spearfish. Jeśli podczas tej operacji zostanie wyświetlony komunikat o błędzie, to powodem jest prawdopodobnie plik .gislock zlokalizowany w kartotece lokacji. Plik ten należy usunąć i ponowić operację wyboru mapsetu.

W dzisiejszej lekcji wykorzystamy dwie mapy: rastrową elevation.dem oraz wektorową roads. Zadanie będzie polegało na znalezieniu obszarów na mapie, które znajdują się w górach (położone powyżej 1600 m n.p.m.) i w pewnym oddaleniu od dróg (min. 500m), ale nie za daleko (max. 1km).

Reklasyfikacja

Informacje na mapach rastrowych zapisane są w każdym pikselu. Najczęściej są to wartości zapisane w postaci liczb całkowitych lub rzeczywistych. W odniesieniu do wartości całkowitych przyjęło się je określać jako klasy. Operacja reklasyfikacji to zamiana jednych wartości innymi. Załóżmy, że naszą mapę zawierającą dane o wysokości terenu chcemy podzielić na trzy podstawowe grupy: obszary położone nisko (<1300 m n.p.m.), obszary przejściowe (1301÷1600) oraz obszary najwyższe (>1601). Taką operację nazywamy reklasyfikacją i w programie GRASS wywołujemy komendą r.reclass. Nazwijmy mapę wyjściową z trzema klasami elevation.strefy. W samym GRASSie możemy ją wywyływac w trybie interaktywnym, w Quantum GIS możemy wykorzystać jedynie tryb z przygotowanym wcześniej plikiem reklasyfikacji. Wyświetl dokumentację tej komendy i spróbuj samodzielnie stworzyć plik reklasyfikacji. Utwórz zwykły plik tekstowy w swojej kartotece o nazwie np. r1.txt. Z powodu błędu w programie (pracujemy na wersji developerskiej...), po wybraniu odpowiedniej kartoteki nasz plik nie będzie wyświetlany w oknie dialogowym, ale wystarczy wpisać jego nazwę w polu Nazwa pliku. Po wyświetleniu mapy wynikowej sprawdź (ikona Informacje o obiekcie) czy na uzyskanej mapie wartości odpowiadają naszym założeniom (rys.12).

Jeśli nie udało Ci się poprawnie stworzyć zawartości pliku, poniżej przedstawiono jedno z rozwiązań.

1000 thru 1300 = 1 nisko
1301 thru 1600 = 2 wyzej
1601 thru 2000 = 3 wysoko
mapa1

Rys.12 Strefy wysokości wyświetlone z paletą pseudokolor.
Poszukiwany obszar - kolor czerwowny.

Konwersja wektor-raster

W trakcie lekcji 7 stworzyliśmy strefę wektorową wokół autostrady. Teraz zrobimy podobną operację, ale wykorzystamy do tego mapę rastrową. Na początek musimy dokonać konwersji i zamienić nasza mapę z drogami na raster. Służy do tego komenda v.to.rast. Ponieważ nie będzie nas interesował rodzaj dróg, wykorzystamy wersję constant nadając wartość (klasę) =1 obszarom dróg. Nazwa mapy rastrowej może być identyczna z mapą wektorową.

Buforowanie

Do operacji buforowania mapy rastrowej wykorzystamy komendę r.buffer. Aby było to lepiej widoczne stworzymy strefy do 500m, 1000m oraz 2000m i nazwijmy je roads.strefy. Po wyświetleniu sprawdź identyfikatory poszczególnych stref.

mapa2

Rys.13 Strefy od dróg wyświetlone z paletą pseudokolor.
Poszukiwany obszar - kolor żółty.

Algebra mapowa

Pozostało nam jedynie połączenie wyników zapisanych na dwóch mapach rastrowych. Wykorzystamy w tym celu operacje algebry mapowej, która umożliwia wykonywanie bardzo wielu operacji arytmetycznych. Jeżeli np. dodajemy do siebie dwie mapy rastrowe, to na mapie wynikowej otrzymamy sumę wartości na odpowiadających sobie pikselach.

Na każdej z dwóch map wynikowych interesujące nas kategorię otrzymały identyfikator równy trzy. Jeżeli pomnożymy teraz jedną mapę przez drugą, to kombinacja tych dwóch kategorii będzie unikalna. Klasa wynikowa (9) może być wynikiem tylko jednej kombinacji: 3x3. Do pomnożenia map przez siebie wykorzystamy komendę r.mapcalculator, a wynik zapiszemy jako wynik9. Dla uzyskanej mapy stwórz odpowiednią paletę kolorów.

mapa3

Rys.14 Pomnożone mapy stref wysokości oraz stref odległości od dróg z paletą 'mapa kolorów'.
Poszukiwany obszar - kolor czerwony.

Jak łatwo zauważyc na rysunku 14, nasz sprytny zabieg pomnożenia przez siebie map nie sprawdza się dla wszystkich klas. Dobrze widać to na drogach. W obszarach najniższych droga ma identyfikator=1, w kolejnych obszarach zaś odpowiednio 2 i 3. Z drugiej zaś strony identyfikator 2 i 3 otrzymały kolejne strefy od dróg w obszarze najniższym. Krótko mówiąc, klasa 3 oznacza zarówno drogę na obszarze najwyższym, jak i drugą strefę odległości od drogi w obszarze najniższym.

Ćwiczenie praktyczne

Zreklasyfikuj mapę końcową w taki sposób, aby uzyskać mapę na której poszukiwany obszary będzie posiadał identyfikator jeden, zaś pozostałe wartość NULL.

Czy potrafisz samodzielnie odszukać i wykorzystać funkcję, która z dwóch map źródłowych stworzy mapę zawierająca unikalną kombinację klas z map źródłowych?