Irmante Astalavista

Simsalabim!!!
Blog ini bercerita tentang dunia IT, ilmu kebumian, dan lain-lain.

Friday, January 09, 2009

TableView Peta pada Postgis

Peta dalam postgresql bisa dimungkinkan karena skema database postgresql telah mendukung data geometri yang berupa titik, garis, poligon, multi-garis, multi-poligon, dan multi-titik.
Sehingga, ketika kita membuat table view yang merupakan hasil join sembarang tabel, ditambah sebuah tabel yang memiliki kolom bertipe geometry, kemudian terhubung melalui kolom refensi yang sama, maka tabel tersebut memungkinkan untuk ditayangkan dalam bentuk peta.
Contohnya adalah script berikut, yang akan membuat view "tabelpeta_join", terdiri dari tabel bergeometri berjudul "tabel_peta", dijoin dengan
tabel biasa berjudul "tabel_data", berdasarkan ID_2008, maka kalimat querynya adalah:

CREATE OR REPLACE VIEW tabelpeta_join AS SELECT p.*, b.uid
FROM tabel_peta p
LEFT JOIN tabel_data d
ON (p.id_2008=d.id_2008);

Nah meskipun query berjalan sukses tanpa error, ditandai kalimat
Query result in 50ms,
bukan berarti table view "tabelpeta_join" dapat langsung diakses dari aplikasi GIS.

Hal ini disebabkan karena file geometri tersebut belum terdaftar pada tabel daftar data spasial-nya postgis.
Tabel daftar data spatial postgis bernama "geometry_columns". Tabel ini mengatur berbagai referensi proyeksi, kolom geometri, SRID, dari sebuah tabel.

So, table view "tabelpeta_join" tadi musti didaftarkan dulu ke tabel tersebut dengan perintah umum:

INSERT INTO geometry_columns (f_table_catalog, f_table_schema, f_table_name,
f_geometry_column, coord_dimension, srid, type) VALUES ('', 'public', 'tabelpeta_join', 'geometry', 2, 4326, 'GEOMETRY');


Bagi yang penasaran kode 2 merupakan kode referensi dimensi koordinat, dan kode 4326
merupakan kode SRID untuk proyeksi Latitude/Longitude atau derajat desimal.

Berikut adalah tahapan untuk membuat tabel peta permanen bukan view.
CREATE TABLE namatabel
AS select sum(td_2008,td_2008) as TD_2008 from prod;

--1. PRIMARY KEY:
ALTER TABLE namatabel
ADD CONSTRAINT namatabel_pkey PRIMARY KEY(gid);

--2. Tambahkan NDIMS:
ALTER TABLE namatabel
ADD CONSTRAINT enforce_dims_geometry CHECK (ndims(geometry) = 2);

--3. Tambahkan SRID:

ALTER TABLE namatabel
ADD CONSTRAINT enforce_srid_geometry CHECK (srid(geometry) = 4326);

--4. Buat index:
CREATE INDEX namatabel_geometry_sidx
ON namatabel USING gist (geometry);

--5. Daftarkan pada geometry columns:
INSERT INTO geometry_columns (f_table_catalog, f_table_schema, f_table_name,
f_geometry_column, coord_dimension, srid, type) VALUES ('', 'public', 'namatabel',
'geometry', 2, 4326, 'GEOMETRY');


Selamat mencoba,
Irmant

Labels: ,


0 Comments:

Post a Comment

<< Home