nedelja, september 26, 2010

Priprava modela za Postgis

Za prvo ureditev Postgisa po nastvitvi, mi je veliko pomagal dober članek, ki ga je napisal in objavil na spletu Paolo Corti:
http://www.paolocorti.net/2008/01/30/installing-postgis-on-ubuntu/
v katerem med drugim opiše pripravo modela, ki ga lahko potem uporabljamo za pripravo baz podatkov in si s tem prihranimo precej dela za nadaljne nastavitve novih baz podatkov,
Nastavitev poteka kar preko ukazne vrstice.

Za pripravo modela se povežemo kot uporabnik postgres:

sudo su postgres

Pripravimo bazo podatkov, ki bo služila kot model, imenujemo jo npr. postgistemplate:

createdb postgistemplate

Ji dodamo možnost za upravljanje preko proceduralnega jezika PL/pgSQL za rdbms PostgreSQL, ki ga potrebuje PostGIS, v ukazno vrstico vnesemo:

createlang plpgsql postgistemplate

preko odjemalca psql izvršimo naslednja dva ukaza:

psql -d postgistemplate -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql
psql -d postgistemplate -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql

Naš template je pripravljen, dodano je bilo veliko funkcij in sta bili ustvarjeni dve tabeli - geometry_columns and spatial_ref_sys.
Lahko sedaj poskusimo model postgistemplate, ki smo ga pravkar ustvarili:
psql -d postgistemplate -c "SELECT postgis_full_version();"



postgis_full_version
-------------------------------------------------------------------------------------------------------
POSTGIS="1.5.1" GEOS="3.2.2-CAPI-1.6.2" PROJ="Rel. 4.7.1, 23 September 2009" LIBXML="2.7.6" USE_STATS


Tabela spatial_ref_sys vsebuje podatke o projekcijah, ki jih lahko uporabljamo v bazi podatkov za vnos geografskih objektov.
Spatial_ref_sys je bila ustvarjena s sledečim ukazom sql (ko je bila ustvarjena baza podatkov z ukazom createdb postgistemplate):
CREATE TABLE spatial_ref_sys
(
srid integer NOT NULL,
auth_name character varying(256),
auth_srid integer,
srtext character varying(2048),
proj4text character varying(2048),
CONSTRAINT spatial_ref_sys_pkey PRIMARY KEY (srid)
)
WITH (
OIDS=FALSE
);

V stolpcu srid so identifikacijske številke projekcij (EPSG), medtem ko je v stolpcu proj4text definicija projekcije kot jo uporabljamo v knjižnici proj4.
Leta 2008 je Geodetska uprava registrala pri skrbniku zbirke EPSG parametra koordinatnih sistemov SI-D48 (pod številko CODE 3787) in SI-D96 (pod številko CODE 3794) tako da jih sedaj dobimo tudi v tej tabeli.
Če pa bi v tej tabeli ne dobili parametrov koordinatnega sistema ki ga rabimo, jih lahko vnesemo z ukazom sql s programom psql vedno kot uporabnik postgres. Naprimer če bi hoteli ročno vnesti parametre D48 z 7 parametri za Primorsko in Notranjsko (operacija seveda ni potrebna ker sedaj imamo parametre za EPSG:3787), se najprej povežemo na bazo podatkov:

postgres@veciaruga:/home/dean$ psql -d postgistemplate
psql (8.4.4)

in potem vnesemo projekcijo D48 s 7 parametri za proj4, ji damo npr. identifikacijsko številko 111111 ker je še neobstoječa in si jo tako z lahkoto zapomnimo:

postgistemplate=# INSERT INTO spatial_ref_sys (srid, auth_name, auth_srid, srtext, proj4text) VALUES (111111, 'DEAN', 111111, '', '+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +units=m +towgs84=355.803451,274.321338,462.96856,9.087389,6.490416,-14.502467,20.888271 +no_defs -f %.3f');

odgovor ki potrjuje da je operacija izvršena:
INSERT 0 1

če se želite prepričati, da je v tabeli spatial_ref_sys res prisotna nova projekcija, kar izvedete v programu psql ukaz sql:
postgistemplate=# select * from spatial_ref_sys where srid=111111; in dobite tole:


srid | auth_name | auth_srid | srtext | proj4text
--------+-----------+-----------+--------+-------------------------------------------------------------------------------------------------------
111111 | DEAN | 111111 | | +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +units=m
+towgs84=355.803451,274.321338,462.96856,9.087389,6.490416,-14.502467,20.888271 +no_defs -f %.3f

za izhod iz programa psql vpišemo ukaz:

postgistemplate-# \q
postgres@veciaruga:/home/dean$

Sedaj ko je model postgistemplate pripravljen ga lahko uporabimo za pripravo naših baz podatkov, tako da bodo vsakič vsebovale vse tabele in projekcije in ne bo treba vsakič ponavljati vseh prejšnjih ukazov ko bomo želeli ustvariti novo bazo podatkov.

Ni komentarjev: