Scott Tiger Tech Blog

Blog technologiczny firmy Scott Tiger S.A.

Archiwum dla Grudzień 4th, 2015

Podstawy PostGIS

Autor: Piotr Karpiuk o 4. grudnia 2015

PostgreSQL został zaprojektowany z myślą o łatwej rozbudowie. Twórcy rozszerzeń mogą definiować własne typy danych, typy indeksów (korzystając z tzw. Generic Index Structure), jak również dodawać nowe funkcje. Rozszerzenie PostGIS korzysta z tych możliwości pełnymi garściami, aby uzupełnić relacyjną bazę danych o obsługę danych geograficznych, dzięki czemu duet PostgreSQL+PostGIS stał się podstawą systemów GISowych w świecie open source.

Co tam zatem mamy?

  • bogactwo funkcji do przeszukiwania, analizy, konwersji i zarządzania danymi przestrzennymi,
  • wsparcie zarówno dla danych wektorowych, jak i rastrowych,
  • zgodność ze standardami Open Geospatial Consortium,
  • PostGIS obrósł szeregiem korzystających z niego projektów takich jak Proj4 (do konwersji między odwzorowaniami kartograficznymi), GEOS, czy GDAL.

Tak jak powszechnie używanym interfejsem graficznym dla PostgreSQL jest pgAdmin, tak dla PostGISa jest to Quantum GIS (qGIS).

Tworzenie bazy z obiektami przestrzennymi jest proste:

$ createdb -U postgres Real-State
$ psql -d Real-Estate -U postgres
Real-State# CREATE EXTENSION postgis;

Tabela przestrzenna (ang. spatial table) to tabela zawierająca pole typu geometry do danych dwuwymiarowych (istnieje też typ geography do danych 4D używany do reprezentowania dużych odległości, z mniejszą ilością operujących na nim funkcji, ale uwzględniający różnice wysokości n.p.m. i krzywiznę Ziemi; ponadto mamy też typ danych raster dla danych rastrowych).

Real-State# CREATE TABLE tbl_landmarks ( ..., the_geom geometry, ... );

Wartości typu geometry możemy zapisywać w notacji Well-Known text (WKT):

INSERT INTO tbl_landmarks (the_geom) VALUES (ST_GeomFromText('POINT(-0.116190, 51.556173)'));

Oprócz POINT może być np. MULTIPOINT (zbiór punktów), LINESTRING (łamana), MULTILINESTRING (zbiór łamanych), POLYGON (wielokąt), MULTIPOLYGON, itp.

W praktyce dobrze jest dla każdej wartości typu geometry definiować odwzorowanie kartograficzne, i dlatego zamiast notacji WKT lepiej użyć tzw. Extended WKT (tutaj użyjemy odwzorowania WGS84, czyli SRID 4326 – używany w nawigacji satelitarnej i Google Maps):

INSERT INTO tbl_landmarks (the_geom) VALUES (ST_GeomFromEWKT('SRID=4326;POINT(51.556173, -0.116190)'));

Bardzo często chcemy zaimportować do bazy zawartość pliku *.shp. Do konwersji takiego pliku na polecenia INSERT do PostgreSQLa możemy użyć narzędzia shp2pgsql wchodzącego w skład PostGISu:

$ shp2pgsql -g the_geom points_file.shp tbl_landmarks > landmarks.sql

Czytaj więcej »

Tags: ,
Napisany w Bazy danych, GIS | Brak komentarzy »