Zarządzanie Danymi Przestrzennymi

Ćwiczenie 2 - PostGIS - instalacja, prosta tabela, współpraca z QGIS

Instalacja PostGIS

Instalacja PostGIS jest wyjątkowo prosta zarówno pod Windows jak i na Ubuntu. W tym pierwszym przypadku jest on instalowany w większości przypadków razem z PostgreSQL, w tym drugim jest dostępny w repozytoriach, przez menedżer Synaptic.

Baza danych, aby mogła być wykorzystywana do operacji przestrzennych, musi zostać wzbogacona o odpowiednie kolumny oraz funkcje. Dbają o to dwa skrypty sql dostarczane razem z instalacją. Nie jest jednak konieczne wykonywanie ich przy każdej nowej bazie. Wystarczy stworzyć szablon (template) i używać go jako wzorca. Szablon taki jest już obecny w niektórych instalacjach i nosi nazwę postgistemplate. Jeśli jest inaczej, należy go stworzyć przed rozpoczęciem pracy.

Po zalogowaniu jako superuser należy utworzyć bazę danych (poprzez polecenia psql ale bez wchodzenia do bazy postgres):

createdb postgistemplate

następnie wzbogacić bazę o mozliwośc wykorzystania języka PL/pgSQL:

createlang plpgsql postgistemplate

oraz wykonać oba preinstalowane skrypty:

psql -d postgistemplate -f /usr/share/postgresql-8.3-postgis/lwpostgis.sql

a następnie,

psql -d postgistemplate -f /usr/share/postgresql-8.3-postgis/spatial_ref_sys.sql

Sprawdzenia poprawności instalacji można dokonać wykonując polecenie:

psql -d postgistemplate -c "SELECT postgis_full_version();"

ZADANIE 2.1: Utwórz szablon PostGIS o nazwie "postgistemplate".

Przestrzenna baza danych - kolumny geometrii

Rozszerzenie PostGIS wzbogaca bazę danych o nowy typ danych - geometry (od wersji 1.5+ również geography). Dodanie kolumny o takim typie do tabeli umożliwia przechowywanie obiektów przestrzennych (zgodnych ze standardem OGC Simple Feature).

Po instalacji PostGIS w bazie danych powinny pojawić się w schemacie "public" dwie dodatkowe tabele:

spatial_ref_sys
Przechowuje spis odwzorowań wykorzystywany przy operacjach przestrzennych. Każdemu przyporządkowany jest unikalny identyfikator - Spatial Reference Identifier, w skrócie SRID. W 99% przypadków jest on zgodny z kodem EPSG. Nic nie stoi oczywiście na przeszkodzie aby uzupełnić tabelę o nowy układ.
geometry_columns
Tabela przechowująca informację o kolumnach geometrii. Zawiera listę, typ, użyte odwzorowanie i tabelę w której dana kolumna się znajduje. W większości przypadków można o niej myśleć jako i spisie warstw dostępnych na serwerze. I tak właśnie wykorzystywana jest przez przeglądarki graficzne np. QGIS.

Aby zapewnić nowo tworzonym bazom obecność powyższych tabel można przy wydawaniu polecenia SQL skorzystać z możliwości jakie dają szablony:

CREATE DATABASE nazwa_bazy WITH TEMPLATE nazwa_szablonu

Za szablon może posłużyć już istniejąca baza (czyli np. "postgistemplate"). Po utworzeniu należy zadbać o odpowiednie uprawnienia.

Najprostszą metodą stworzenia tabeli przestrzennej jest utworzenie najpierw tabeli ze "zwykłymi" kolumnami" a następnie dodanie kolumn geometrii. Polecenie ma następującą składnie:

SELECT AddGeometryColumn('schemat','tabela', 'kolumna', SRID, 'typ_geometrii',wymiary)

gdzie:

'schemat','tabela'
schemat i nazwa docelowej tabeli
'kolumna'
nazwa nowej kolumny geometrii - jeśli jest jedna, najczęściej nazywana bywa "geom" lub "the_geom"
'SRID'
Odwzorowanie według kodu z tabeli spatial_ref_sys. Uwaga: Przed wykonaniem operacji na danych określonych przy pomocy współrzędnych geograficznych należy przetransformować je do współrzędnych płaskich. W przeciwnym wypadku uzyskane wyniki będą nieprawidłowe. Za bezpośrednią obsługę współrzędnych lat/lon odpowiada typ geography.
'typ_geometrii'
Podstawowe ale nie jedyne typy to (Simple Feature): POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRY etc.
'wymiary'
PostGIS obsługuje do 4 wymiarów.

Prawidłowo dodane kolumny pojawiają się w tabeli geometry_columns


ZADANIE 2.2:
1. Utwórz bazę danych "gis_baza", posiadającą kolumny niezbędne do obsługi geometrii PostGIS. Jako właściciela wskaż użytkownika "zdp"
2. Utwórz schemat o nazwie "gis" i przydziel do niego uprawnienia użytkownikowi "zdp".
3. W schemacie "gis" utwórz tabelę "obiekty" z kolumnami: id (autouzupełnienie, klucz główny) i nazwa. 4. Do tabeli "obiekty" dodaj kolumnę geometrii o nazwie "geom" (dane punktowe, brak odwzorowania (SRID: -1), dwa wymiary).

Wprowadzanie danych

Obiekty przestrzenne można wprowadzać do tabeli na wiele sposóbów. Przy pomocy klientów graficznych (QGIS, pluginy do pgAdmina), dostarczanego przy instalacji PostGIS konwertera - shp2pqsql czy przy pomocy samego SQL i polecenia INSERT.

W ostatnim z wymienionych przypadków najbardziej uniwersalną i intuicyjną funkcją, umożliwiającą wprowadzanie wielu różnych geometri jest ST_GeomFromText. Przedrostek ST oznacza Spatial Type i jest charakterystyczny dla wszystkich funkcji PostGIS od wersji 1.2+. Składnia polecenia jest następująca:

ST_GeomFromtext ('geometria w reprezentacji WKT', SRID)

Skrót WKT oznacza Well Known Text i jest to standardowy (OGC) zapis służący reprezentacji obiektów wektorowych, systemów odwzorowań i transformacji między nimi. Przykładowe geometrie w zapisie WKT:

POINT(0 0)

LINESTRING(0 0,1 1,1 2)

POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))

MULTIPOINT(0 0,1 2)

MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))

MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))

GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4))

Aby utworzyć punkt wystarczy wydać polecenie:

SELECT ST_GeomFromText('POINT(19.480556 52.069167)', 4326)

Rezultatem wykonania powyższego polecenia jest ciąg binarny w konwencji WKB (Well Known Binary) i to właśnie on jest przechowywany w kolumnie geometrii. Oczywiście PostGIS posiada odpowiednie funkcje umożliwiające odwrotny proces tzn. zamianę kolumny geometrii na tekst. Na przykład używając wyniku poprzedniego polecenia można wrócić do WKT poprzez:

SELECT ST_AsEWKT('0101000020E610000086E5CFB7057B3340317BD976DA084A40')

Aby wprowadzić obiekty do tabeli należy użyć standardowego INSERT.


ZADANIE 2.3:
1. Do utworzonej wcześniej tabeli "obiekty" dodaj trzy obiekty punktowe o dowolnych nazwach i współrzędnych.
2. Dodaj dodatkową kolumnę geometrii poligonalnej i wprowadź do niej jeden poligon.

Obiekty przestrzenne można wprowadzać do tabeli na wiele sposóbów. Przy pomocy klientów graficznych (QGIS, pluginy do pgAdmina), dostarczanego przy instalacji PostGIS konwertera - shp2pqsql czy przy pomocy samego SQL i polecenia INSERT.

QGIS jako klient graficzny PostGIS

Program Quantum GIS ma możliwość dodawania warstw PostGIS. Należy jedynie wprowadzić dane serwera i hasło użytkownika. Po prawidłowy połączeniu można dodać jako warstwę dowolną kolumnę istniejącą w tabeli geometry_columns (patrz rycina poniżej). Oprócz tego istnieje możliwość wykonywania zapytań SQL już na poziomie wczytywania warstwy.

Operacja odwrotna jest również możliwa i często jest to najszybszy sposób wczytania pliku shapefile do bazy PostGIS. Funcjonalność tą zapewnia plugin SPIT. Nie można jednak przy jego pomocy dodawać obiektów do istniejącej tabeli - na podstawie wskazanego pliku wektorowego tworzona jest nowa tabela (patrz rycina poniżej).

ZADANIE 2.4:
1. Wyświetl w QGIS wszystkie obiekty z bazy danych "obiekty".
2. Przy pomocy QGIS stwórz warstwę składająca się z poligonu obejmującego swoim wnętrzem pozostałe obiekty. Wczytaj ją do bazy PostGIS.

Autor: Michał Rzeszewski, Instytut Geokologii i Geoinformacji, UAM Poznań, mail: mrzeszewski@gmail.com
Creative Commons License
Ten utwór jest dostępny na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Na tych samych warunkach 2.5 Polska.