Adam Inglot
Adiunkt w Katedrze Geodezji
Wydział Inżynierii Lądowej i Środowiska, Politechnika Gdańska
adam.inglot@pg.edu.pl
2022-08-23, aktualizacja 2023-10-23
© ainglot.pl, 2022. Udostępnianie i wykorzystanie zgodnie z licencją Creative Commons Attribution 4.0 International license (CC BY 4.0).Symbolizacja, nadawanie obiektom przestrzennym graficznej reprezentacji. Działanie to wykonywane jest wielokrotnie podczas pracy na danych przestrzennych, nie tylko do zwiększenia estetyki lecz również w celach przeglądu zbioru danych. Nadawanie obiektowi przestrzennemu symbolu kartograficznego jest jednym z elementów procesu tworzenia map topograficznych czy cyfrowych opracowań kartograficznych. Saliszczew [1] o znaku kartograficznym pisał tak:
"Znak kartograficzny to język mapy. Przekazują one jej treść, to znaczy zbiór zawartych na mapie wiadomości o rzeczywistości."
Dane które zostały wykorzystane w ćwiczeniach zostały pobrane z baz danych Głównego Urzędu Statystycznego GUS - Powierzchnia i ludność w przekroju terytorialnym w 2018.
Przygotowanie danych polega na dopasowaniu do odpowiedniej formy, tj. brak pustych rekordów, pierwszy rekord powinien zawierać nazwy kolumn. Dane które są pobrane z GUS mają inną formę, niedostępną wprost do zaimplementowania w ArcGIS Pro tak żeby można było korzystać w oprogramowainu GIS.
dane GUS
i powiaty
. Pobierz dane, rozpakuj i umieść w projekcie.powiatyPomorskie
do projektu.Catalog
rozwiń plik excela DaneGUS.xlsx
i przenieś dane do projektu.dane$
, PPM na i wybierz Open
.Dane powinny wczytać się tak jak na rysunku poniżej, najważniejsze dla nas kolumny to: ID_Pow
, Ludnosc
i wynagrodze
.
Przejdziemy teraz do połączenia danych nieprzestrzennych z danymi przestrzennymi - wykonamy złączenia tabel za pomocą wspólnego pola - kolumny.
powiatyPomorskie
. PPM na warstwie powiatyPomorskie
, następnie Joins and Relates/Add Join
.OK
.Dane po przyłączeniu znajdują się w tabeli atrybutowej warstwy powiatyPomorskie
.
W tej części zapoznamy się z łączeniem danych w QGIS. Przeprowadzimy działanie na danych dla powiatów (wszystkie powiaty) województwa dolnośląskiego. Z GUS dla przykładu pobrałem dane dotyczące ludności oraz średnich zarobków na rok 2020.
dane dolnoslaskie
. Dodaj dane do projektu.Złączenie
, na samym dole okna wybierz czerwony "+" i zaznacz odpowiednie pola, tak jak na rysunku. Zatwierdź OK.Contents
wskaż LPM warstwę Powiaty
. W głównym menu wybierz Appearance
, następnie rozwiń Symbology
, wybierz Unique Values
.Symbology
w polu Field 1
wybierz JPT_NAZWA_
.Contents
mamy podany każdy z 20 powiatów dla województwa pomorskiego. Paleta kolorów ma ograniczoną liczbę symboli, niektóre mogą się powtarzać, można zmienić ręcznie. W poniższym przykładzie powiat pucki i lęborski maja ten sam symbol. Dla powielonych symboli zmień ręcznie kolor wypełnienia.Contents
wybierz powiat który ma powielony symbol i wskaż LPM na symbol.Symbology
, następnie Properties
rozwiń paletę kolorów i wybierz unikalny kolor.Contents
warstwę Powiaty
.Symbology
, w polu Field 1
wybierz WERSJA_OD
.W ArcGIS mamy dostępnych 7 metod podziału klasowego. Metoda Natural Breaks (Jenks) - polega na iteracyjnym przeprowadzeniu podziału klasowego tak aby wariancje w klasach były najbardziej zbliżone. Inaczej opisując, przedziały między klasami są tak dopasowane aby odchyłki pomiędzy wartościami w danej klasie, a środkiem klasy były jak najmniejsze, przy jednoczesnym warunku jak największej różnicy pomiędzy środkami klas [2, 3]. Jest to metoda często stosowana w wizualizacji kartograficznej metodą kartogramów.
Quantile - jest to metoda podziału klasowego biorąca pod uwagę liczbę obserwacji. W przypadku tej metody, gdy liczba obserwacji nie dzieli się bez reszty przez liczbę klas, liczba obserwacji w przedziałach zliczana jest kumulacyjnie do uzyskania całkowitej liczby obserwacji.
Equal Interval - metoda ta polega na wyznaczeniu równych klas o długości C, dzieląc zakres na liczbę klas. W tej metodzie często dochodzić do sytuacji w której klasa jest pusta.
$$C = \frac{z_n - z_1}{k}$$
Defined Interval - użytkownik sam definiuje rozpiętość przedziałów. Klasy są obliczane względem podanej wartości.
Manual Interval - użytkownik sam definiuje przedziały klasowe.
Geometric Interval - rozpiętość klas rośnie w mniejszym tempie niż w ciągu arytmetycznym. $$C = 10^\frac{|\log z_n| + |\log z_1|}{k}$$
Standard Deviation - przedziały klasowe tworzone są z równymi zakresami wartości, które stanowią część odchylenia standardowego.
Natural Breaks (Jenks)
.Ludnosc
z użyciem metody Natural Breaks (Jenks)
.Ludnosc
z użyciem metody Equal Interval
.Symbolizacja dwóch parametrów jednocześnie może być wykonana za pomocą Bivariate colors
. Wskazujemy dwa pola numeryczne których wartości mają większą różnorodność niż Grid Size
, kolor jest dopasowywany względem osiągniętej klasy dla obu pól równocześnie.
Unclassed Colors
, Graduated Symbols
, Proportional Symbols
i Dot Density
.Single Symbol
. Zmień kolor granicy obiektu na czarny i grubość 1 pt.Properties
wybierz Layers
zmień Solid fill
na Hatched fill
.Pattern
zmień Angle
i Separation
zgodnie z rysunkiem.Powiaty
.Dodajmy teraz warstwę podziału administracyjnego dla miast Gdańsk. Warstwa znajduje się w danych BDOT10k pobranych podczas ćwiczenia 1 - 'Wprowadzenie' - PL.PZGiK.336.2261__OT_ADMS_A
. Jak dodać te dane? Oczywiście, można skopiować w oknach katalogu Windows, jednak wiąże się to z powielaniem danych na dysku. Drugi sposób to jest podpięcie już istniejącego folderu w oknie Catalog
.
Catalog
, kliknij PPM na Folders
i wybierz Add Folder Connection
.danePG
.danePG
widoczne jest w oknie Catalog
.Contents
przejdziesz do właściwości warstwy i w General
zmień nazwę na ADJA_A
. (Dane z Geoportalu powiatu Gdańsk).Color Properties \.
.Transparency
wprowadź 50%. Zatwierdź OK
.Zastosowanie parametru transparentności dla symbolu obiektu poligonowego (a nie dla całej warstwy które można ustawić w menu głównym), pozwala na wyświetlenie obiektów nakładających się w warstwie.
Warstwy
.Styl
. Następnie z rozwijalnej listy wybierz Wartości unikalne
.Wartości
wybierz JPT_NAZWA_
, następnie dodaj wszystkie wartości poprzez przycisk Klasyfikuj
i zatwierdź OK
.Symbol stopniowy
.Scalone obiekty
.Dopełnienie poligonów
.Zastanów się, dlaczego na rysunku powyżej znajduje się wypełniony jeden obiekt?
2.5 D
i wprowadź dane, może być konieczne przemnożenie przez 0.1 wartości z tabel.Powiaty
oraz wskaż ją w Contents
.Wskazanie warstwy - część narzędzi dostępnych w menu głównym lub w oknach dodatkowych odnosi się do wskazanej, podświetlonej warstwy w Contents
. Tak, jak w tym przykładzie gdzie chcemy wyświetlić etykiety dla warstwy powiaty
, należy ją wskazać a następnie przejść do menu głównego.
Labeling
w Label Class
w Field
wybierz Nazwa
i włącz przycisk Label
pierwszy z lewej strony.Powiat
. W menu głównym obok pola Field
wciśnij przycisk Expression
.Zmiana atrybutu przypisanego do obiektu przestrzennego może nastąpić poprzez zmianę w tabeli atrybutowej - jest to najczęściej wybierana forma. W tym przypadku chcemy usunąć stałą część tekstu z atrybutów i można to wykonać z zastosowaniem własnej funkcji w Expression
. Budowanie własnej funkcji zaczynamy od def
, następnie podajemy nazwę, ArcGIS podpowiada FindLabel
- możemy ją zostawić. Do zdefiniowanej funkcji wprowadzamy parametry w okrągłym nawiasie, w tym przypadku będzie to Powiaty.JPT_NAZWA_
, linia kończy się dwukropkiem.
W następnej linii przypisujemy do zmiennej Nazwa
wartość atrybutów. Kolejnym krokiem jest wybranie tej części tekstu który nas interesuje. W każdym atrybucie powiela się część - powiat
. W Python tekst jest to ciąg znaków których pozycje liczymy od 0 do ostatniego znaku lub od końca, czyli od -1 do pierwszego znaku. Weźmy dla przykładu powiat kartuski
. Tekst powiat + spacja kończy się na 6 pozycji, to znaczy że interesująca nas część dla wszystkich atrybutów będzie zaczynała się od litery na 7 pozycji. Z tego wynika zapis w 3 linii Nazwa = Nazwa[7:]
. Ostatnia linia zwraca wartość wyselekcjonowanej części nazwy.
Label Class
zmień Language
na Python
. Następnie zaznacz Advanced
i zmień Expression
zgodnie z rysunkiem poniżej.Field
wybierz Shape Area
. Wyświetlane wartości są w stopniach, należy zmienić na ㎢. Korzystając z zdobytej wiedzy przedstaw dane w odpowiednim systemie współrzędnych.Powiat
następnie Data/Export Features
, uzupełnij nazwę nowego pliku .Environments
. Następnie wybierz odpowiedni system współrzędnych.Posługując się zaawansowanymi ustawieniami dla etykiet zmienimy sposób wyświetlania liczby. Domyślnie wyświetlana jest pełna liczba - część całkowita i część dziesiętna. Chcąc przedstawić powierzchnię w ㎢ z dokładnością do 2 miejsc po przecinku należy wykorzystać funkcję round
dostępną w oknie Expression
.
Expression
w Label Class
.Round
.Funkcja round
jest dwuargumentowa, oznacza to że należy wprowadzić dwa parametry, w tym przypadku liczbowe. Posłużmy się przykładem: round(123.45678, 3)
, w tym przykładzie chcemy zaokrąglić liczbę 123.45678
do trzech miejsc po przecinku zgodnie z zasadami zaokrąglania. Czwarta liczba na prawo od separatora '.'
to 7
, co oznacza że zaokrąglamy w górę. Wynikiem działania funkcji round
będzie liczba 123.457
. Więcej przykładów:
Expression
poniższe wyrażenie Round($feature.Shape_Area/1000000, 2)
zgodnie z rysunkiem poniżej. $feature.Shape_Area
nie wpisujemy ręcznie a wybieramy pole Shape_Area
z okna Fields
.Ponownie wykorzystamy budowanie własnej funkcji w Expression
do łączenia atrybutów w jedną etykietę. Początek już znamy, musimy rozpocząć pierwszą linię od def
a następnie nazwę funkcji. Niech funkcja przyjmie nazwę dualLabel
. W tym przypadku musimy wprowadzić do funkcji dwa argumenty: powierzchnia obiektu Powiaty.Shape_Area
oraz nazwa przypisana do obiektu Powiaty.JPT_NAZWA_
. Pierwszą linię kończymy dwukropkiem.
Dwie następne linie są identyczne jak w przypadku modyfikacji nazwy powiatu:
Teraz zajmijmy się dodaniem do etykiety informacji o powierzchni. Przypiszmy do zmiennej Area
powierzchnię powiatu Powiaty.Shape_Area
a w kolejnej linii zaokrąglimy wartość powierzchni. Przy wykorzystaniu zmiennych w Expression
należy konwertować zmienne do postaci liczbowej. Co to znaczy? Zmienna Area
jest typu string
- zapisana w formie tekstu, żeby korzystać z funkcji przypisanych do liczb należy wykonać konwersje. Powierzchnie chcemy zapisać w formie liczby zmiennoprzecinkowej, wybierzmy metodę konwersji float()
i wykorzystajmy już poznaną metodę zaokrąglania liczb.
Ostatnim etapem jest łączenie nazwy z powierzchnią powiatu. W zmiennej Join
połącz zmienną Nazwa
i zmienną Area
, jednak połączenie tych zmiennych wymaga konwersji liczby na zmienną typu string
za pomocą metody str()
. Dodatkowo pomiędzy zmiennymi umieścimy znak przejścia do nowej linii - \n
. Ostatnia linia ma zwracać wartość z funkcji, czyli zmienną Join
.
Expression
zgodnie z rys. 68, Efekt widoczny na rysunku 69.DolnoslaskieGUS
.Etykiety
.
Etykiety
, LPM na epsilon w prawym górnym rogu okna.Wyrażenie
rozwiń metody tekstu teks
.Do zmiany etykiety w jednej linii na etykietę dwuliniową wykorzystamy dostępną funkcję w QGIS - wordwrap
która zawija tekst. Podajemy dwa argumenty, tekst do podziału oraz liczbę po ilu znakach ma być tekst zawinięty, przełamany do drugiej linii.
wordwrap
, użyj ją do nazw powiatu.substr
, użyj ją do nazw powiatu. Zwróć uwagę na podgląd w lewym dolnym rogu.Korzystając z dostępnych funkcji w QGIS wykonamy podobne łączenie nazw powiatów z powierzchnią powiatu. Wykorzystaj funkcję substr
, to_string
i round
. Metoda substr
zwraca część ciągu tekstowego, podobne zastosowanie jak w ArcGIS użyliśmy funkcji python do ograniczenia tekstu - Nazwa[7:]
. Pozostałe funkcje już były omówione.
Używane skróty:
[1] Konstantin A Saliszczew. Kartografia ogólna. Wydawnictwo Naukowe PWN, 2003.
[2] P. Mac Carron, K. Kaski, R. Dunbar. Calling Dunbar’s numbers. Social Networks, 47:151–155, oct 2016.
[3] Jian Chen, Shengtian Yang, Hongwei Li, Bin Zhang, Junrong Lv. Research on geographical environment unit division based on the method of natural breaks (Jenks). 40(4W3):47–50, 2013.
Autor: Adam Inglot, mail: adam.inglot@pg.edu.pl