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.

Notă

We will assume the use of PostGIS version 2.1 or newer in this exercise. The installation and database configuration are different for older versions, but the rest of this material in this module will still work. Consult the documentation for your platform for help with installation and database configuration.

16.1.1. Instalarea sub Ubuntu

PostGIS este ușor de instalat din apt.

$ sudo apt install postgresql
$ sudo apt install postgis

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

Notă

The exact versions that will be installed depend on which version of Ubuntu you are using and which repositories you have configured. After installing you can check the version by issuing a select PostGIS_full_version(); query with psql or another tool.

To install a specific version (eg, PostgreSQL version 13 and PostGIS 3), you can use the following commands.

$ sudo apt install wget ca-certificates
$ sudo lsb_release -a
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
$ sudo apt-get update
$ sudo apt install postgis postgresql-13-postgis-3

16.1.2. Instalare sub Windows

Installing on Windows can be done from binary packages using a normal Windows installation dialogs.

First Visit the download page. Then follow this guide.

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

16.1.3. Instalarea pe Alte Platforme

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

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;"

Notă

Depending on your version, you could find more instructions on how to spatially enable a database at https://postgis.net/docs/postgis_administration.html#create_spatial_db.

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.

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)');

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.

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)'));

Rezultat:

 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.

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.

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;

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

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

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.