Tugas SIG-1

32
TUGAS KULIAH PENGANTAR SISTEM INFORMASI GEOGRAFI Fungsi Spasial pada Relational Database Disusun Oleh : Aufa Ikhsan 9474 Jayanthi 9560 Yuyun Tinggarlyana 9750

description

sig

Transcript of Tugas SIG-1

Page 1: Tugas SIG-1

TUGAS KULIAH PENGANTAR SISTEM INFORMASI GEOGRAFI

Fungsi Spasial pada Relational Database

Disusun Oleh :Aufa Ikhsan 9474

Jayanthi 9560Yuyun Tinggarlyana 9750

Chocky Haloman 9794Bramantyo Erlangga 9576

Ilmu KomputerUniversitas Gadjah Mada Jogjakarta

Page 2: Tugas SIG-1

Fungsi Fungsi Spasial dalam basisdata relasional

Dewasa ini, kebutuhan atas sistem informasi geografi meningkat pesat. Terutama kebutuhan untuk dapat menampilkan data atributif dan data spasial dari suatu wilayah berdasarkan geografi. Pada awalnya, penyimpanan data informasi geografi masih menggunakan sistem berkas langsung. Aplikasi GIS membuat tipe datanya sendiri. Tetapi pada perkembangannya aplikasi GIS memilih untuk membedakan tempat penyimpanan data atributif menggunakan sistem basisdata relasional untuk menyimpan data geografis.

Pada dewasa ini, informasi spasial mulai dimasukkan juga ke dalam basisdata. Beberapa vendor basisdata terkemuka seperti MySQL, Oracle, dan PostgreSQL, mengimplementasikan basisdata yang mendukung penyimpanan informasi spasial. Pada masa depan, diharapkan ada standar tersendiri khusus untuk basisdata yang 100% ditujukan untuk penyimpanan data geografis.

Standarisasi tipe data, fungsi, dan kapabilitas informasi geografis dibuat oleh OpenGIS Consortium(Open GeoSpatial Consortium, Inc) (www.opengis.org). Standarisasi mutlak diperlukan agar data bisa dipertukarkan antar basisdata seperti syntax SQL. Standarisasi OpenGIS untuk database mencakup tipe data dan fungsi standar yang harus ada di database. Dibawah ini adalah tipe data geometry dan turunannya menurut standar OpenGIS.

Beberapa fungsi standar yang ditentukan OpenGIS adalah Dimension(geometry), yang menghasilkan ukuran dimensi bangun geometry, GeometryType(geometry): string, yang menghasilkan tipe bangun geometry (polygon, dkk), SRID(geometry), yang menghasilkan Spatial Reference ID (SRID) dari suatu bangun geometry, yang mengacu pada letak.

Dalam pengerjaan tugas ini kami menggunakan database relasional PostgreSQL. PostgreSQL dikenal sebagai database handal yang fiturnya lengkap, serta mendukung Object Oriented Database. Selain itu untuk visualisasi sebagian objek spasial, kami

Page 3: Tugas SIG-1

menggunakan scripting language PHP yang memanfaatkan mode Scalable Vector Graphic pada browser yang memiliki plugin SVG Viewer dari Adobe.Ekstension (pengembangan) postgreSQL untuk objek spasial dinamakan postGIS (http://postgis.refractions.net). postGIS dikembangkan oleh Refraction Research, Inc. postGIS dibuat berdasarkan standarisasi yang dikembangkan oleh openGIS.

Pada saat instalasi postgre, kami menginstall postGIS sekaligus mengintegrasikan postGIS pada template1. Dimana objek template1 adalah template yang digunakan untuk membuat struktur database standar. Jadi standarnya, semua database yang dibuat akan didukung fungsi geospasial. Ketika sebuah database dibuat, akan dilengkapi dengan table yang berisi informasi SRID seluruh dunia.

Kami membuat database bernama myGIS di PostgreSQL, dengan syntax :

CREATE TABLE datagis( nama_objek varchar(20) primary key, geom_objek geometry not null, warna varchar(6) not null)

output : Query returned successfully with no result in 48 ms.

dimana table tersebut akan berisi nama objek dan geometry dari objek postGIS. Warna akan diisi informasi warna fill dari suatu objek ketika akan ditampilkan di format SVG.

catatan: jika ingin menggunakan full support openGIS, penambahan kolom geometry sebaiknya menggunakan syntax sql seperti

SELECT AddGeometryColumn('gisdata', 'geom_objek', -1,'GEOMETRY',2);

Karena jika tidak digunakan addGeometryColumn, SRID (Spatial Reference ID yang bereferensi ke dunia nyata, terutama tentang peta) akan terisi -1, dimana jika data yang disimpan adalah data peta, dipastikan peta tersebut akan kacau, karena SRID nya -1.

mensupport beberapa tipe data, yang didaftar dibawah ini :

Nama Ukuran Keterangan Cara Mendeskripsikan

point 16 bytes Titik, direpresentasikanDengan himpunan x dan y.

(x,y)

line 32 bytes

Garis tak terbatas (belum diimplementasikan 100%),direpresentasikan dengan kumpulan titik.

((x1,y1),(x2,y2))

lseg 32 bytesGaris Terbatas,Direpresentasikan dengan Kumpulan titik.

((x1,y1),(x2,y2))

box 32 bytes Segi Empat, merupakan ((x1,y1),(x2,y2))

Page 4: Tugas SIG-1

Nama Ukuran Keterangan Cara Mendeskripsikan

Sebuah segi empat, bisaPersegi panjang atauBisa bujur sangkar.Direpresentasikan denganHimpunan titik pojok kiriDan pojok kanan.

path 16+16n bytes

Jalur tertutup (miripSeperti polygon)

((x1,y1),...)

path 16+16n bytes

Jalur terbuka (jalan) [(x1,y1),...]

polygon 40+16n bytes

Polygon (mirip seperti jalur tertutup)

((x1,y1),...)

circle 24 bytes Lingkaran <(x,y),r> (titik tengah dan jari-jari)

Jika melihat dari struktur data yang disupport oleh postGIS, terlihat bahwa kurva belum disupport. Salah satu bentuk kurva adalah lingkaran, yang disupport postGIS, tetapi kurva kurva yang lain belum disupport.

PostgreSQL mensupport GiST(Generalized Search Tree) indexing untuk mengindex kolom spasial. Kami menggunakan indexing spasial untuk kolom geom._objek dengan mengeksekusi perintah sql berikut.

CREATE INDEX index_geom ON datagis USING GIST(geom_objek)

output : Query returned successfully with no result in 62 ms.

Setelah membuat table, kami memasukkan data yang merepresentasikan beberapa kotak dan polygon yang saling overlap, bersinggungan, mengandung, titik, garis, dsb.

Objek yang akan kami masukkan adalah sebagai berikut.

INSERT INTO datagis(nama_objek, geom_objek, warna) VALUES ('persegipanjang5',GeomFromText('POLYGON((-30 -30, -30 30, 30 30, 30 -30, -30 -30))'),'F00');

INSERT INTO datagis(nama_objek, geom_objek, warna) VALUES ('persegipanjang1',GeomFromText('POLYGON((0 0, 0 20, 10 20, 10 0, 0 0))'),'0F0');

INSERT INTO datagis(nama_objek, geom_objek, warna) VALUES ('persegipanjang2',GeomFromText('POLYGON((0 0, 0 -20, -10 -20, -10 0, 0 0))'),'00F');INSERT INTO datagis(nama_objek, geom_objek, warna) VALUES ('persegipanjang3',GeomFromText('POLYGON((0 0, 20 0, 20 -10, 0 -10, 0 0))'),'F0F');

Page 5: Tugas SIG-1

INSERT INTO datagis(nama_objek, geom_objek, warna) VALUES ('persegipanjang4',GeomFromText('POLYGON((5 5, 5 -5, -5 -5, -5 5, 5 5))'),'FFF');

Berikut adalah ilustrasi hasil dari database yang telah dimasukkan jika ditampilkan dalam format SVG. Kami menggunakan fungsi postgreSQL AsSVG(geometry) untuk menampilkan objek geometry dalam format SVG.

Terlihat bahwa terdapat 5 Objek persegi panjang yang saling bertumpuk dan berjejer. Berikut daftar nama objek (nama objek : warna) :

Persegipanjang5 : merahPersegipanjang4 : putihPersegipanjang1 : hijauPersegipanjang2 : biruPersegipanjang3 : unguPersegipanjang6 : oranye

Tepat pada pertengahan persegi warna putih, adalah titik koordinat 0,0.

Page 6: Tugas SIG-1

Fungsi fungsi spasial postgreSQL :

Fungsi Relasi Geometri :

Distance(geometry, geometry)

Fungsi distance akan menghasilkan jarak antara 2 objek geometri dalam tipe float8.

Contoh penggunaan :

SELECT distance((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang6')

)

SELECT distance( (SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1'), (SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang2'))

Hasil : (persegi 1 dan 2 bersinggungan, maka jarak diantara mereka adalah 0)

distance---------- 10(1 row)

distance---------- 0(1 row)

Equals(geometry, geometry)

Fungsi equals akan menghasilkan nilai TRUE jika dua objek geometri adalah sama ukurannya.

Contoh penggunaan :

SELECT equals((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang5')

)

SELECT equals( (SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang2'), (SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang2'))

Page 7: Tugas SIG-1

Hasil : (persegi 2 dan 2 adalah sama, maka mereka equal)

equals-------- f(1 row)

equals-------- t(1 row)

Disjoint(geometry, geometry)

Fungsi disjoint akan menghasilkan nilai TRUE jika dua objek geometri saling terpisah (tidak berhubungan sama sekali).

Contoh penggunaan : (persegi 4 dan 1,2,3 saling berpotongan / overlay, persegi 6 dan 1,2,3,4 saling terpisah)

SELECT disjoint((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1')

)

SELECT disjoint( (SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang2'), (SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang6'))

Hasil : (persegi 4 dan 1 berpotongan, maka hasilnya adalah false / f)

disjoint---------- f(1 row)

disjoint-------- t(1 row)

Intersects(geometry, geometry)

Fungsi Intersects akan menghasilkan nilai TRUE jika dua objek geometri saling berpotongan, jika tidak menghasilkan nilai FALSE.

Contoh penggunaan : (persegi 4 dan 1,2,3 saling berpotongan / overlay, persegi 6 dan 1,2,3,4 saling terpisah)

SELECT Intersects ((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1')

Page 8: Tugas SIG-1

)

SELECT Intersects ( (SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang2'), (SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang6'))

Hasil : (persegi 4 dan 1 berpotongan, maka hasilnya adalah true / t )

intersects------------ t(1 row)

intersects -------- f(1 row)

Touches(geometry, geometry)

Fungsi Touches akan menghasilkan nilai TRUE jika dua objek geometri saling bersentuhan di satu titik saja, jika tidak menghasilkan nilai FALSE.

Contoh penggunaan : (persegi 1 dan 2 bersentuhan di 1 titik, persegi 4 dan 1 berpotongan di banyak titik)

SELECT Touches ((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang2')

)

SELECT Touches ( (SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1'), (SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'))

Hasil : (persegi 1 dan 2 bersentuhan hanya di 1 titik saja, maka hasilnya adalah true / t )

touches------------ t(1 row)

touches -------- f(1 row)

Crosses(geometry, geometry)

Fungsi Crosses akan menghasilkan nilai TRUE jika dua objek geometri saling bersliangan, jika tidak menghasilkan nilai FALSE.

Page 9: Tugas SIG-1

Contoh penggunaan : (persegi 1 dan 2 bersentuhan di 1 titik, persegi 4 dan 1 berpotongan di banyak titik)

SELECT crosses ((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang2')

)

Hasil : (persegi 1 dan 2 tidak bersilangan )

crosses------------ f(1 row)

Within(geometry A, geometry B)

Fungsi Within akan menghasilkan nilai TRUE jika geometri A berada di dalam geometri B.

Contoh penggunaan : (persegi 1 berada di dalam persegi 5) , (mencari persegi yang berada di dalam persegi 5)

SELECT within ((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang5')

)

SELECT nama_objek FROM datagis WHERE WITHIN(geom_objek, (SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang5')) AND nama_objek<>'persegipanjang5'

Hasil : persegi selain persegi 5 terletak di dalam persegi 5 (warna merah)

within-------- t(1 row)

nama_objek----------------- persegipanjang1 persegipanjang2 persegipanjang3 persegipanjang4 persegipanjang6(5 rows)

Contains(geometry A, geometry B)

Page 10: Tugas SIG-1

Fungsi Contains akan menghasilkan nilai TRUE jika geometri A mengandung geometri B.

Contoh penggunaan : (persegi 1 berada di dalam persegi 5) , (mencari persegi yang berada di dalam persegi 5)

SELECT contains ((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang5'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1')

)

SELECT nama_objek FROM datagis WHERE CONTAINS( (SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang5'), geom_objek) AND nama_objek<>'persegipanjang5'

Hasil : persegi selain persegi 5 terletak di dalam persegi 5 (warna merah)

contains-------- t(1 row)

nama_objek----------------- persegipanjang1 persegipanjang2 persegipanjang3 persegipanjang4 persegipanjang6(5 rows)

Overlaps(geometry, geometry)

Fungsi overlaps akan menghasilkan nilai TRUE jika sebagian dari dua objek geometri saling bertumpuk di suatu area, jika tidak menghasilkan nilai FALSE.

Contoh penggunaan : (persegi 1 dan 2 tidak overlap, persegi 4 dan 1 overlap)

SELECT Overlaps ((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang2')

)

SELECT Overlaps ((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1')

)

Page 11: Tugas SIG-1

Hasil : (persegi 1 dan 2 tidak bersilangan )

overlaps ------------ f(1 row)

overlaps ------------ t(1 row)

Fungi proses geometri :

Centroid(geometry)

Fungsi centroid akan menghasilkan nilai berupa titik tengah dari suatu objek geometri, dalam format objek POINT. Untuk menampilkan diconvert ke Well Known Text Format menggunakan fungsi ASTEXT(geometry).

Contoh penggunaan : (

SELECT ASTEXT( Centroid( (SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4') ))

Hasil : (titik tengah persegi panjang4 warna putih, yaitu titik 0,0)

astext------------ POINT(0 0)(1 row)

Area(geometry)

Fungsi area akan menghasilkan nilai berupa luas dari sebuah objek geometri, dalam format float (bilangan real).

Contoh penggunaan : (

SELECT area((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'))

Hasil : Luas dari persegipanjang 4 (10 x 10)

area------ 100(1 row)

Boundary(geometry)

Page 12: Tugas SIG-1

Fungsi boundary akan menghasilkan nilai berupa batas-batas pinggir dari sebuah objek geometri, dalam format objek LINESTRING.

Contoh penggunaan : (

SELECT astext(boundary((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4')))

Hasil : Batas pinggir dari objek persegi panjang berupa objek linestring

astext------------------------------------- LINESTRING(5 5,5 -5,-5 -5,-5 5,5 5)(1 row)

Length(geometry)

Fungsi length akan menghasilkan nilai berupa panjang dari sebuah objek geometri, biasanya berupa garis.

Contoh penggunaan : ( menghitung keliling dari persegipanjang 4)

SELECT LENGTH(BOUNDARY(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'))

Hasil : Keliling dari persegi panjang 4 warna putih, 10 x 4 = 40

length-------- 40(1 row)

Intersection(geometry, geometry)

Fungsi intersection akan menghasilkan nilai berupa objek geometri yang menggambarkan lokasi spasial yang saling berpotongan.

Contoh penggunaan : mencari perpotongan antara persegi 4 dengan persegi 1

SELECT ASTEXT( INTERSECTION(

(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1')

))

Untuk menampilkan dalam format SVGSELECT AsSVG( INTERSECTION(

(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),

Page 13: Tugas SIG-1

(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1') ))

Hasil : Polygon dari perpotongan persegi 4 dan persegi 1

astext-------------------------------- POLYGON((5 5,5 0,0 0,0 5,5 5))(1 row)

Hasil Visualisasi SVG (warna abu2 adalah warna intersection):

Difference(geometry A, geometry B)

Fungsi difference akan menghasilkan nilai berupa objek geometri yang merupakan wilayah spasial geometri A dikurangi wilayah spasial geometri B.

Contoh penggunaan : mencari pengurangan antara persegi 4 dengan persegi 1

SELECT ASTEXT( DIFFERENCE(

(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1')

))

Page 14: Tugas SIG-1

Untuk menampilkan dalam format SVGSELECT AsSVG( DIFFERENCE(

(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1')

))

Hasil : Polygon dari pengurangan persegi 4 dan persegi 1

astext-------------------------------------------- POLYGON((5 0,5 -5,-5 -5,-5 5,0 5,0 0,5 0))(1 row)

Visualisasi SVG :

GeomUnion(geometry, geometry)

Fungsi geomUnion akan menghasilkan nilai berupa objek geometri yang merupakan wilayah spasial geometri A ditambah wilayah spasial geometri B.

Contoh penggunaan : mencari wilayah spasial gabungan antara persegi 4 dengan persegi1

SELECT ASTEXT( GEOMUNION(

Page 15: Tugas SIG-1

(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1')

))

Untuk menampilkan dalam format SVGSELECT AsSVG( GEOMUNION (

(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1')

))

Hasil : Polygon dari pengurangan persegi 4 dan persegi 1

astext-------------------------------------------------------- POLYGON((5 0,5 -5,-5 -5,-5 5,0 5,0 20,10 20,10 0,5 0))(1 row)

Visualisasi SVG :

Fungsi untuk mengakses dan memanipulasi data geometri.

AsText(geometry)

Page 16: Tugas SIG-1

Fungsi asText akan menghasilkan nilai berupa string dalam format Well-Known-Text (WKT) yang ditetapkan oleh OpenGIS Consortium. Format WKT merupakan format yang mudah dipahami oleh manusia.

Contoh penggunaan :

SELECT ASTEXT(geom_objek) FROM datagis;

Hasil :

astext------------------------------------------------ POLYGON((-30 -30,-30 30,30 30,30 -30,-30 -30)) POLYGON((0 0,0 20,10 20,10 0,0 0)) POLYGON((0 0,0 -20,-10 -20,-10 0,0 0)) POLYGON((0 0,20 0,20 -10,0 -10,0 0)) POLYGON((5 5,5 -5,-5 -5,-5 5,5 5)) POLYGON((30 30,30 20,20 20,20 30,30 30))(6 rows)

AsBinary(geometry)

Fungsi AsBinary akan menghasilkan nilai binary dalam format Well-Known-Binary (WKB) yang ditetapkan oleh OpenGIS Consortium. Format WKB merupakan format yang susah dipahami manusia, tetapi efektif dalam penghitungan dan konversi oleh computer.

Contoh penggunaan :

SELECT ASBINARY(geom_objek) FROM datagis WHERE nama_objek='persegipanjang1';

Hasil :

asbinary

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- \001\003\000\000\000\001\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0004@\000\000\000\000\000\000$@\000\000\000\000\000\0004@\000\000\000\000\000\000$@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000(1 row)

SRID(geometry)Fungsi SRID akan menghasilkan nilai SRID(Spatial Reference ID) yang merupakan keterkaitan antara data spasial dengan lokasi spasial sesungguhnya di muka bumi. (mirip seperti id lokasi tertentu di muka bumi ini).

Page 17: Tugas SIG-1

Contoh penggunaan :

SELECT SRID(geom_objek) FROM datagis;

Hasil : (semua data -1 srid nya karena memang tidak direferensikan dengan keadaan dunia nyata)

srid------ -1 -1 -1 -1 -1 -1(6 rows)

Dimension(geometry)

Fungsi dimension akan menghasilkan tipe dimensi benda geometry (bisa 1 dimensi, 2 dimensi, bahkan 3 dimensi).

Contoh penggunaan :

SELECT Dimension(geom_objek) FROM datagis;

Hasil : semua data 2 dimensi karena merupakan bangun datar semua(segi empat)

dimension----------- 2 2 2 2 2 2(6 rows)

Envelope(geometry)

Fungsi envelope akan menghasilkan polygon yang merupakan batas-batas maksimal dari nilai x dan y point dari sebuah geometry objet (sebuah segi 4 yang dapat tepat memuat objek geometri tersebut).

Contoh penggunaan : mencari batas terluar dari persegi 4 digabung persegi 1

SELECT ASTEXT(ENVELOPE( GEOMUNION(

(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1')

))

Page 18: Tugas SIG-1

Hasil :

astext------------------------------------------ POLYGON((-5 -5,-5 20,10 20,10 -5,-5 -5))(1 row)

Visualisasi SVG(warna merah adalah polygon bounding box, warna abu-abu adalah union persegi 1 dan persegi 4) :

ExteriorRing(geometry)

Fungsi ExteriorRing akan menghasilkan tipe LineString yang merupakan batas luar dari sebuah polygon, karena terkadang sebuah multipolygon bisa memiliki beberapa polygon.

Contoh penggunaan :

SELECT ASTEXT(ExteriorRing(geom_objek)) FROM datagis;

Hasil :

astext------------------------------------------------- LINESTRING(-30 -30,-30 30,30 30,30 -30,-30 -30) LINESTRING(0 0,0 20,10 20,10 0,0 0) LINESTRING(0 0,0 -20,-10 -20,-10 0,0 0)

Page 19: Tugas SIG-1

LINESTRING(0 0,20 0,20 -10,0 -10,0 0) LINESTRING(5 5,5 -5,-5 -5,-5 5,5 5) LINESTRING(30 30,30 20,20 20,20 30,30 30)(6 rows)

GeometryType(geometry)

Fungsi GeometryType akan menghasilkan tipe String yang merupakan Jenis dari objek geometri, bisa berisi linestring, polygon, atau point.

Contoh penggunaan :

SELECT GeometryType (geom_objek) FROM datagis;

Hasil :

geometrytype-------------- POLYGON POLYGON POLYGON POLYGON POLYGON POLYGON(6 rows)

Constructor Class Geometry

GeomFromText(text,[<srid>]) , GeomFromWKB(bytea,[<srid>])

Fungsi GeomFromText digunakan untuk memperoleh objek geometri dari sebuah WKT (Well Known Text). SRID jika tidak diisi defaultnya diisi dengan -1.

Fungsi GeomFromBinary digunakan untuk memperoleh objek geometri dari sebuah WKB (Well Known Binary). SRID jika tidak diisi defaultnya diisi dengan -1.

Contoh penggunaan :

INSERT INTO datagis(nama_objek, geom_objek, warna) VALUES ('persegipanjang5',GeomFromText('POLYGON((-30 -30, -30 30, 30 30, 30 -30, -30 -30))'),'F00');

INSERT INTO datagis(nama_objek, geom_objek, warna) VALUES ('persegipanjang5',GeomFromBinary(\001\003\000\000\000\001\000\000\000\005\000\000\000\000\000\000\000\000\000\024@\000\000\000\000\000\000\024@\000\000\000\000\000\000\024@\000\000\000\000\000\000\024\300\000\000\000\000\000\000\024\300\000\000\000\000\000\000\024\300\000

Page 20: Tugas SIG-1

\000\000\000\000\000\024\300\000\000\000\000\000\000\024@\000\000\000\000\000\000\024@\000\000\000\000\000\000\024@),'F00');

Penulisan Output ke SVG

Salah satu bentuk penulisan output di sistem informasi geografi adalah menggunakan format SVG (Scalable Vector Graphic), suatu format yang distandarisasi oleh W3C (world wide web Consortium) yang digunakan untuk menampilkan gambar vector di browser. Untuk bisa menampilkan format SVG di browser, maka browser kita harus diinstall plug in untuk SVG Viewer. SVG Viewer yang digunakan di tugas ini adalah Adobe SVG Viewer.

Contoh script SVG sederhana :

<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20001102//EN" "http://www.w3.org/TR/2000/CR-SVG-20001102/DTD/svg-20001102.dtd">

<svg width="100%" height="100%">

<g transform="translate(50,50)"><rect x="0" y="0" width="150" height="50" style="fill:red;"/></g>

</svg>

Script SVG dimulai dengan header xml, tag <svg></svg>. Objek-objek SVG ditampilkan dalam tag svg. Script diatas adalah untuk menampilkan sebuah persegi 4 merah.

Pada tugas kali ini , kami menggunakan script PHP yang mengkoneksi dengan PostgreSQL dan mengeluarkan output dalam script SVG.

Sample Script yang digunakan pada contoh nomer 1, yang menggambarkan letak dari semua segi 4.

<?php $host = "localhost"; $user = "postgres"; $password = "postgres"; $database = "myGIS"; $conn = pg_connect("host=".$host." dbname=".$database." user=".$user." password=".$password) or die ("Error Connect!"); $res = pg_query($conn,"SELECT nama_objek,AsSVG(geom_objek),warna FROM datagis"); header("Content-type: image/svg+xml");

Page 21: Tugas SIG-1

?><?xml version="1.0" encoding="iso-8859-1" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/SVG/DTD/svg10.dtd">

<svg width="100%" height="100%">

<!-- buat gambarnya --> <g transform="translate(50,50)"> <?php $i = 1; while ($row = pg_fetch_row($res)) { echo "<path d=\"".$row[1]."\" fill=\"#".$row[2]."\"/>"; $i++; }?></g>

</svg>

Dimana pada contoh diatas, sebuah polygon ditampilkan dalam format <path /> pada SVG. Dalam tag <path/> bisa diisi dengan fill, style, border, dan lain sebagainya.

Kesimpulan

Page 22: Tugas SIG-1

1. postgreSQL memberikan ekstensi postGIS untuk mengolah data spasial.2. postGIS mengimplementasikan standar dari OpenGIS consortium.3. postGIS memiliki fungsi output AsSVG, yang memudahkan mengoutputkan

visualisasi dalam bentuk SVG.4. postGIS mendukung indexing dalam kolom yang bertipe data geometri.5. postGIS memberikan fasilitas yang cukup lengkap, walaupun postGIS adalah

ekstension postgreSQL dan tidak dibuat oleh orang orang yang membuat postgreSQL.

Daftar Pustaka

PostGIS manual PostgreSQL Documentation PHP Manual OpenGIS® Implementation Specification for Geographic information - Simple

feature Acess - Part 1:Common Achitecture (www.opengis.org) OpenGIS® Implementation Specification for Geographic information - Simple

feature access - Part 2: SQL option (www.opengis.org) Fundamentals of SVG Programming: Concepts to Source Code by Oswald

Campesato Designing SVG Web Graphics By Andrew H. Watt, New Riders Publishing,

CHARLES RIVER MEDIA, INC. http://www.carto.net/

Page 23: Tugas SIG-1

Lampiran : Source Code Visualisasi SVG

postgre_gis_svg.psvg.php

<?php $host = "localhost"; $user = "postgres"; $password = "postgres"; $database = "myGIS"; $conn = pg_connect("host=".$host." dbname=".$database." user=".$user." password=".$password) or die ("Error Connect!"); $res = pg_query($conn,"SELECT nama_objek,AsSVG(geom_objek),warna FROM datagis"); header("Content-type: image/svg+xml");

?><?xml version="1.0" encoding="iso-8859-1" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/SVG/DTD/svg10.dtd">

<svg width="100%" height="100%">

<!-- buat gambarnya --> <g transform="translate(50,50)"> <?php $i = 1; while ($row = pg_fetch_row($res)) { echo "<path d=\"".$row[1]."\" fill=\"#".$row[2]."\"/>"; $i++; }?></g>

</svg>

----------------------------------------------------------postgre_gis_svg2.psvg.php----------------------------------------------------------

<?php header("Content-type: image/svg+xml"); $host = "localhost"; $user = "postgres"; $password = "postgres"; $database = "myGIS"; $conn = pg_connect("host=".$host." dbname=".$database." user=".$user." password=".$password) or die ("Error Connect!");

?><?xml version="1.0" encoding="iso-8859-1" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/SVG/DTD/svg10.dtd">

<svg width="100%" height="100%">

<!-- buat gambarnya --> <g transform="translate(50,50)"> <?php

Page 24: Tugas SIG-1

$res = pg_query($conn,"SELECT AsSVG(geom_objek),warna FROM datagis WHERE nama_objek='persegipanjang1'"); $row = pg_fetch_row($res); echo "<path d=\"".$row[0]."\" fill=\"#".$row[1]."\"/>";

$res = pg_query($conn,"SELECT AsSVG(geom_objek),warna FROM datagis WHERE nama_objek='persegipanjang4'"); $row = pg_fetch_row($res); echo "<path d=\"".$row[0]."\" fill=\"#111\"/>";

$res = pg_query($conn,"SELECT AsSVG(INTERSECTION((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1')))"); $row = pg_fetch_row($res); echo "<path d=\"".$row[0]."\" fill=\"#AAA\"/>";

?></g>

</svg>

-------------------------postgre_gis_svg3.psvg.php-------------------------

<?php header("Content-type: image/svg+xml"); $host = "localhost"; $user = "postgres"; $password = "postgres"; $database = "myGIS"; $conn = pg_connect("host=".$host." dbname=".$database." user=".$user." password=".$password) or die ("Error Connect!");

?><?xml version="1.0" encoding="iso-8859-1" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/SVG/DTD/svg10.dtd">

<svg width="100%" height="100%">

<!-- buat gambarnya --> <g transform="translate(50,50)"> <?php $res = pg_query($conn,"SELECT AsSVG(DIFFERENCE((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1')))"); $row = pg_fetch_row($res); echo "<path d=\"".$row[0]."\" fill=\"#AAA\"/>";

?></g>

</svg>

----------------------------postgre_gis_svg4.psvg.php----------------------------

<?php

Page 25: Tugas SIG-1

header("Content-type: image/svg+xml"); $host = "localhost"; $user = "postgres"; $password = "postgres"; $database = "myGIS"; $conn = pg_connect("host=".$host." dbname=".$database." user=".$user." password=".$password) or die ("Error Connect!");

?><?xml version="1.0" encoding="iso-8859-1" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/SVG/DTD/svg10.dtd">

<svg width="100%" height="100%">

<!-- buat gambarnya --> <g transform="translate(50,50)"> <?php $res = pg_query($conn,"SELECT AsSVG(GEOMUNION((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1')))"); $row = pg_fetch_row($res); echo "<path d=\"".$row[0]."\" fill=\"#AAA\"/>";

?></g>

</svg>

-------------------------postgre_gis_svg5.psvg.php-------------------------

<?php header("Content-type: image/svg+xml"); $host = "localhost"; $user = "postgres"; $password = "postgres"; $database = "myGIS"; $conn = pg_connect("host=".$host." dbname=".$database." user=".$user." password=".$password) or die ("Error Connect!");

?><?xml version="1.0" encoding="iso-8859-1" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/SVG/DTD/svg10.dtd">

<svg width="100%" height="100%">

<!-- buat gambarnya --> <g transform="translate(50,50)"> <?php $res = pg_query($conn,"SELECT AsSVG(ENVELOPE(GEOMUNION((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1'))))"); $row = pg_fetch_row($res); echo "<path d=\"".$row[0]."\" fill=\"#F07\"/>";

$res = pg_query($conn,"SELECT AsSVG(GEOMUNION((SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1')))");

Page 26: Tugas SIG-1

$row = pg_fetch_row($res); echo "<path d=\"".$row[0]."\" fill=\"#AAA\"/>";

?></g>

</svg>