četrtek, november 25, 2010

Nalaganje podatkov v bazo Postgis

Najbolj enostaven način za nalaganje podatkov v podatkovno bazo Postgis je z uvozom datotek shp.
To lahko naredimo z ukazom shp2pgsql s katerim ustvarimo datoteko v jeziku sql za prenos v bazo podatkov preko ukaza psql, kot vedno to opravimo kar v ukazni vrstici.

Če imamo naprimer eno datoteko shp z našimi waypointi v projekciji EPSG:3787 (D48 za Slovenijo),
Sql datoteko z ukazi sql za vnos podatkov ustvarimo takole:


$ shp2pgsql -I -s 3787 waypoints3787.shp gis_schema.tocke > tocke.sql
Shapefile type: Point
Postgis type: POINT[2]

Datoteka tocke.sql bo vsebovala ukaz CREATE TABLE s katerim bo ustvarjena nova tabela v podatkovni bazi in vrsta ukazov INSERT za vnos podatkov.

Uporabili smo dve opciji za program shp2 shp2pgsql:
-I zato da bo ustvarjen index GiST index na koloni geometry
-s zato da PostGIS razume v kateri projekciji so koordinate, t.i. srid , v našem primeru projekcija EPSG:3787 (Gauss Kruger D48)

Datoteko bomo potem izvedli preko psql takole, kot uporabnik gis:

$ psql -d gisdb -h localhost -U gis -f tocke.sql

dean@refolo:~$ psql -d gisdb -h localhost -U gis -f tocke.sql

Postgis bo izvedel ukaze in odgovoril takole:

BEGIN
psql:tocke.sql:21: NOTICE: CREATE TABLE will create implicit sequence "tocke_gid_seq" for serial column "tocke.gid"
psql:tocke.sql:21: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tocke_pkey" for table "tocke"
CREATE TABLE
addgeometrycolumn
--------------------------------------------------------
gis_schema.tocke.the_geom SRID:3787 TYPE:POINT DIMS:2
(1 row)

INSERT 0 1
INSERT 0 1
....

INSERT 0 1
CREATE INDEX
COMMIT


Seveda lahko ukaze sql za ustvariti novo tabelo in vnesti podatke v Postgis napišemo tudi sami.
Dovolj je da spišemo programček, ki bere podatke za vnos, (največkrat bomo imeli podatke v obliki csv datoteke) in spiše ustrezne ukaze sql.
Tako tehniko sem naprimer uporabil za vnos podatkov vhodov jam iz katastra Jamarske Zveze Slovenije, kjer sem imel na razpolago datoteko Excel, ki sem jo pretvoril v csv in y enostavnim programčkom v jeziku Free Pascal sem preko parserja csv prebral polja in ustvaril ukaze za insert.

Še bolj enostavno pa je, da podatke v datoteki csv vnesemo v Postgis z ukazom COPY, na tej povezavi dobite natančno razlago postopka.

Ni komentarjev: