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.
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
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.
Descărcarea PostGIS de pe site-ul are informații despre instalarea pe alte platforme, incluzând MacOSX și alte distribuții Linux
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.
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.
Î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).
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.
Mai departe, veți învăța cum se reprezintă entitățile spațiale într-o bază de date.