17.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.

17.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

Depending on which version of Ubuntu you are using, and which repositories you have configured, these commands will install PostGIS 1.5, or 2.x. You can find the version installed by issuing a select PostGIS_full_version(); query with psql or another tool.

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

17.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.

First Visit the download page.

Then follow this guide.

More information about installing on Windows can be found on the PostGIS website.

17.1.3. Instalarea pe Alte Platforme

The PostGIS website download has information about installing on other platforms including macOS and on other linux distributions

17.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

If you are using PostGIS 1.5 and a version of PostgreSQL lower than 9.1, you will need to follow a different set of steps in order to install the postgis extensions for your database. Please consult the PostGIS Documentation for instructions on how to do this. There are also some instructions in the previous version of this manual.

17.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.

Our PostgreSQL address database is now geospatially enabled, thanks to PostGIS. We are going to delve a lot deeper into this in the coming sections, but let’s give you a quick little taster. Let’s say we want to create a point from text. First we use the psql command to find functions relating to point. If you are not already connected to the address database, do so now. Then run:

\df *point*

This is the command we’re looking for: st_pointfromtext. To page through the list, use the down arrow, then press q to quit back to the psql shell.

Try running this command:

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

Result:

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.

To get the results back as text, we can do a quick scan through the function list for something that returns text:

\df *text

The query we’re looking for now is st_astext. Let’s combine it with the previous query:

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

Result:

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

Aici, am intrat în șirul POINT(1,1), transformându-l într-un punct folosind st_pointfromtext(), și aducându-l înapoi într-o formă ușor de înțeles de către utilizator cu st_astext(), care returează șirul de caractere inițial.

One last example before we really get into the detail of using 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.

17.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.

First, let’s look at the schema of the table by entering the following command in the psql prompt:

\d spatial_ref_sys

The result should be this:

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)

Puteți utiliza interogări SQL standard (așa cum am învățat din secțiunile introductive), pentru a vizualiza și manipula acest tabel - totuși, actualizarea sau ștergerea înregistrărilor nu reprezintă o idee bună dacă nu știți ce faceți.

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;

Result:

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

srtext reprezintă definiția proiecției în well known text (puteți recunoaște acest lucru din fișierele .prj din colecția dvs. de fișiere shape).

17.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.

17.1.8. What’s Next?

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