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.