16.1. Lesson: Instalare PostGIS

Instalând funcțiile PostGIS vom putea accesa funcțiile spațiale din interiorul PostgreSQL.

Scopul acestei lecții: De a instala funcțiile spațiale, și pentru scurte demonstrații a aplicării lor.

Note

Vom utiliza PostGIS versiunea 2.1 în acest exercițiu. Instalarea și configurarea bazei de date sunt diferite pentru versiuni mai vechi, dar restul acestui material din acest modul va fi, în continuare, funcțional. Consultați documentația pentru platforma dvs, pentru asistență referitoare la instalarea și configurarea bazei de date.

16.1.1. Instalarea sub Ubuntu

PostGIS este ușor de instalat din apt.

$ sudo apt-get install postgis
$ sudo apt-get install postgresql-9.1-postgis

Într-adevăr, este atât de ușor ...

Note

În funcție de versiunea de Ubuntu pe care o utilizați, și de depozitele pe care le-ați configurat, aceste comenzi vor instala PostGIS 1.5, sau 2.x. Puteți găsi versiunea instalată prin folosirea unei interogări select PostGIS_full_version(); în psql sau într-un alt instrument.

Pentru a instala cea mai recentă versiune a PostGIS, puteți folosi următoarele comenzi.

$ sudo apt-add-repository ppa:sharpie/for-science
$ sudo apt-add-repository ppa:sharpie/postgis-nightly
$ sudo apt-get update
$ sudo apt-get install postgresql-9.1-postgis-nightly

16.1.2. Instalare sub Windows

Instalarea pe Windows este un pic mai complicată, dar nu este chiar dificilă. Rețineți că trebuie să fiți online pentru a instala pachetul PostGIS.

Mai întâi, vizitați pagina de descărcare.

Apoi urmați acest ghid.

Mai multe informații despre instalarea pe Windows pot fi găsite pe Site-ulPostGIS.

16.1.3. Instalarea pe Alte Platforme

Descărcarea PostGIS de pe site-ul are informații despre instalarea pe alte platforme, incluzând MacOSX și alte distribuții Linux

16.1.4. Configurarea Bazei de Date pentru a utiliza PostGIS

După ce PostGIS este instalat, va trebui să configurați baza de date pentru a utiliza extensiile. Dacă ați instalat versiunea PostGIS > 2.0, aceasta este la fel de simplu ca și execuția următoarei comenzi în psql, folosind baza de date de adrese din exercițiul nostru anterior.

$ psql -d address -c "CREATE EXTENSION postgis;"

Note

Dacă utilizați PostGIS 1.5 și o versiune de PostgreSQL mai mică decât 9.1, va trebui să urmați un set diferit de pași de instalare a extensiilor PostGIS pentru baza de date. Vă rugăm să consultați Documentația PostGIS pentru instrucțiuni privind modul de efectuare a acestui lucru. Există, de asemenea, unele instrucțiuni în versiunea anterioară din acest manual.

16.1.5. Funcțiile PostGIS instalate

PostGIS poate fi considerat ca o colecție de funcții din baza de date, care extind capabilitățile de bază ale PostgreSQL, astfel încât să poatădatelor spațiale. Prin ‘a face față’, înțelegem stocarea, preluarea, interogarea și manipularea. Pentru a face acest lucru, sunt instalate o serie de funcții în baza de date.

Baza noastră de date PostgreSQL, cu adrese este de acum geospațială, datorită PostGIS. Vom intra în detalii în secțiunile următoare, dar pentru început vom efectua un mic exercițiu. Să presupunem că vrem să creăm un punct pornind de la un text. Mai întâi folosim comanda psql pentru a găsi funcțiile referitoare la punct. Dacă nu v-ați conectat deja la baze de date adrese, faceți acest lucru acum. Apoi rulați:

\df *point*

Aceasta este comanda pe care o căutăm: st_pointfromtext. Pentru a parcurge lista, utilizați săgeata îndreptată în jos, apoi apăsați q pentru a reveni la consola psql.

Încercați să rulați această comandă:

select st_pointfromtext('POINT(1 1)');

Rezultat:

st_pointfromtext
--------------------------------------------
0101000000000000000000F03F000000000000F03F
(1 row)

Trei lucruri de reținut:

  • Am definit un punct la poziția 1,1 (EPSG:4326 se presupune), folosind POINT(1 1),

  • Am rulat o instrucțiune SQL, dar nu pe orice tabelă, doar pe datele introduse din promptul SQL,

  • Rândul rezultat nu prea are sens.

Rândul rezultat se află în formatul OGC denumit ‘Well Known Binary’ (WKB). Vom analiza în detaliu acest format în secțiunea următoare.

Pentru a obține rezultatele înapoi, sub formă de text, putem face o scanare rapidă prin lista funcțiilor pentru ceva care poate returna text:

\df *text

Interogarea pe care o căutăm acum este st_astext. Să o combinăm cu interogarea anterioară:

select st_astext(st_pointfromtext('POINT(1 1)'));

Rezultat:

 st_astext
------------
  POINT(1 1)
  (1 row)

Here, we entered the string POINT(1,1), turned it into a point using st_pointfromtext(), and turned it back into a human-readable form with st_astext(), which gave us back our original string.

Un ultim exemplu, înainte de a intra cu adevărat în detaliile de utilizare PostGIS:

select st_astext(st_buffer(st_pointfromtext('POINT(1 1)'),1.0));

Care este rezultatul acestuia? S-a creat un tampon de 1 grad în jurul punctului nostru, și s-a returnat un rezultat sub formă de text.

16.1.6. Sistemele de Referință Spațială

În plus față de funcțiile PostGIS, extensia conține o colecție cu definiții ale sistemelor de referință spațială (SRS), așa cum au fost stabilite de către European Petroleum Survey Group (EPSG). Acestea sunt utilizate pentru operațiuni de conversie a sistemelor de coordonate de referință (CRS).

Putem inspecta aceste definiții SRS din baza noastră de date, pe măsură ce acestea sunt stocate în tabelele normale ale bazei de date.

În primul rând, să ne uităm la schema din tabel, introducând următoarea comandă în fereastra psql:

\d spatial_ref_sys

Rezultatul ar trebui să fie acesta:

Table "public.spatial_ref_sys"
   Column   |          Type           | Modifiers
 -----------+-------------------------+-----------
  srid      | integer                 | not null
  auth_name | character varying(256)  |
  auth_srid | integer                 |
  srtext    | character varying(2048) |
  proj4text | character varying(2048) |
  Indexes:
"spatial_ref_sys_pkey" PRIMARY KEY, btree (srid)

You can use standard SQL queries (as we have learned from our introductory sections), to view and manipulate this table - though its not a good idea to update or delete any records unless you know what you are doing.

One SRID you may be interested in is EPSG:4326 - the geographic / lat lon reference system using the WGS 84 ellipsoid. Let’s take a look at it:

select * from spatial_ref_sys where srid=4326;

Rezultat:

srid      | 4326
auth_name | EPSG
auth_srid | 4326
srtext    | GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS
84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,
0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,
AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
proj4text | +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs

The srtext is the projection definition in well known text (you may recognise this from .prj files in your shapefile collection).

16.1.7. In Conclusion

Acum aveți funcțiile PostGIS instalate în copia dvs. de PostgreSQL. Astfel, veți putea să faceți uz de funcțiile spațiale extinse ale PostGIS.

16.1.8. What’s Next?

Mai departe, veți învăța cum se reprezintă entitățile spațiale într-o bază de date.