Hej!
Współczynnik korelacji Pearsona... Brzmi strasznie, prawda? Brrr... Na samą myśl włos się jeży.
A tak serio, to będzie szybkie, łatwe i przyjemne! :3
Po pierwsze, jeżeli robiłeś ze mną dwa poprzednie ćwiczenia, to pracuj na tych danych, bo ja właśnie tak zrobię. Zatem do widoku mapy dodam dwie warstwy heksagonalne, z różnymi obliczeniami dla terenu. Pierwszą z nich będzie ta z obliczonym procentowym udziałem budynków w terenie, drugą ta z obliczoną deniwelacją.
Pierwsze, co przychodzi mi na myśl, kiedy widzę dwie warstwy i chcę mieć jedną jest suma. Ale czy to konieczne? No właśnie nie! Jest wygodniejszy sposób, bez wpływania na geometrię a mianowicie: Złączenia. Wchodzimy zatem we właściwości pierwszej warstwy (PS. mało istotne w tym przypadku której) i klikamy zakładkę złączenia. Tam wybieramy zielony plusik u dołu. Ustawiamy tablea: ta druga, pole tabeli: UniqueID, pole złączenia UniqueID. Chodzi nam o wskazanie, które dwie kolumny w obu tabelach są identyczne, by móc je według tego połączyć.
Wybieramy ok. Po tym klikamy ok w oknie właściwości warstwy i zamykamy je. W tabeli atrybutów warstwy którą edytowaliśmy powinny pojawić się rekordy z drugiej. Nie da się jednak ich edytować a to, że są one tutaj jest jedynie tymczasowe. Czas to zmienić!
Klikamy ppm na nazwę warstwy, którą edytujemy cały czas i wybieramy zapisz jako... W okienku które się pojawiło ustawiamy Format: ESRI Shapefile, wskazujemy miejsce w którym ma on zostać zapisany, nadając mu nazwę korelacja_pearsona (Może o tym nie wiesz, ale to ważne - nie nazywaj plików ze spacją w środku, to samo tyczy się ścieżki zapisu). Bez dodatkowych zmian klikamy ok.
"Znowu coś z... Nie ma nowej warstwy :/" Pocieszę Cię, to normalne :) Musisz ją dodać ręcznie do projektu. (Dodaj warstwę wektorową... i szukaj, szukaj :p ) Po dodaniu warstwy wchodzimy w tabelę atrybutów. Pozbądźmy się zbędnych rekordów, tak na prawdę jedyne co nam potrzebne to procentowy udział budynków i deniwelacja. Usuńmy zatem wszystkie inne kolumny. Oto jak wygląda tabela atrybutów po porządkach:
Chyba czas na oprawę graficzną ;) "A korelacja?!" Spokoooojnie, na wszystko przyjdzie czas. Wejdźmy we właściwości warstwy, w zakładkę styl. Tam ustawmy symbol stopniowy, kolumna: ja wybrałam deniwelację, ale to zależy już od Ciebie, liczba klas: 10, tryb: równe przedziały, paleta kolorów: zaszalej!. Na koniec klikamy klasyfikuj.
Natępnie nie klikamy jeszcze ok! Wejdźmy w zakładkę etykiety. Tam Etykietuj tę warstwę z... wybieramy Epsilon, czyli to odwrócone 3. Tam wpisujemy wyrażenie: 'proc: ' || "kolumna, w której jest procent" || '\ndeni: ' || "kolumna, w której jest obliczona deniwelacja"
"A co to za \n ?" Ha ha :) Zaciekawiło Cię to? To enter przed słowem. Dzięki temu wyrażenie zmieści się na heksagonie.
Po tym wybieramy ok. Zanim zamkniemy okno, ustalmy jeszcze położenie etykiet. Wybieramy położenie: odsunięcie od centroidu, centroid: widocznej części poligonu, kwadrant środkowy, przesunięcie X i Y bez zmian (czyli 0). Po tym wybieramy ok.
Ładny efekt, prawda? Teraz czas by zainteresować się tą całą korelacją Pkogośtam. Otwórz tabelę atrybutów warstwy, kliknij prawym przyciskiem na dowolną warstość, wybierz: zaznacz wszystko a następnie ctrl + C.
Jako, że jestem wygodniacka, to skorzystamy teraz z Excela, który policzy wszystko za nas :P. Włączmy zatem ten program, nie zamykając QGISa i kliknijmy na dowolną komórkę - ctrl + V.
Teraz już tylko kroczek dzieli nas od poznania wartości współczynnika korelacji Pearsona. W dowolnej komórce obok wpisz =PEARSON( i zaznacz wartości pierwszej kolumny, czyli tej z deniwelacją.
Następnie dostaw średnik " ; " i zaznacz kolumnę z wartością procentów.
Na koniec dostaw " ) " i kliknij enter. "Aleeee!! Nie wyszło!" No pewnie, że nie :D Excel nie czyta kropek, które tak pięknie wstawił w wartościach QGIS. I co teraz? polecam ctrl + h, a następnie znajdź: . zamień na: , Zamień wszystko
Następnie ok i zamknij. Wartość mojego współczynnika korelacji Pearsona wynosi: -0,205838186
Teraz możemy wrócić do QGISa, bez zamykania Excela.
Stwórzmy wydruk. Najpierw odznacz wszystkie zaznaczania na mapie. Następnie wybierz Projekt--> Nowy wydruk. Nadaj mu nazwę i zacznij jego edycję. Dodaj do niego mapę, legendę, z przedziałami wartości deniwelacji widocznymi na mapie i przede wszystkim wprowadź ręcznie jako tekst wartość deniwelacji, w wybranym przez Ciebie miejscu obok mapy. Mój, gotowy wydruk, po ustawieniach koloru, jaki chciałam, wygląda następująco:
Chyba od tej pory współczynnik korelacji Pearsona nie powinien wpędzać Cię w panikę :) Do zobaczenia w kolejnym poście!
poniedziałek, 20 kwietnia 2015
Deniwelacja
Witaj! :)
Wczoraj wieczorem i znalazłam chwilę, by napisać post. Tym razem tematem naszej pracy będzie... deniwelacja w terenie!
"Deni... ?" Deniwelacja. Nie będę się rozpisywać i powiem to najprościej jak się da - różnica między najniższym i najwyższym punktem wysokościowym w terenie.
ZASTRZEGAM, ŻE PONIŻSZY POST JEST OPARTY NA MOJEJ WIEDZY I MOŻE ZAWIERAĆ NIEWIELKIE BŁĘDY W ODNIESIENIU DO TEGO, CO CHCESZ OSIĄGNĄĆ. (Mój post oparty jest o to, że pierwotna warstwa BĘDZIE docinana)
Od czego zaczynamy? Najpierw zdecydujmy na czym pracujemy. W moim projekcie wykorzystam już wcześniej przygotowany DEM. Zanim jednak zacznę właściwe obliczenia, muszę poświęcić trochę czasu jego obróbce.
Do widoku mapy dodałam interpolację, czyli mój cyfrowy model wysokościowy oraz ramkę obejmującą obszar, który nas interesuje, ona jednak przyda nam się dalej.
Pierwszą znaczącą zmianą DEM będzie przetransponowanie go z warstwy rastrowej do wektorowej. Zrobimy to dość łatwo, wybierając z górnego menu Raster --> Konwersja --> Poligonizuj. Jako plik źródłowy podajemy nasz DEM, w plik wynikowy podajemy lokalizację nowego pliku, który nazwę dem oraz klikamy ok.
(Pojawią się zapewne dwa okienka, które potwierdzamy przyciskiem ok, a pierwotne zamykamy). Warstwa poligonowa utworzona z rastra powinna wyglądać tak:
Jeśli spojrzymy na tę warstwę uważnie zauważymy, że zajmuje ona więcej niż ramka, czyli teren, który nas dotyczy. Aby to zmienić musimy ją przyciąć do ramki. Wektor --> Narzędzia geoprocessingu --> Przytnij. Jako wejściową warstwę wektorową przyjmujemy dem, zaś za maskę przycięcia ramkę. Zapisujemy to w nowym pliku, o nazwie dem_cut. Klikamy ok.
Warstwę dem, DEM oraz ramkę możemy usunąć z widoku mapy. Do projektu dodajemy natomiast warstwę z polami heksagonalnymi.
Teraz już niewiele dzieli nas od końca ;) "Tak szybko?!" No a jak! To QGIS a nie ręczne liczydło (no dobra, czasem bywa powoooooolnie).
Wybieramy z górnego menu Wektor --> Narzędzia zarządzania danymi --> Złącz atrybuty według lokalizacji. W dwa pierwsze okienka wpisujemy nasze dwie warstwy, najpierw heksagony, potem poligon. Zaznaczamy opcję Pobierz podsumowanie przecinających się obiektów, gdzie odznaczamy Średnia, zaś zaznaczamy Min i Max. Zapisujemy to w pliku wyjściowym deni. Wybieramy ok.
Po tym pojawiła się nowa warstwa, która powinna wyglądać jak HEKSAGONY! "Ale... ja mam inną. Dlaczego?" Bo się nie posłuchałeś i dodałeś warstwy w innej kolejności. Zrób to jeszcze raz, uważniej :)
W tabeli atrybutów nowej warstwy są zarówno UniqueID, powierzchnię heksagonów jak i maksymalną i minimalną wysokość.
Teraz musimy tylko policzyć szybko deniwelację. Przyda nam się do tego kalkulator pól.
Jak powyżej, należy stworzyć nowe pole, ja nazwałam je deni. Ustawiamy typ pola na liczby dziesiętne (real), długość na 10, zaś dokładność na 2. Wybieramy Funkcje Pola i wartości, najpierw Maksymalną wysokość, minus, minimalną. klikamy ok. Powstało nowe pole z obliczoną deniwelacją terenu dla każdego heksagonu. Na koniec wchodzimy we właściwości warstwy, wybieramy styl, ustawiamy symbol stopniowy, kolumna: deni, 10 klas, równe przedziały i klikamy klasyfikuj.
Następnie wchodzimy w etykiety, etykietuj tę warstwę z... deni i wybieramy ok. Gotowy projekt powinien wyglądać jak poniżej:
PS. Nie jestem pewna, czy powyższy sposób jest poprawny. Opiera się on jedynie na moim małym doświadczeniu.
Wczoraj wieczorem i znalazłam chwilę, by napisać post. Tym razem tematem naszej pracy będzie... deniwelacja w terenie!
"Deni... ?" Deniwelacja. Nie będę się rozpisywać i powiem to najprościej jak się da - różnica między najniższym i najwyższym punktem wysokościowym w terenie.
ZASTRZEGAM, ŻE PONIŻSZY POST JEST OPARTY NA MOJEJ WIEDZY I MOŻE ZAWIERAĆ NIEWIELKIE BŁĘDY W ODNIESIENIU DO TEGO, CO CHCESZ OSIĄGNĄĆ. (Mój post oparty jest o to, że pierwotna warstwa BĘDZIE docinana)
Od czego zaczynamy? Najpierw zdecydujmy na czym pracujemy. W moim projekcie wykorzystam już wcześniej przygotowany DEM. Zanim jednak zacznę właściwe obliczenia, muszę poświęcić trochę czasu jego obróbce.
Do widoku mapy dodałam interpolację, czyli mój cyfrowy model wysokościowy oraz ramkę obejmującą obszar, który nas interesuje, ona jednak przyda nam się dalej.
Pierwszą znaczącą zmianą DEM będzie przetransponowanie go z warstwy rastrowej do wektorowej. Zrobimy to dość łatwo, wybierając z górnego menu Raster --> Konwersja --> Poligonizuj. Jako plik źródłowy podajemy nasz DEM, w plik wynikowy podajemy lokalizację nowego pliku, który nazwę dem oraz klikamy ok.
(Pojawią się zapewne dwa okienka, które potwierdzamy przyciskiem ok, a pierwotne zamykamy). Warstwa poligonowa utworzona z rastra powinna wyglądać tak:
Jeśli spojrzymy na tę warstwę uważnie zauważymy, że zajmuje ona więcej niż ramka, czyli teren, który nas dotyczy. Aby to zmienić musimy ją przyciąć do ramki. Wektor --> Narzędzia geoprocessingu --> Przytnij. Jako wejściową warstwę wektorową przyjmujemy dem, zaś za maskę przycięcia ramkę. Zapisujemy to w nowym pliku, o nazwie dem_cut. Klikamy ok.
Warstwę dem, DEM oraz ramkę możemy usunąć z widoku mapy. Do projektu dodajemy natomiast warstwę z polami heksagonalnymi.
Teraz już niewiele dzieli nas od końca ;) "Tak szybko?!" No a jak! To QGIS a nie ręczne liczydło (no dobra, czasem bywa powoooooolnie).
Wybieramy z górnego menu Wektor --> Narzędzia zarządzania danymi --> Złącz atrybuty według lokalizacji. W dwa pierwsze okienka wpisujemy nasze dwie warstwy, najpierw heksagony, potem poligon. Zaznaczamy opcję Pobierz podsumowanie przecinających się obiektów, gdzie odznaczamy Średnia, zaś zaznaczamy Min i Max. Zapisujemy to w pliku wyjściowym deni. Wybieramy ok.
Po tym pojawiła się nowa warstwa, która powinna wyglądać jak HEKSAGONY! "Ale... ja mam inną. Dlaczego?" Bo się nie posłuchałeś i dodałeś warstwy w innej kolejności. Zrób to jeszcze raz, uważniej :)
W tabeli atrybutów nowej warstwy są zarówno UniqueID, powierzchnię heksagonów jak i maksymalną i minimalną wysokość.
Teraz musimy tylko policzyć szybko deniwelację. Przyda nam się do tego kalkulator pól.
Jak powyżej, należy stworzyć nowe pole, ja nazwałam je deni. Ustawiamy typ pola na liczby dziesiętne (real), długość na 10, zaś dokładność na 2. Wybieramy Funkcje Pola i wartości, najpierw Maksymalną wysokość, minus, minimalną. klikamy ok. Powstało nowe pole z obliczoną deniwelacją terenu dla każdego heksagonu. Na koniec wchodzimy we właściwości warstwy, wybieramy styl, ustawiamy symbol stopniowy, kolumna: deni, 10 klas, równe przedziały i klikamy klasyfikuj.
Następnie wchodzimy w etykiety, etykietuj tę warstwę z... deni i wybieramy ok. Gotowy projekt powinien wyglądać jak poniżej:
PS. Nie jestem pewna, czy powyższy sposób jest poprawny. Opiera się on jedynie na moim małym doświadczeniu.
niedziela, 19 kwietnia 2015
Procenty w terenie...
Witaj!
Nie, nie chodzi mi o te przyjemne procenty w plenerze :P Dzisiaj chcę Ci pomóc przejść bez problemów przez liczenie udziału procentowego obiektów na danym terenie (po tym przyjdzie czas na przyjemne procenty). Po pierwsze ustalmy, na czym pracujemy. Dziś będziemy korzystać z wolnego oprogramowania geoinformacyjnego, które zna każdy, choćby najmniej zainteresowany tą dziedziną nauki a mianowicie - z QGISa.
Ok, no to zaczynamy! Po pierwsze - musisz mieć wyznaczony obszar, który Cię interesuje. Następnie należy podzielić ten teren na mniejsze części, używając siatki heksagonalnej. "Czeeeego? :/ " No tak... Musisz mieć siatkę złożoną z heksagonów. To najbardziej optymalny kształt segmentów siatki do analiz przestrzennych. Ok, więc sprecyzujmy. Do projektu załączamy siatkę heksagonalną o wybranych przez Ciebie parametrach oraz warstwa wektorowa z obiektami, których udział w terenie chcesz poznać. U mnie będą to budynki.
Pierwszym działaniem na warstwach będzie obliczenie powierzchni budynków. Do tego użyję wbudowanego narzędzia, a mianowicie kalkulatora pól. Znajduje się on na jednym z toolbarów w górnej części programu, zaraz obok tabeli atrybutów.
W kalkulatorze tworzę nowe pole, nazywam je pow (od powierzchni) i ustawiam typ pola wejściowego na liczby dziesiętne (real), długość na 10 a dokładność na 2. Następnie z bocznego paska wybieram kolejno: funkcje Geometrii ---> $area i wybieram przycisk ok. W tabeli atrybutów utworzy się nowe pole, w którym zapisane będą obliczone powierzchnie obiektów.
PS. Rada do całego projektu. Jeżeli po wykonaniu jakiejś operacji okienko zostanie nadal otwarte, to zamiast klikać w kółko ok (co będzie nadpisywać) wybieramy zamknij.
Następnie chcemy przypisać dany obiekt do wybranego heksagonu. "Ale ręcznieeee?!" Nie, nie, spokojnie - na wszystko jest wygodny sposób :) Musimy skorzystać z narzędzia, które nie jest dane automatycznie w programie. Wybieramy z górnego paska Wtyczki --> Zarządzaj wtyczkami --> Wszystkie --> realcentroid --> Zainstaluj wtyczkę. Po wykonaniu się instalacji zamykamy okno, a w górnych paskach narzędzi powinien pojawić się nowy skrót, do tejże właśnie wtyczki. Włączamy ją i wybieramy warstwę buildings, zapisujemy ją w wybranym miejscu w komputerze i zaznaczamy Add to map canvas a następnie klikamy ok.
"Ale co to jest? Po co my to robimy?" Tak myślałam... Stworzyliśmy punkty, które są odzwierciedleniem każdego budynku. Żaden z nich nie znajduje się na kilku heksagonach, zatem to idealny punkt wyjścia do przypisania budynków do heksagonów.
No więc do dzieła! Będziemy potrzebowali kolejnej wtyczki, jej nazwa to Processing. Instalujemy ją podobnie jak tę wcześniejszą. Tym razem nie pojawiła się nowa ikonka? Ale pojawiła się nowa karta w górnym pasku, nazywa się Geoprocessing. Wybieramy kolejno Geoprocessing --> Narzędzia. Z prawej strony powinno pojawić się nowe okienko. Musimy w nim ustawić zaawansowany interfejs, W dolnej części okienka wybieramy Advanced interface. Następnie w pasku wyszukiwania (w górnej części okienka) wpisujemy Intersection. Wybieramy to narzędzie i wpisujemy kolejno, warstwa wejściowa: warstwa punktowa, warstwa do iloczynu: heksagony. Zapisujemy to do pliku, który nazywamy inter. Naciskamy przycisk Run.
Utworzyła się warstwa, która do punktów ma przypisane wartości heksagonów na których się znajdują. Teraz czas połączyć te punkty z budynkami, by nadać im UniqueID danego heksagonu, przypisując je do siebie.
W okienku processingu wpisujemy w wyszukiwarce join attributes by location (lub w starszej wersji wtyczki join by location) i klikamy dwukrotnie na narzędzie. W warstwa wektorowa wybieramy budynki, zaś w złącz z warstwą wektorową wybieramy inter (w widoku mapy zapisuje się zazwyczaj jako "iloczyn"). Zaznaczamy opcję przecina się (intersects). Przewijamy w dół i zapisujemy to w pliku join. Klikamy Run.
Pojawiła się nowa warstwa, wyglądająca całkiem jak budynki, jednak w jej tabeli atrybutów każdy obiekt przypisany jest do wybranego heksagonu. Zróbmy teraz małe porządki w tabeli atrybutów i usuńmy niepotrzebne rekordy, zostawiając jedynie kolumny: pow, uniqueID i hexArea.
Zapiszmy po tym edycję, koniecznie!
Mamy teraz wiele obiektów z tym samym UniqueID. Każdy z nich ma swoją powierzchnię, jednak od tego momentu chcemy ją zsumować dla każdego heksagonu. Jak to zrobimy? Otóż odpowiedź jest banalnie prosta - zagregujemy tę warstwę.
Wektor --> Narzędzia geoprocessingu --> Agreguj
Tam wybieramy warstwę inter, która w widoku mapy zapisana jest jako warstwa wyjściowa. Jako pole agregacji wybieramy UniqueID. zapisujemy to w pliku bud_ager. Klikamy ok.
Jeśli zajrzymy teraz do tabeli atrybutów nowopowstałej warstwy, to zauważymy, że obiektów jest tyle, na ilu heksagonach znajdowały się budynki. "Ale z tymi powierzchniami coś jest nie tak..." Dobre spostrzeżenie! Otóż, powierzchnia nie przeliczyła się na nowo. Trzeba to zrobić ponownie, dla nowych, większych multiobiektów. Wchodzimy zatem w kalkulator pól tej warstwy i wybieramy aktualizuj istniejące pole, tam zaznaczamy pow. Następnie kolejno wybieramy z okienka Funkcje:
Geometrii --> $area i klikamy ok.
Po wykonaniu tego tabela atrybutów zmieniła się, rekordy zostały zaktualizowane. W tym momencie koniecznie zapisz edycję tej warstwy :)
Czyli, teraz mamy warstwę, w której budynki są pogrupowane w nowe obiekty, w zależności, do którego heksagonu należą, a w tabeli atrybutów jest to wyraźnie zapisane, prawda? Możemy przejść do połączenia tabeli budynków z warstwą heksagonów, by miały one przypisaną powierzchnię budynków, które się znajdują na każdym z nich.
"Będziemy łączyć warstwy?" No cóż, moglibyśmy, ale tak na prawdę interesuje nas tylko tabela warstwy z budynkami, nie jej geometria. "Hmmm... Czyli połączymy tabele?" Precyzując, nie połączymy ich, a dołączymy jedną do innej warstwy. Aby to wykonać musimy kliknąc ppm na nazwę warstwy z heksagonami w okienku z lewej strony, by wybrać właściwości. Tam wybieramy zakładkę złączenia, klikamy zielony plus i wyskakuje nam nowe okienko. W nim wybieramy tabela: bud_agreg, pole tabeli i pole złączenia UniqueID. Następnie wybieramy ok.
Po tym działaniu, w tabeli atrybutów warstwy z siatką pojawiły się rekordy z warstwy budynków po obróbce. Nie jest to jednak trwałe połączenie. Aby je utrwalić musimy zapisać obecny stan warstwy heksagonów w nowym pliku. Zrobimy to klikając ppm na nazwie warstwy, wybierając tam zapisz jako... i ustawiając format na ESRI shapefile, w zapisz jako wyierając lokalizację pliku końcowego i bez innych zmian wybierając ok.
"Czyli to koniec?" Cierpliwości, to już prawie koniec. Najpierw wyłączmy z wyświetlania wszystkie warstwy oprócz ostatnio utworzonej. Teraz wejdźmy w tabelę atrybutów warstwy, usuńmy zbędny rekord (który jest powieleniem wartości powierzchni heksagonów) i otwórzmy kalkulator pól. Tam utwórzmy nowe pole, nazywając je proc, typ liczby dziesiętne (real) (10; 2). Najpierw otwieramy nawias. Z funkcji wybieramy: Pola i wartości --> pole z powierzchnią obiektów --> / --> pole z powierzchnią heksagonów --> zamykamy nawias --> *100 Następnie klikamy ok. W tabeli pojawiły się wartości NULL. Musimy je zamienić ręcznie na 0. Zapisujemy edycję.
Na koniec wyświetlmy, jaki udział procentowy mają obiekty w danych heksagonach. Wchodzimy we właściwości warstwy, najpierw wybierając zakładkę styl. Tam ustalamy na samej górze symbol stopniowy, wybieramy gradient którego chcemy użyć, ustawiamy dobraną przez nas liczbę klas i dokładność, ja ustawię liczbę 15 i dokładność 2. Na końcu naciskamy klasyfikuj.
Na koniec, zanim wybierzemy ok, wejdźmy jeszcze w zakładkę etykiety. Tam wybierzmy etykietuj tę warstwę z... proc. Teraz naciśnijmy ok.
Efekt końcowy wygląda jak poniżej :) To już koniec, możemy stworzyć w miarę chęci wydruk, ale o tym w innym poście.
Nie, nie chodzi mi o te przyjemne procenty w plenerze :P Dzisiaj chcę Ci pomóc przejść bez problemów przez liczenie udziału procentowego obiektów na danym terenie (po tym przyjdzie czas na przyjemne procenty). Po pierwsze ustalmy, na czym pracujemy. Dziś będziemy korzystać z wolnego oprogramowania geoinformacyjnego, które zna każdy, choćby najmniej zainteresowany tą dziedziną nauki a mianowicie - z QGISa.
Ok, no to zaczynamy! Po pierwsze - musisz mieć wyznaczony obszar, który Cię interesuje. Następnie należy podzielić ten teren na mniejsze części, używając siatki heksagonalnej. "Czeeeego? :/ " No tak... Musisz mieć siatkę złożoną z heksagonów. To najbardziej optymalny kształt segmentów siatki do analiz przestrzennych. Ok, więc sprecyzujmy. Do projektu załączamy siatkę heksagonalną o wybranych przez Ciebie parametrach oraz warstwa wektorowa z obiektami, których udział w terenie chcesz poznać. U mnie będą to budynki.
Pierwszym działaniem na warstwach będzie obliczenie powierzchni budynków. Do tego użyję wbudowanego narzędzia, a mianowicie kalkulatora pól. Znajduje się on na jednym z toolbarów w górnej części programu, zaraz obok tabeli atrybutów.
W kalkulatorze tworzę nowe pole, nazywam je pow (od powierzchni) i ustawiam typ pola wejściowego na liczby dziesiętne (real), długość na 10 a dokładność na 2. Następnie z bocznego paska wybieram kolejno: funkcje Geometrii ---> $area i wybieram przycisk ok. W tabeli atrybutów utworzy się nowe pole, w którym zapisane będą obliczone powierzchnie obiektów.
PS. Rada do całego projektu. Jeżeli po wykonaniu jakiejś operacji okienko zostanie nadal otwarte, to zamiast klikać w kółko ok (co będzie nadpisywać) wybieramy zamknij.
Następnie chcemy przypisać dany obiekt do wybranego heksagonu. "Ale ręcznieeee?!" Nie, nie, spokojnie - na wszystko jest wygodny sposób :) Musimy skorzystać z narzędzia, które nie jest dane automatycznie w programie. Wybieramy z górnego paska Wtyczki --> Zarządzaj wtyczkami --> Wszystkie --> realcentroid --> Zainstaluj wtyczkę. Po wykonaniu się instalacji zamykamy okno, a w górnych paskach narzędzi powinien pojawić się nowy skrót, do tejże właśnie wtyczki. Włączamy ją i wybieramy warstwę buildings, zapisujemy ją w wybranym miejscu w komputerze i zaznaczamy Add to map canvas a następnie klikamy ok.
"Ale co to jest? Po co my to robimy?" Tak myślałam... Stworzyliśmy punkty, które są odzwierciedleniem każdego budynku. Żaden z nich nie znajduje się na kilku heksagonach, zatem to idealny punkt wyjścia do przypisania budynków do heksagonów.
No więc do dzieła! Będziemy potrzebowali kolejnej wtyczki, jej nazwa to Processing. Instalujemy ją podobnie jak tę wcześniejszą. Tym razem nie pojawiła się nowa ikonka? Ale pojawiła się nowa karta w górnym pasku, nazywa się Geoprocessing. Wybieramy kolejno Geoprocessing --> Narzędzia. Z prawej strony powinno pojawić się nowe okienko. Musimy w nim ustawić zaawansowany interfejs, W dolnej części okienka wybieramy Advanced interface. Następnie w pasku wyszukiwania (w górnej części okienka) wpisujemy Intersection. Wybieramy to narzędzie i wpisujemy kolejno, warstwa wejściowa: warstwa punktowa, warstwa do iloczynu: heksagony. Zapisujemy to do pliku, który nazywamy inter. Naciskamy przycisk Run.
Utworzyła się warstwa, która do punktów ma przypisane wartości heksagonów na których się znajdują. Teraz czas połączyć te punkty z budynkami, by nadać im UniqueID danego heksagonu, przypisując je do siebie.
W okienku processingu wpisujemy w wyszukiwarce join attributes by location (lub w starszej wersji wtyczki join by location) i klikamy dwukrotnie na narzędzie. W warstwa wektorowa wybieramy budynki, zaś w złącz z warstwą wektorową wybieramy inter (w widoku mapy zapisuje się zazwyczaj jako "iloczyn"). Zaznaczamy opcję przecina się (intersects). Przewijamy w dół i zapisujemy to w pliku join. Klikamy Run.
Pojawiła się nowa warstwa, wyglądająca całkiem jak budynki, jednak w jej tabeli atrybutów każdy obiekt przypisany jest do wybranego heksagonu. Zróbmy teraz małe porządki w tabeli atrybutów i usuńmy niepotrzebne rekordy, zostawiając jedynie kolumny: pow, uniqueID i hexArea.

Mamy teraz wiele obiektów z tym samym UniqueID. Każdy z nich ma swoją powierzchnię, jednak od tego momentu chcemy ją zsumować dla każdego heksagonu. Jak to zrobimy? Otóż odpowiedź jest banalnie prosta - zagregujemy tę warstwę.
Wektor --> Narzędzia geoprocessingu --> Agreguj
Tam wybieramy warstwę inter, która w widoku mapy zapisana jest jako warstwa wyjściowa. Jako pole agregacji wybieramy UniqueID. zapisujemy to w pliku bud_ager. Klikamy ok.
Jeśli zajrzymy teraz do tabeli atrybutów nowopowstałej warstwy, to zauważymy, że obiektów jest tyle, na ilu heksagonach znajdowały się budynki. "Ale z tymi powierzchniami coś jest nie tak..." Dobre spostrzeżenie! Otóż, powierzchnia nie przeliczyła się na nowo. Trzeba to zrobić ponownie, dla nowych, większych multiobiektów. Wchodzimy zatem w kalkulator pól tej warstwy i wybieramy aktualizuj istniejące pole, tam zaznaczamy pow. Następnie kolejno wybieramy z okienka Funkcje:
Geometrii --> $area i klikamy ok.
Po wykonaniu tego tabela atrybutów zmieniła się, rekordy zostały zaktualizowane. W tym momencie koniecznie zapisz edycję tej warstwy :)
Czyli, teraz mamy warstwę, w której budynki są pogrupowane w nowe obiekty, w zależności, do którego heksagonu należą, a w tabeli atrybutów jest to wyraźnie zapisane, prawda? Możemy przejść do połączenia tabeli budynków z warstwą heksagonów, by miały one przypisaną powierzchnię budynków, które się znajdują na każdym z nich.
"Będziemy łączyć warstwy?" No cóż, moglibyśmy, ale tak na prawdę interesuje nas tylko tabela warstwy z budynkami, nie jej geometria. "Hmmm... Czyli połączymy tabele?" Precyzując, nie połączymy ich, a dołączymy jedną do innej warstwy. Aby to wykonać musimy kliknąc ppm na nazwę warstwy z heksagonami w okienku z lewej strony, by wybrać właściwości. Tam wybieramy zakładkę złączenia, klikamy zielony plus i wyskakuje nam nowe okienko. W nim wybieramy tabela: bud_agreg, pole tabeli i pole złączenia UniqueID. Następnie wybieramy ok.
"Czyli to koniec?" Cierpliwości, to już prawie koniec. Najpierw wyłączmy z wyświetlania wszystkie warstwy oprócz ostatnio utworzonej. Teraz wejdźmy w tabelę atrybutów warstwy, usuńmy zbędny rekord (który jest powieleniem wartości powierzchni heksagonów) i otwórzmy kalkulator pól. Tam utwórzmy nowe pole, nazywając je proc, typ liczby dziesiętne (real) (10; 2). Najpierw otwieramy nawias. Z funkcji wybieramy: Pola i wartości --> pole z powierzchnią obiektów --> / --> pole z powierzchnią heksagonów --> zamykamy nawias --> *100 Następnie klikamy ok. W tabeli pojawiły się wartości NULL. Musimy je zamienić ręcznie na 0. Zapisujemy edycję.
Na koniec wyświetlmy, jaki udział procentowy mają obiekty w danych heksagonach. Wchodzimy we właściwości warstwy, najpierw wybierając zakładkę styl. Tam ustalamy na samej górze symbol stopniowy, wybieramy gradient którego chcemy użyć, ustawiamy dobraną przez nas liczbę klas i dokładność, ja ustawię liczbę 15 i dokładność 2. Na końcu naciskamy klasyfikuj.
Na koniec, zanim wybierzemy ok, wejdźmy jeszcze w zakładkę etykiety. Tam wybierzmy etykietuj tę warstwę z... proc. Teraz naciśnijmy ok.
Efekt końcowy wygląda jak poniżej :) To już koniec, możemy stworzyć w miarę chęci wydruk, ale o tym w innym poście.
Subskrybuj:
Posty (Atom)