Na stronie “Dane do pobrania” usunęliśmy linki danych z Europejskiej Agencji Środowiska, skąd można było pobrać dane o formach ochrony przyrody dla Polski. Polecamy pobierać te dane ze strony Generalnej Dyrekcji Ochrony Środowiska. Z punktu widzenia INSPIRE i zdrowego rozsądku GDOŚ jest jedyną instytucją, która jest odpowiedzialna za gromadzenie i udostępnianie tych danych. Dane z innych źródeł są zbiorami pochodnymi i należy do nich podchodzić z ostrożnością, ponieważ mogą być nieaktualne lub błędne. Granice form ochrony przyrody nieustannie się zmieniają (a raczej doprecyzowują). W GDOŚ trwa mrówcza praca nad ustaleniem ich przebiegu. Zapisy z dokumentów prawnych sprzed kilkudziesięciu lat, typu: “granica biegnie północnym skrajem pola, a następnie skręca na północny zachód do granicy lasu” są przerabiane na współrzędne. Jest to trudne zważywszy uwagę na fakt, że obecnie na rzeczonym terenie jest sam las – pole zarosło. Przy okazji regulowane są kwestie przebiegu granic.
Linkowanie do danych EEA i wynikające z tego problemy, wynikało z faktu, że GDOŚ nie publikował tych danych u siebie na www. Oczywiście dane można też przeglądać na geoserwisie GDOŚ. Miłego ściągania i udanych analiz!
Początkujący w tematyce GIS oraz wszyscy, którzy zetknęli się na studiach, bądź też w pracy zawodowej z systemami CAD, mają problem z odróżnieniem obydwu systemów. Zacznijmy od definicji:
Zagadnieniem koniecznym do skutecznej pracy w GIS jest poznanie sposobów radzenia sobie z układami współrzędnych prostokątnych płaskich oraz geograficznych. Wbrew pozorom, jednym z większych problemów z tym związanych jest nazewnictwo układów w różnych typach oprogramowania. Kody EPSG powstały w celu standaryzacji nazewnictwa i parametrów układów współrzędnych.
25 kwietnia została opublikowana kolejna wersja biblioteki GDAL/OGR oznaczona numerem 1.11.0. Oprogramowanie to służy do dostępu i manipulowania danymi przestrzennymi w wielu formatach rastrowych i wektorowych. Jest ono szeroko wykorzystywana przez wiele aplikacji związanych z GIS takich jak QGIS, GRASS GIS, Google Earth czy ArcGIS.
Ważniejsze zmiany w stosunku do poprzedniej wersji:
Szczegółowy wykaz zmian można znaleźć na wiki projektu.
Kod źródłowy można pobrać ze strony głównej projektu. Wersja skompilowana dla systemów Windows jest już dostępna przez instalator OSGeo4W. W najbliższym czasie powinny zostać zaktualizowane główne repozytoria dla systemów Linuks, w szczególności UbuntuGIS.
Pod adresem http://www.osm974.re/osm2gis francuska firma GeoTribu uruchomiła usługę, umożliwiającą pobieranie wycinków bazy danych w formatach zgodnych z aplikacjami GIS. W odróżnieniu od innych podobnych usług, łączy w sobie możliwość wybrania obszaru niezależnie od granic administracyjnych, dostępność standardowych formatów GIS i łatwość obsługi.
Pobieranie danych za pomocą osm2gis jest bardzo proste. Korzystając z wyświetlonej mapy, należy wybrać obszar zainteresowania – nie może być on zbyt duży, aplikacja akceptuje obszary o powierzchni rzędu pojedynczego powiatu lub dużej aglomeracji miejskiej.
Po dopasowaniu właściwego obszaru, możemy przystąpić do „zamówienia“ danych. Możemy wybrać format (KML,GML,TAB,SHP lub SQLite) i układ współrzędnych (WGS84 albo Google Mercator). Kolejnym krokiem jest podanie adresu e-mail, na który zostanie przesłane powiadomienie o możliwości pobrania danych wraz z linkiem.
Aplikacja umożliwia pobranie porcji danych raz na godzinę z jednego adresu IP. Dane pochodzą z kopii bazy danych OSM utrzymywanej przez stowarzyszenie OpenStreetMap France.
Dane pobieramy w postaci archiwum ZIP, gdzie w podkatalogach umieszczono poszczególne formaty. Niezależnie od formatu, tworzone są 3 niezależne warstwy – osm_point, osm_line i osm_polygon.
Tabela atrybutów każdej warstwy składa się z 75 kolumn, zawierających większość używanych tagów, oprócz tego dołączona jest kolumna o nazwie tags w której zapisano wszystkie tagi obiektu w formacie klucz => wartość oddzielone przecinkami. Jest to więc znacznie bogatsza tabela, niż tworzona przez standardową wtyczkę QGIS.
Do tego etapu wszystko wygląda wspaniale, jednak usługa ta ma bardzo istotne wady. Po pierwsze – używany konwerter zupełnie nie radzi sobie z obiektami powierzchniowymi. Zdarzają się niezamknięte linie zamiast poligonów, lub wręcz zupełnie nieużyteczne warstwy bez czytelnej geometrii. Z uwagi na skomplikowany sposób zapisu poligonów w modelu danych OSM, generowanie ich geometrii w prawidłowy sposób jest sporym wyzwaniem – nie jest to jednak żadne wytłumaczenie, ponieważ istniejące konwertery radzą sobie z problemem dość dobrze.
Po drugie, w przypadku wyboru opcji zapisu w SQLite dostaniemy wynik w „czystym“ SQLite, bez użycia rozszerzenia SpatiaLite. Nie skorzystamy więc z dobrodziejstw jakie daje przestrzenna baza danych, czyli zaawansowanych indeksów przestrzennych i możliwości wykonywania analiz wprost z poziomu zapytań SQL. Ponadto zamiast jednego pliku z bazą i trzema tabelami wewnątrz, nadal otrzymamy trzy odrębne.
Podsumowując, narzędzie osm2gis jest niewątpliwie krokiem w dobrym kierunku – zwiększenia dostępności i interoperacyjności danych OSM – lecz wykonanie pozostawia wiele do życzenia. Obecnie nadal lepiej jest korzystać z wybranego programu do konwersji, lub gotowych plików Shapefile od Geofabrik.
Bardziej skutecznym rozwiązaniem problemu może być funkcja konwersji danych OSM wbudowana w bibliotekę GDAL/OGR – jednak najnowsza wersja 1.10 w chwili pisania artykułu nie była jeszcze dostępna dla wszystkich systemów operacyjnych.
Stare porzekadło mówi, że obraz jest wart więcej niż tysiąc słów. Dodając do tego czas, jaki byłby potrzebny na zapisanie owego tysiąca słów w terenie – mało kto stwierdzi, że geotagowane zdjęcia są tylko gadżetem, nieprzydatnym w „poważnym“ GIS. Dzięki jednej z wtyczek QGIS mamy możliwość przeglądanie owych zdjęć bezpośrednio z poziomu aplikacji. Wystarczy posiadać warstwę wektorową z kolumną, w której przechowywane są ścieżki do zdjęć (zapisanych na dysku) i przypisanych do odpowiednich obiektów.
Aby móc przeglądać załączone zdjęcia należy za pomocą narzędzia Zarządzaj wtyczkami uaktywnić wtyczkę (powinna być domyślnie zainstalowana), o nazwie eVis. Po aktywacji, narzędzia z nią związane powinny pojawić się w menu Bazy danych.
Pierwsze z nich, o nazwie Połączenie z bazą danych eVis, nie będzie tym razem potrzebne. Interesujące są natomiast dwa kolejne:
Narzędzie ID zdarzeń eVis – działa tak jak zwykłe narzędzie Identyfikuj, po kliknięciu na punkt z „aparatem“ powinno pokazać się okno ze zdjęciem:
Jeśli jednak zdjęcie się nie wyświetli, konieczne może być dokonanie konfiguracji na zakładce Opcje – „Atrybut zawierający ścieżkę dostępu do pliku“ powinien być ustawiony na filepath.
Przeglądarka zdarzeń eVis – umożliwia przeglądanie zdjęć po kolei, aktywne zdjęcie będzie zaznaczone na mapie symbolem gwiazdki
Strona domowa projektu eVis: http://biodiversityinformatics.amnh.org/open_source/evis/documentation.php
Jednym z bardziej istotnych problemów kartograficznych przy tworzeniu map w skali 1:50 000 i 1: 100 000 jest dokonanie generalizacji pojedynczych budynków do bardziej ogólnych obiektów – obszarów zabudowanych. Tradycyjnie dokonywano tego ręcznie, w oparciu o określone reguły, ale też i subiektywne odczucia kartografa. Obecnie jednak, gdy coraz częściej słyszymy o wielorozdzielczych i wieloreprezentacyjnych bazach danych, pojawia się problem automatycznej i powtarzalnej generalizacji.
Szwajcarska firma Kappasys opracowała dodatkowe funkcje do bazy PostGIS, dzięki którym możliwe stało się przeprowadzenie takiej generalizacji przy pomocy oprogramowania Open Source. Dostarczone są w postaci zwykłych skryptów w języku PL/SQL, dzięki czemu nie musimy nic kompilować ani instalować w systemie operacyjnym – wystarczy wykonać je w bazie, by uzyskać dostęp do funkcji.
Skrypty SQL dostępne są do pobrania ze strony Kappasys: http://www.kappasys.org/cms/index.php?id=65&L=5
Należy ściągnąć obydwa skrypty – cleanGeometry oraz aggregatePolygons. Następnie wykonujemy skrypty (użytkownik musi mieć prawa superużytkownika bazy, domyślnie jest to postgres):
psql -d <baza> -U -h <serwer> -f cleanGeometry.sql
psql -d <baza> -U -h <serwer> -f aggregatePolygons.sql
Postgres powinien odpowiedzieć „CREATE FUNCTION“ oraz „CREATE AGGREGATE“. Od tego momentu zyskujemy dostęp do funkcji.
Funkcja może być wywołana przy użyciu dowolnego interfejsu bazy danych, a więc linii komend, programu pgAdmin, wtyczki PostGIS Manager czy własnego programu.
Składnia funkcji jest następująca:
SELECT aggregatepolygons (<kolumna geometrii>,<odległość>,<kształt ortogonalny>) FROM
Pierwszy argument jest to po prostu nazwa kolumny geometrii tabeli, w której znajdują się budynki, np. the_geom. Drugi – to maksymalna odległość między budynkami, poniżej której będą traktowane jako należące do jednego obszaru zabudowanego. Trzeci argument jest typu Boolean, czyli może mieć wartość true albo false i określa, czy wynikowe poligony mają mieć kształt geometryczny z dużą ilością kątów prostych, czy też dowolny. Przy wartości true wynik będzie bardziej zbliżony do reprezentacji na mapie topograficznej, zaś przy false będzie przypominał CORINE Land Cover. Poniżej przedstawiam przykładowe wyniki generalizacji dla różnych ustawień – z opcją ortogonalną i bez, przy różnych odległościach między budynkami.
Jeżeli budynki mają przypisany atrybut określający ich wielkość, przeznaczenie itp. można dodać do zapytania klauzulę GROUP BY i otrzymać osobne poligony dla np. budynków przemysłowych i mieszkalnych lub jedno i wielorodzinnych.
[warning]Generalizacja tą metodą przebiega bardzo wolno i pożera dużą część zasobów procesora, dlatego stanowczo niewskazane jest używanie funkcji aggregatepolygons() w widokach albo dynamicznych Query Layers. [/warning]
Dane, z którymi przychodzi nam pracować przeważnie występują w znanych formatach, odpowiednich do oprogramowania, jednak nie zawsze. Czasem trzeba się naszukać zanim znajdzie się informację o pochodzeniu danych, z którymi trzeba pracować. Mamy nadzieję, iż poniższa lista pomoże.
Kalkulator pól dostępny w QGIS 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 QGIS.
[important]
[/important]
[warning]Nowe funkcje dodawane są w kolejnych wersjach QGIS. Poniższa lista oparta jest na wersji 1.7.1, niektóre funkcję mogą być niedostępne we wcześniejszych wersjach QGIS. [/warning]
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) |
QGIS 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).