Bayu Kurniawan R

Think about GIS, Linux and Oracle

You are currently browsing the PostGIS category.

Bikin Trigger untuk Insert/Update the_geom

Apabila kita mempunyai Layer yang bertipe point, maka kita bisa menambahkan/mengupdate point tersebut dalam database PostgreSQL.

Misal kita mempunyai tabel map_point yang mempunyai field2 sebagai berikut:

TABLE map_point
(
id character varying(254),
nama character varying(254),
x double precision,
y double precision,
the_geom geometry,
)

dimana x dan y adalah koordinat titik tersebut dan the_geom adalah koordinat dalam format PostGIS.

Kita bisa menambah/mengupdate titik tersebut tanpa menyentuh field the_geom dengan membuat Trigger.

Pertama kita membuat function yang bernama map_point_change(), seperti dibawah ini :

CREATE OR REPLACE FUNCTION map_point_change()
RETURNS trigger AS
$BODY$DECLARE
the_geom_insert text;
the_geom_update text;

BEGIN
IF (TG_OP = ‘INSERT’) THEN
the_geom_insert = ST_GeomFromText(’POINT(’|| new.x || ‘ ‘ || new.y ||’)', 4326);
UPDATE map_aset SET the_geom = the_geom_insert WHERE gid=new.gid;

ELSIF (TG_OP = ‘UPDATE’) THEN
IF new.x <> old.x OR new.y <> old.y THEN
the_geom_update = ST_GeomFromText(’POINT(’|| new.x || ‘ ‘ || new.y ||’)', 4326);
UPDATE map_aset SET the_geom = the_geom_update WHERE gid=new.gid;

END IF;
RETURN NEW;
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE ‘plpgsql’ VOLATILE
COST 100;
ALTER FUNCTION map_point_change() OWNER TO postgres;

Lalu buat Trigger seperti dibawah ini :

CREATE TRIGGER map_point_change
AFTER INSERT OR UPDATE
ON map_point FOR EACH ROW
EXECUTE PROCEDURE map_point_change();

8 comments

PostgreSQL / PostGIS Mapfile

PostGIS di support secara langsung oleh MapServer dan harus dicompile dalam MapServer agar dapat bekerja. Dalam banyak kasus , library PostgreSQL dan PostGIS (.dll atau .so) harus ada di environment path sistem agar fungsi library dapat bekerja. Hal ini termasuk library libpq dan libpostgis.

Contoh Map File:

LAYER NAME pg_test

STATUS ON

TYPE POLYGON

CONNECTIONTYPE POSTGIS

CONNECTION “host=localhost dbname=gmap user=julio password=julio port=5432″

DATA “wkb_geometry FROM province”

CLASS …

END

END

parameter CONNECTION dapat tidak sesuai dengan urutan. dbname harus diisi. host default adalah localhost, port default 5432 – standard port untuk PostgreSQL.

MapServer memiliki bug berkaitan dengan penulisan mapfile. Sebaiknya menggunakan huruf kecil untuk menghindari kesalahan. Geometrycolumn secara default bernama the_geom jika utility shp2pgsql digunakan untuk load data, atau wkb_geometry jika ogr2ogr digunakan.

Untuk informasi lebih lanjut tentang PostGIS dan MapServer bisa melihat dokumentasi PostGIS : http://postgis.refractions.net/docs/

menggunakan PostGIS views dengan Mapserver

Jika Anda ingin menggunakan PostGIS views dengan Mapserver pastikan Anda :

1) anda perlu field oid dalam view
2) masukan data dalam tabel geometry_columns untuk view

Contoh:
create view milieu.vw_bedrijven_publiek as select bedrijven.oid, * from milieu.bedrijven as bedrijven where vertrouwelijk=0;

INSERT INTO geometry_columns VALUES(”, ‘milieu’, ‘vw_bedrijven_publiek’, ‘the_geom’, 2, 28992, ‘POINT’);

Menggunakan Tabel tanpa oid

Jika tabel Anda tidak memiliki field oid, Anda dapat menetapkan pada objek data seperti ini :
DATA “your_geometric_column from your_table_name using unique your_geometric_column”

2 comments