Anda di halaman 1dari 26

TUGAS KULIAH PENGANTAR

SISTEM INFORMASI GEOGRAFI

Fungsi Spasial pada Relational Database

Disusun Oleh :
Aufa Ikhsan 9474
Jayanthi 9560
Yuyun Tinggarlyana 9750
Chocky Haloman 9794
Bramantyo Erlangga 9576

Ilmu Komputer
Universitas Gadjah Mada Jogjakarta

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
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
Titik, direpresentasikan
Dengan himpunan x dan y.

Cara Mendeskripsikan

point

16 bytes

line

Garis tak terbatas (belum


diimplementasikan 100%),
32 bytes
direpresentasikan dengan
kumpulan titik.

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

lseg

Garis Terbatas,
32 bytes Direpresentasikan dengan
Kumpulan titik.

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

box

32 bytes Segi Empat, merupakan


Sebuah segi empat, bisa
Persegi panjang atau

(x,y)

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

Nama

Ukuran

Keterangan

Cara Mendeskripsikan

Bisa bujur sangkar.


Direpresentasikan dengan
Himpunan titik pojok kiri
Dan pojok kanan.
path

16+16n
bytes

Jalur tertutup (mirip


Seperti 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,
('persegipanjang2',GeomFromText('POLYGON((0
0))'),'00F');
INSERT INTO datagis(nama_objek, geom_objek,
('persegipanjang3',GeomFromText('POLYGON((0
0))'),'F0F');

warna) VALUES
0, 0 -20, -10 -20, -10 0, 0
warna) VALUES
0, 20 0, 20 -10, 0 -10, 0

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 : merah
Persegipanjang4 : putih
Persegipanjang1 : hijau
Persegipanjang2 : biru
Persegipanjang3 : ungu
Persegipanjang6 : oranye
Tepat pada pertengahan persegi warna putih, adalah titik koordinat 0,0.

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')
)

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')
)
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.
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)

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')
)

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)

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 SVG
SELECT AsSVG(

INTERSECTION(
(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),
(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')
)

)
Untuk menampilkan dalam format SVG
SELECT 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(
(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang4'),
(SELECT geom_objek FROM datagis WHERE nama_objek='persegipanjang1')
)
)
Untuk menampilkan dalam format SVG
SELECT 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)

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\00
0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\00
0\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\00
0\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).
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')
)
)

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)
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\0
05\000\000\000\000\000\000\000\000\000\02

4@\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
\
000\000\000\000\000\024\300\000\000\000\000\000\000\024@\000\000\000\000
\000\00
0\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");
?>
<?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
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/

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
$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
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')))");
$row = pg_fetch_row($res);
echo "<path d=\"".$row[0]."\" fill=\"#AAA\"/>";
?>
</g>
</svg>

Anda mungkin juga menyukai