Archiwum tagów: Quantum GIS

lis
17
2011

Dynamiczne łączenie tabel w Quantum GIS

Quantum GIS od wersji 1.7 został wyposażony w bardzo przydatną funkcję – dynamiczne łączenie wczytanych tabel za pomocą pól złączenia posiadających unikalne wartości. Dzięki niej możliwe jest połączenie tabel atrybutów dwóch lub więcej warstw (lub tabel nieprzestrzennych wczytanych do QGIS) bez konieczności tworzenia nowej warstwy.

Aby połączyć dwie tabele należy wejść we właściwości warstwy docelowej (tj. warstwy do której będą dołączane pola z innej tabeli) i przejść na zakładkę ‚Złączenia’. Dodajemy nowe połączenie przyciskiem ‚+’. W nowym oknie wybieramy warstwę (lub tabelę), z którą chcemy połączyć warstwę docelową oraz pola złączenia.

Przykład wykorzystania:

Załóżmy, że mamy jedną warstwę Shapefile z działkami ewidencyjnymi (w tabeli atrybutów znajdują się: obwód, powierzchnia i numery działek) oraz dwie tabele nieprzestrzenne w formacie CSV – pierwsza zawiera informacje o tym kto jest właścicielem działki o danym numerze (numer działki i nazwa właściciela), druga z adresami zamieszkania każdego z właścicieli (nazwa właściciela i jego adres).

Docelowo chcemy połączyć wszystkie te informacje, tak aby po kliknięcie na działkę wyświetliły się informacje o właścicielu.  Najpierw połączymy informacje z tabel ‚wlasciciele’ i ‚adresy’. Wchodzimy we właściwości tabeli ‚wlasciciele’ i przechodzimy na zakładkę złączenia. Klikamy + i ustawiamy opcje jak na poniższym obrazie i wybieramy dwukrotnie ‚OK’:

 Teraz w analogiczny sposób łączymy tabelę warstwy ‚działki’ z tabelą ‚wlasciciele’:

W efekcie w tabeli atrybutów warstwy ‚dzialki’ znajdują się wszystkie informacje jakie są nam potrzebne. Można je również wykorzystać do etykietowania warstwy:

lis
06
2011

ShapefileSplitter

Nazwa: ShapefileSplitter
Autor: Maxim Dubinin
Wersja: 0.1
Repozytorium: GIS-Lab Repository

Wtyczka ShapefileSplitter pozwala na wydzielenie z jednej warstwy wektorowej wielu warstw na podstawie wartości z wybranego pola w tabeli atrybutów. Mając np. mapę gmin dla Polski można na jej podstawie stworzyć oddzielne pliki województw zawierające gminy. Wtyczka jest przydatna jeśli mamy duże warstwy, ale często pracujemy tylko na wydzielonych jej fragmentach, np. w podziale na województwa. Analizy oraz wyświetlanie warstw w QGIS są szybsze jeśli możemy pracować na mniejszych plikach.

Wtyczka ShapefileSplitter ma status eksperymentalny, więc żeby ją zainstalować trzeba w opcjach instalatora wtyczek włączyć widok wszystkich wtyczek.

W naszym przykładzie posiadając mapę województwa z podziałem na gminy chcemy stworzyć oddzielne warstwy dla każdego powiatu.

 

Z menu ‚Wtyczki’ wybieramy ‚Split Shapefile’. Wskazujemy folder, do którego zapisane zostaną nowe warstwy. Następnie wybieramy kolumnę w tabeli atrybutów wg której chcemy wydzielić warstwy, w naszym przypadku jest to WOJ_NAZWA:

 

Jeśli pola w tabeli atrybutów zawierają niedozwolone znaki dla nazw plików (np. ?/\& itp.) to warstwa nie zostanie utworzona!

Po chwili otrzymujemy warstwy z poszczególnymi powiatami (warstwy nie są wczytywane automatycznie, należy to zrobić ręcznie):

lis
06
2011

Polygonizer

Nazwa: Polygonizer
Autor: Piotr Pociask
Wersja: 2.1
Repozytorium: QGIS Official Repository 2

Polygonizer umożliwia stworzenie nowej warstwy poligonowej z przecinających się linii.  Każda przestrzeń ograniczona liniami konwertowana jest na poligon dodawany do warstwy wyjściowej. Stworzone obiekty zachowują właściwą topologię tzn. nie nachodzą na siebie oraz nie ma między sąsiadującymi poligonami pustych przestrzeni.

Wtyczka zachowuje strukturę tabeli atrybutów warstwy liniowej, jednak wszystkie pola w tabeli są puste. Możliwe jest również dodanie kolumn geometrii zawierających obwód i pole powierzchni utworzonych obiektów.

Do działania wtyczka wymaga modułu shapely.

Okno wtyczki:

Działanie wtyczki jest bardzo proste i ogranicza się do kilku kroków. Po kliknięciu ikony na pasku Quantum GIS, należy wybrać warstwę liniową (1), którą chcemy użyć do stworzenia poligonów. Użytkownik może wybrać dwie opcje odnośnie tabeli atrybutów: skopiować istniejące pola z warstwy liniowej (2) oraz dołączenie informacji o geometrii (powierzchnia i obwód) każdego stworzonego obiektu (3). Jeśli opcja ‚Output file’ (5) pozostanie niezaznaczona to zostanie utworzona warstwa tymczasowa. Należy pamiętać, że jeśli nie zostanie ona zapisana ręcznie na dysku twardym to zostanie utracona po zamknięciu Quantum GIS. Aby zachować wynik kalkulacji na dysku należy zaznaczyć pole i wybrać ścieżkę oraz nazwę pliku shapefile (6). Po kliknięciu przycisku ‚OK’ (7) rozpocznie się proces obliczeniowy. Użytkownik może w każdej chwili go przerwać przyciskiem ‚Cancel’ (8).

Wynik obliczeń przedstawia poniższy obrazek (pomarańczowe linie oraz kolorowe poligony z czarnymi granicami): :

Może się zdarzyć, że w trakcie poligonizacji nową metodą Quantum GIS zawiesi się. Może się to zdarzyć na systemach Windows, szczególnie w przypadku korzystania z QGIS niezainstalowanego przez instalator OSGeo4W. Należy wtedy użyć starej metody poligonizacji (3). Problem ten nie powinien zdarzać się na innych systemach operacyjnych.

Jeśli warstwa liniowa zawiera dużo skomplikowanych linii, postęp widoczny na pasku postępu może zatrzymać się na dłuższą chwilę przy ok. 45%.

Linki:

Historia zmian:
2.1
-tworzenie warstwy poligonowej jako warstwy tymczasowej
-możliwość wyboru czy pola z tabeli atrybutów mają zostać zachowane
-możliwość przerwania obliczeń przez użytkownika
-ikona wtyczki przeniesiona do menu Wektor (aktualnie tylko w wersji master)

2.0
-nowy, znacznie szybszy algorytm poligonizacji
-wyświetlenie podsumowania po zakończeniu procesu poligonizacji (czas trwania i liczba utworzonych poligonów)
-nowa ikona 1.0 -poprawiono o ok. 15% szybkość działania wtyczki
-wtyczka wyszła z fazy eksperymentalnej

0.3
-naprawiono błąd – poligonizacji podlegały jedynie linie widoczne w oknie QGIS
-tymczasowe warstwy liniowe nie są widoczne podczas poligonizacji

0.2
-dodano pasek postępu
-możliwość dodania do tabeli atrybutów informacji o geometrii poligonów (powierzchnia i obwód)

0.1
-pierwsza działająca wersja

paź
30
2011

Funkcje dostępne w kalkulatorze pól Quantum GIS

Kalkulator pól dostępny w Quantum GIS pozwala przeprowadzać operacje na danych i zapisywać ich wynik w tabeli atrybutów. Aktualnie dostępnych jest kilkadziesiąt funkcji operujących na danych tekstowych i numerycznych. Poniżej znajduje się spis dostępnych funkcji udostępnianych przez Quantum GIS.

  1. Aby uzyskać dostęp do danych z danej kolumny wystarczy podać jej nazwę (można użyć cudzysłowów np. „powierzchnia”).
  2. Tekst należy umieszczac między apostrofami np. ‚mój tekst’.
  3. Liczby rzeczywiste (real) należy wpisywać z kropką.

Nowe funkcje dodawane są w kolejnych wersjach Quantum GIS. Poniższa lista oparta jest na wersji 1.7.1, niektóre funkcję mogą być niedostępne we wcześniejszych wersjach QGIS.


Funkcje tekstowe:

Funkcja Opis Przykład Wynik
tostring(a) konwersja liczby a do tekstu tostring(7.3) ’7.3′
lower(a) konwersja tekstu a na małe litery lower(‚Piotr Pociask’) ‚piotr pociask’
upper(a) konwersja tekstu a na duże litery upper(‚Piotr Pociask’) ‚PIOTR POCIASK’
length(a) długość tekstu a length(‚coord. X’) 8
replace(a,b,c) zamiana fragmentu tekstu b na tekst c w tekście a replace(‚aabba’,'a’,'c’) ‚ccbbc’
regexp_replace(a,b,c) zamiana znaków c w tekście a z wykorzystaniem wyrażeń regularnych b regexp_replace(‚abbaab’,’[ab]a’,'c’) ‚abcab’
substr(a,from,len) zwraca fragment tekstu a o długości len zaczynając od znaku o indeksie from (pierwszy znak tekstu ma indeks 1) substr( ‚abbaab’ ,2,3) ‚bba’
a || b połączenie tekstów ‚prosty’ || ‚Test’ ‚prosty Test’

Funkcje matematyczne (operujące na liczbach):

Funkcja Opis Przykład Wynik
toint(a) konwersja tekstu a do liczby całkowitej toint(’3′) 3
toreal(a) konwersja tekstu a do liczby rzeczywistej toreal(’12.2′) 12.2
-a wartość negatywna liczby a -3 3
a+b suma liczb a i b 2+3 5
a-b różnica liczb a i b 5-10 -5
a*b iloczyn liczb a i b 0.5*(-12) -6
a/b iloraz liczb a i b 5/2 2.5
a^b liczba a podniesiona do potęgi b 3^2 9
sqrt(a) pierwiastek kwadratowy liczby a sqrt(9) 3
sin(a) zwraca sinus kąta a sin(90) 1
cos(a) zwraca cosinus kąta a cos(60) 0.5
tan(a) zwraca tangens kąta a tan(0) 0
asin(a) zwraca arcus sinus kąta a (-1≤a≤1) asin(1) 1.5707
acos(a) zwraca arcus cosinus kąta a (-1≤a≤1) acos(-1) 3.1415 (180°=pi)
atan(a) zwraca arcus tangens kąta a atan(90) 1.5596
atan2(x,y) zwraca kąt w radianach między osią X a punktem (x, y) atan2(1,1) 0.7853 (45°=pi/4)

Funkcje związane z obiektami przestrzennymi:

Funkcja Opis
NULL Brak wartości w komórce tabeli
$rownum zwraca numer wiersza tabeli atrybutów
$area zwraca powierzchnię danego obiektu (poligony)
$perimeter zwraca obwód danego obiektu (poligony)
$length zwraca długość danego obiektu (linie)
$id zwraca unikalny identyfikator obiektu
$x zwraca współrzędną X danego obiektu (punkty)
$y zwraca współrzędną Y danego obiektu (punkty)
xat(n) Wartość X koordynatu dla n-tego punktu linii (pierwszy punkt n=0, wartości ujemne powodują liczenie punktów od końca linii)
yat(n) Wartość Y koordynatu dla n-tego punktu linii (pierwszy punkt n=0, wartości ujemne powodują liczenie punktów od końca linii)

paź
30
2011

Ustawianie domyślnego styl dla danej warstwy podczas jej wczytywania w Quantum GIS

Quanutm GIS pozwala w prosty sposób zautomatyzować ładowanie domyślnego stylu dla wczytywanej warstwy. Dotyczy to zarówno warstw wektorowych jak i palet dla rastrów. Można dzięki temu oszczędzić czas ręcznego ustawiania stylu dla warstwy po jej wczytaniu jeśli często z niej korzystamy w różnych projektach np. jako podkład do mapy.

Na początku należy ustalić domyślny styl dla warstwy w jej właściwościach. Następnie wybieramy opcję ‚Zapisz styl …’ i zapisujmy go w w folderze z daną warstwą pod tą samą nazwą jak nazwa pliku warstwy. Przykładowo, jeśli plik z warstwą nazywa się kondracki-v2000r-u92.shp, styl należy zapisać pod nazwą kondracki-v2000r-u92.qml.

Od tej pory przy każdym wczytywaniu warstwy QGIS automatycznie ustawi dla niej utworzony styl.

Powyższy sposób powinien działać z większością typów plików obsługiwanych przez QGIS (sprawdziłem na Shapefile, KML, GML i GeoTIFF).

paź
24
2011

WFS – Pobieranie danych (GML do Shape) – czyli jak odwrócić współrzędne w Qgis.

W niniejszym artykule wyjaśnię jak korzystać z udostępnianych przez Geoportal, (przy pomocy usługi WFS) danych katastralnych z wykorzystaniem QGIS metodą konwersji na gml i następnie na shape.

Usługa ta nigdy się nie otwiera oknie mapy jakiegokolwiek klienta GIS – ArcGIS, Qgis czy Geoxa, o zapisaniu już nie wspominając.

Składniki przepisu:

  • Przeglądarka internetowa
  • Qgis (lub inny klient GIS desktop)

W pierwszej kolejności musimy zdefiniować interesujący nas obszar (BBOX) w układzie odniesień WGS84. W tym celu tworzymy połączenie do warstwy WMS Geoportalu – Państwowy Rejestr Granic:

W polu adres url dla WMS wpisujemy : „http://sdi.geoportal.gov.pl/wms_prg/wmservice.aspx„.

Odnajdując swój obszar zainteresowań spisujemy zasięg mapy z okna QGIS, którego potem użyjemy do zdefiniowania rozmiarów BBOX’a.

Zasięg mapy w QGIS(BBOX)

Należy pamiętać że jeśli dane, a więc i  współrzędne mają być w układzie WGS84′ (ESPG 4326), to konieczne należy przekalibrować ramkę w locie i zapisać współrzędne w stopniach.

Kolejnym krokiem będzie stworzenie zapytania z poziomu przeglądarki internetowej do serwera danych. Korzystając z możliwości zadawania zapytania do serwera w trybie „Rest” w pasku adresu definiujemy jakie informacje konkretnie nas interesują:

  • W tym przykładzie dane pobieramy w układzie geograficznym definiując BBOX w kolejności : lewy dolny róg, i następnie prawy górny ale w formacie ymin,xmin,ymax,xmax.

http://sdi.geoportal.gov.pl/wfs_dzkat/wfservice.aspx?service=wfs&request=getfeature&bbox=53.13,15.36,53.137,15.369&version=1.1.0&typename=Dzialki&srsname=EPSG:4326

    • W tym przykładzie dane pobieramy w WGS84′ co zaznaczamy w zapytaniu (ESPG):

http://sdi.geoportal.gov.pl/wfs_dzkat/wfservice.aspx?service=wfs&request=getfeature&bbox=53.13,15.36,53.137,15.369&version=1.1.0&typename=Dzialki&srsname=EPSG:4326

Przeglądarka zwróci nam plik tekstowy GML definiujący określone obiekty. Jeśli to nie nastąpi należy zawęzić BBOX ponieważ serwery w danym momencie nie mogą przetworzyć tak dużej ilości informacji.

Kolejnym krokiem jest zapisanie pliku jako .xml (Mozilla, Opera itp):

Plik -> Zapisz jako.. -> wpisujemy nazwę wybierając roszerzenie xml. Następnie odnajdując plik na dysku zmieniamy ręcznie roszerzenie „.xml” na „.gml”.

Wystarczy dodać nową warstwę wektorową i wybrać zapisany plik GML. Natomiast pojawi się problem odwróconych współrzędnych x i y. Wynika to z tego że geodeci korzystają z układu odniesień, w którym owe współrzędne są zamienione.

Żeby zaradzić sytuacji najpierw należy zapisać warstwę jako plik *shp ,

a następnie pobrać napisaną na szybko przez Borysa Jurgiela (dzięki) wtyczkę Swap XY- tutaj.

Należy rozpakować załącznik do katalogu .qgis/python/plugins/ i włączyć Swap XY w menagerze wtyczek. Jest to narazie wtyczka eksperymentalna więc dopiero wkrótce pojawi się w repozytorium. Więcej na jej temat przeczytacie - tutaj.

Następnie wyeksportowany plik *shp włączamy do edycji (warstwa – > tryb edycji)i korzystamy z włączonej wcześniej ikonki wtyczki Swap xy.

Ostatnim etapem jest połączenie plików shape przy użyciu wtyczki fTools. Po jej włączeniu wybieramy :

Powstały temat wektorowy jest zaimportowaną warstwą katastru z polskiego Geoportalu.

paź
24
2011

Eksport do KML oraz publikacja i animacja danych czasowych w Qgis

Artykuł ten jest o publikacji danych dzięki rozszerzeniu KML i KMZ.

Stają się one coraz bardziej uznanym formatem w publikacji danych GIS. Problemem jedynie staje się zautomatyzowanie zapisu reprezentacji danych wektorowych. Ale po kolei… Recepta:

  • QGIS (i dużo czasu)
  • Google Earth

Czym jest KML?

Keyhole Markup Language (KML) – język znaczników oparty na XML-u, otwarty standard zatwierdzony przez Open Geospatial Consortium pozwalający na wizualizację trójwymiarowych danych przestrzennych. Wykorzystywany jest m.in. w aplikacjach Google Earth, Google Maps, Bing Maps, Flickr, NASA World Wind oraz klientach GIS Desktop (Qgis, ArcGIS, GRASS, i wiele innych)

KMZ – skompresowany plik kml przy użyciu kompresji Zip. W tak spakowanym pliku KMZ mogą znajdować się obrazy satelitarne, ikony, modele 3D. Eksport do KML w QGIS: Aby zapisać temat wektorowy w dowolnym formacie do pliku KML, należy kliknąć nań prawym guzikiem myszy i wybrać opcję „zapisz jako” następnie wybrać interesujący nas format, układ współrzędnych i kodowanie.

Po otwarciu pliku w notatniku (lub notepad++) ukaże nam się struktura pliku KML, którą w celu uzyskania oczykiwanej przez nas reprezentacji będziemy musieli wzbogacić o odpowiednie tagi.

Definicja elementu wektorowego zawiera się w tagu < Placemark>

Linią kodu odpowiedzialną za reprezentację jest informacja zawarta w tagu < LineStyle >  i tak mamy: ff0000ff gdzie definiujemy kolor lini oraz jej grubość (domyślnie 1) Natomiast w < Linestring >   22.2222,51.2222,1.444 22.3333,51.3333,1.4444 mamy zdefiniowane punkty wiodące linii w układzie geograficznym (w tym przykładzie linia ma dwa punkty). Pierwsza para współrzędnych to x i y początku lini, trzecia współrzędna określa wysokość z.

Przykładowa struktura pliku KML
Przykładowa struktura pliku KML

Gdy w pliku kml będziemy korzystać z wielu różnych reprezentacji dobrze jest na początku dokumentu stworzyć schematy wszystkich styli i następnie dalej w kodzie powoływać się na nie co zaoszczędzi czasu i pracy:

Definicja stylu
Definicja stylu

I następnie odniesienie się do stylu :

Odniesienie się do stylu

Dodatkowymi tagami ważnymi dla prawidłowej reprezentacji danych są:

• < altitude >- określa przewyższenie obiektu w pionie (możemy zamienić linie w „ściany” i poligony w „bloki”)
•< altitudeMode > – określa wysokość na jakiej znajdują się obiekty:
•RelativeToGround – wysokość mierzona od powierzchni ziemi
•RelativeToSeaFloor – wysokość ponad dno zbiornika wodnego
•Absolute – od poziomu morza
•ClampToGround – parametr jest ignorowany i obiekt umieszczany jest na powierzchni ziemi.
RelativeToGround
RelativeToSeafloor
x
Absolute
ClampToGround

Najważniejszy do animowania danych tag to < TimeSpan > :

definiuje date i godzine jakiej dotyczą określone dane w formacie „RRRR-MM-DDTGG:MM:SSZ”
Dzięki temu możliwa jest prezentacja zmienności danego zjawiska w czasie. Używamy go definiując początek przedziału czasowego < begin > oraz koniec < end >.
Drugą opcją jest użycie RRRR-MM-DDTGG:MM:SSZ jeśli chcemy zdefiniować konkretną datę i czas, a nie przedział.
Korzystając z wymienionych wyżej opcji dany obiekt możemy opisać w następujący sposób:
Tak przygotowany obiekt bezie posiadał swoją reprezentację, dane na temat czasu którego dotyczy, wielkość przewyższenia, sposób wyświetlania względem powierzchni ziemi, oraz nazwę. Oczywiście istnieje dużo więcej możliwości wzbogacania publikowanych danych , niemniej w tym wpisie skupię się na najprostszych.

Tak przygotowane dane możemy otworzyć w Google Earth / bądź ArcGIS Explorerze. Automatycznie pojawi nam się oś czasu:

Oś czasu GE

W ustawieniach możemy definiować jej początek lub koniec i szybkość animacji. pozostaje tylko odtworzyć, ustawić zasięg widoku i kąt nachylenia, i udostępnić. (ja dodałem jeszcze legende i tytuł jako obrazy (obraz nad powierzchnią)

Żeby udostępnić tak przygotowaną krótką prezentację,  musimy zapisać pliki związane z prezentacją jako plik KML lub KMZ:

Zapisz jako KML – Google Earth

Tak przygotowany plik, umieszczamy na dowolnym serwerze (jeśli go niemamy można skorzystać z darmowego „Witryny Google” gdzie dostajemy 2GB miejsca na dyskach tej korporacji). Następnie publikujemy dane w internecie przy urzyciu „Embend KMLGadget”

KML GADGET

Po podaniu adresu URL do naszego pliku ustawiamy kilka opcji widoku i generujemy kod który poprostu możemy wstawić w kod naszej strony internetowej, bloga itp., lub możemy podzielić się linkiem do otworzenie w GE. Przykład - Mobilność Studentów.kmz

Zapraszam do obejrzenia prostej animacji jedynie ukazującej idee wykorzystania tych możliwości:

TUTAJ

Plusy:

  • Klient cienki (bądź średni jak kto woli), nie wymaga instalacji GE, może być przeglądany z wykorzystaniem jedynie przeglądarki.

Minusy:

  • Na tą chwilę wtyczka nie działa w Operze, i niema możliwości wstawienia jej do mojego Bloga opartego na WordPress który niedopuszcza urzycia JavaScript :) (niemniej działa na blogach Google)

Więc jeśli spojrzymy na koniec w strukturę pliku , dowiemy się że wszystkie te parametry można zdefiniować ręcznie w kodzie, lecz to opcja dla cierpliwych.

Na pewno język kml daje możliwości wymiany danych w formacie akceptowanym przez większość klientów GIS, oraz możliwość tworzenia interaktywnych prezentacji danych przestrzennych wyświetlanych w przeglądarkach użytkownika.

paź
24
2011

Ftools – generowanie siatki współrzędnych

Ftools to bardzo pomocne narzędzie analiz wektorowych i nie tylko. Dzięki implementacji struktury wtyczkowej w Qgis istnieje możliwość wykorzystania jego funkcji w trybie graficznym (jeśli ktoś nielubi linii komend).

Jedną z ciekawych funkcji jest generowanie siatki współrzędnych w dowolnie wybranym układzie współrzędnych i zapisanie jej jako shape (linie lub poligon) ze współrzędnymi w tabeli atrybutów. Narzędzie to może być pomocne zarówno w generowaniu pól testowych jak i przy dokładnej kalibracji map etc..

Po pobraniu i aktywowaniu wtyczki, uruchamiamy narzędzie z menu „Wektor”

Ftools – generowanie siatki

Następnie ustawiamy parametry generowanej siatki:

Parametry siatki
  • Możemy ją generować dla zasięgu wczytanej uprzednio warstwy, bądź dla zasięgu obszaru mapy.
  • Parametry to nic innego jak odstęp między liniami siatki (zależnie od układu zmieniają się jednostki – w tym przypadku to stopnie).
  • Możliwość zmiany proporcji 1:1 na dowolnie zdefiniowaną.
  • Generowana warstwa może być linią bądź poligonem.

Po zapisaniu siatki i dodaniu do mapy, możemy sprawdzać atrybuty, i dokładniej kalibrować nasze niezastąpione „dziesiątki” w układzie ’65:) lub inne, sprawdzać wielkość błędu przy georeferencji i wiele innych..

Dla każdego z obiektów mamy zdefiniowane współrzędne osi X i Y (Xmax, Xmin oraz Ymax, Ymin)

Warto dodać, że aby współrzędne osi X i Y były „okrągłe” (przydatne przy kalibracji map topo) należy zaokrąglić Xmin i Ymax do wartości pełnych (np. w odwzorowaniu 1992 do pełnych tysięcy). Przy współrzędnych geograficznych (np. WGS 84) należy również uważać przy przeliczaniu wartości ze stopni, minut i sekund na stopnie dziesiętne: 6 minut odpowiada 0,1 stopnia dziesiętnego – przydatne przy określaniu odstępów między osiami.

paź
21
2011

OGR2Layers

O tym, że ogry mają warstwy, dowiedzieliśmy się z kultowej pierwszej części „Shreka“. Ale do czego może nam się przydać ta wiedza w Quantumie?
Otóż dostępna z QGIS Contributed Repository wtyczka, stworzona przez zespół: Nicholas Bozon, Rene-Luc D’Hont, Michael Douchin, Mathias Walker, Luca Delucchi o wdzięcznej nazwie OGR2Layers służy do szybkiego generowania tak zwanych mash-upów mapowych w oparciu o OpenLayers. Co to takiego mashup? W kartografii internetowej oznacza to połączenie mapy podkładowej (najczęściej Google Maps lub OpenStreetMap) z nałożonymi danymi użytkownika. Mogą być to lokalizacje restauracji w mieście, przebieg trasy turystycznej, przystanki autobusowe i tak dalej. Stworzenie takiej prostej mapy w OpenLayers wymagało napisania przynajmniej kilku linijek kodu w JavaScript i odpowiedniego przygotowania danych. Dzięki wtyczce można przynajmniej częściowo zautomatyzować ten proces.

Co będzie potrzebne? Do widoku QGIS musimy dodać jedną lub więcej warstw wektorowych ze zdefiniowanym układem współrzędnych. Prawidłowa definicja jest niezbędna do zadziałania wtyczki. Układ może być dowolny, format też.

Po drugie, należy ustawić wizualizację danych korzystając z starych stylów QGIS. Nowe nie działają i nie wiadomo, kiedy autorzy wtyczki uporają sie z ich implementacją. Należy też pamiętać o tym, że możliwości samego OpenLayers są ograniczone, więc bardzo skomplikowana symbolizacja i tak byłaby nie do przeniesienia. Możemy korzystać z ustawienia „symbol pojedynczy“ lub „wartość unikalna“.

Uwaga 1. Przy ustawianiu symboli punktów z plików SVG należy koniecznie ustawić „Opcje wypełnienia“ na „Brak“ – w przeciwnym wypadku zamiast grafik pojawią się kolorowe punkty. Symbole SVG nie działają również w przypadku wyboru „wartości unikalnej”.
Uwaga 2. OGR2Layers nie przeliczy jednostek wielkości symboli z milimetrów na piksele, tylko bezpośrednio przeniesie wartości. Należy więc założyć wszystko odpowiednio większe.

Kiedy już wszystko będzie gotowe, wywołujemy wtyczkę z menu Wtyczki – OGR2Layers Plugin. Okno ma 4 zakładki: QGIS, OpenLayers, Optional i Output.

W zakładce QGIS pokaże się lista warstw wektorowych dodanych do mapy. Oprócz tego trzeba zdecydować, gdzie będą zapisane pliki wynikowe (Output directory), oraz do jakiego formatu powinny być konwertowane wektory: GML albo GeoJSON. Zakładka OpenLayers posiada pole na wpisane tytułu mapy, rozmiaru (do wyboru jest 400 x 400 px, 800×600 px i pełny ekran), domyślny zakres (ustawiany jest do zasięgu aktualnego widoku QGIS), oraz umożliwia włączenie/wyłączenie przełącznika warstw. Jest tu również wybór podkładu – niestety, tylko z listy. W wersji 0.8.2 dostępnej przez instalator wtyczek można wybrać trzy różne wizualizacje OSM lub Vmap level 0, wersja rozwojowa umieszczona na GitHub umożliwia również wybranie Google Maps.

W zakładce „Optional“ można dodać do mapy kolejne elementy, jak wyświetlanie współrzędnych, skalę, opis źródła danych, pasek stopnia powiększenia, mini-mapę przeglądową i link do widoku. Sekcja „Render option“ dotyczy symbolizacji – „default OpenLayers render“ pominie ustawienia QGISa, natomiast „QGIS render“ – przeniesie symbolizację z projektu do wygenerowanej mapy. W sekcji „Query option“ wybieramy, czy kliknięcie na obiekcie ma spowodować wyświetlenie w „dymku“ jego atrybutów. Opcja „Query more features“ działa tylko wtedy, gdy dodane będą wyłącznie warstwy punktowe. Umożliwia odczyt atrybutów kilku punktów położonych bardzo blisko siebie.

Po zdefiniowaniu wszystkich parametrów wystarczy kliknąć na OK i czekać na efekty. Wygenerowany kod będzie zapewne wymagał modyfikacji (choćby zmiana nazw warstw, użycie biblioteki OpenLayers ze swojego serwera zamiast głównego serwera projektu), ale w porównaniu do pisania od zera i tak mamy zaoszczędzone sporo pracy.

Trzeba jednak pamiętać, że taki sposób tworzenia internetowych map ma swoje ograniczenia. Przede wszystkim nie mamy swobody w wyborze układu współrzędnych, wtyczka automatycznie transformuje nasze dane do Web Mercator (którego nie znoszę). Również lista dostępnych podkładów jest ograniczona. Wreszcie – tego typu mapy działają dobrze, gdy nie muszą pokazywać zbyt wielu danych. Dla Internet Explorera bezpiecznym limitem jest 100 obiektów na wszystkich warstwach, dla pozostałych przeglądarek kilkaset, ale szybkość działania może być niezadowalająca. Dane przechowywane są w formatach tekstowych, więc nadzwyczaj mało ekonomicznych. Powyżej pewnego progu nie będzie już wyjścia: trzeba zainwestować w Server GIS z prawdziwego zdarzenia.

To jednak temat na osobną opowieść, a tymczasem – miłej zabawy z OGR2Layers!

paź
21
2011

Kalibracja map Messtischblatt w QGIS

Stare mapy może i nie zastąpią wehikułu czasu, ale i tak ich przydatność jest ogromna. Poszukiwanie śladów dawnych fabryk, kolei, fortyfikacji, grodzisk ukrytych w lesie czy też zmian w użytkowaniu i pokryciu terenu ;-) – wszystko to wymaga posiadania archiwalnej mapy. Na szczęście w dobie internetu nie trzeba już szukać ich w bibliotekach i ryzykować zniszczenia zabytku – na ogół wszystko, co trzeba, znajduje się już w sieci. Jest jednak pewne „ale”…

Zwykle wraz z mapą na różnych serwerach dostępne są pliki kalibracyjne z rozszerzeniem .map. Jakość tej kalibracji jest lepsza lub gorsza, zawsze jednak będzie działać jedynie z OziExplorerem. Użycie takiego pliku w standardowym programie GIS skończy się porażką, bo jak większość neogeograficznych wynalazków jest zgodny jedynie sam ze sobą. Pozostaje więc zabrać się za kalibracje samemu.

Tym razem zajmę się niemieckimi mapami Messtischblatt w skali 1:25 000, pokrywającymi tereny włączone do Polski po II wojnie światowej. Pozyskać je można np. ze strony Archiwum Map Zachodniej Polski. Ich kalibracja jest o tyle łatwiejsza od obejmujących tereny II RP map WIG, że parametry odwzorowania, są na 100% pewne – mało tego, znajdują się w bazie EPSG!

W Messtischblattach zastosowano odwzorowanie zwane w krajach anglosaskich Transverse Mercator, a u nas – Gaussa-Krügera. Za model Ziemi posłużyła elipsoida Bessela. Terytorium III Rzeszy podzielono na 6 stref odwzorowawczych o szerokości 3 stopni, przy czym dla obszaru dzisiejszej Polski są to strefy 5 i 6. Granica pomiędzy nimi przebiega wzdłuż południka 16,44 E (w układzie WGS84). Dla strefy 5 mamy gotową definicję, którą można przywołać kodem EPSG: 31469. Tereny położone dalej na wschód wymagają wpisania własnej definicji strefy 6:

+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs

Czasami zdarza się arkusz leżący w dwóch strefach. Poznamy to po załamaniu siatki oraz napisie „Ostgrenze des Gitterstreifes 15 | Westgrenze des Gitterstreifens 18″ nad ramką. Wówczas oczywiście należy używać wyłącznie punktów kalibracyjnych w obrębie jednej strefy.

I tym sposobem możemy zabierać się za kalibrację, korzystając z oryginalnej siatki topograficznej. W QGIS służy do tego narzędzie Georeferencer, umieszczone w menu Raster (może być konieczne wcześniejsze włączenie w Zarządzaj wtyczkami). Pracę zaczynamy od wczytania surowego skanu – służy do tego ikona Wczytaj skan. Następnie należy powiększyć obraz tak, by zobaczyć ramkę i móc odczytać współrzędne. Nowe punkty wpasowania dodajemy ikoną Dodaj punkt , pojawi się okno z możliwością wpisania współrzędnych lub pobrania ich z istniejącej mapy:

Wprowadzanie punktów GCP

I tak do skutku, to znaczy – do wpisania odpowiedniej liczby punktów wpasowania. Pamiętać należy przy tym, że współrzędne siatki podane są w kilometrach – należy więc dopisać do nich na końcu 000. Jeśli mapa jest w dobrym stanie i prawidłowo zeskanowana, to właściwie wystarczą 4 punkty, dobrze jednak jest mieć ich więcej. Na koniec należy ustawić parametry transformacji:

Ustawienia transformacji

W większości przypadków wystarczy wielomian 1 stopnia, dla zniszczonych map trzeba użyć stopnia wyższego. Ustawiamy układ współrzędnych (strefa 5 – z kodu EPSG, strefa 6 – wklejając definicję), plik wyjściowy…

Teraz można by już uruchomić kalibrację, ale na wszelki wypadek zapiszmy punkty wpasowania – żeby nie zaczynać od początku w razie padnięcia QGISa.

Na zakończenie warto otrzymany raster transformować do jakiegoś współczesnego układu (opcja Raster – Zmień odwzorowanie) oraz odchudzić paletę kolorów (Raster – RGB na PCT) – wszak oryginał drukowano w 3 kolorach i absolutnie nie ma sensu marnować miejsca na zapis 24-bitowy.

Starsze posty &laquo

» Brak postów