SIG CONTINENT:The Future best global Solution On Mapping
SDO_GEOMETRY SDO_Geometry adalah tipe data yang dikenal didalam oracle untuk mendefenisikan tipe data spasial. SDO_Geometry adalah enum type yang dibentuk oleh beberapa komponen seperti yang terlihat pada query dibawah ini: Create type SDO_GEOMETRY as Object ( SDO_GTYPE NUMBER, SDO_SRID NUMBER, SDO_POINT SDO_POINT_TYPE, SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY, SDO_ORDINATES SDO_ORDINATE_ARRAY ); Berikut ini adalah penjelasan‐penjelasan mengenai komponen‐komponen dari SDO_GEOMETRY: 1. SDO_GTYPE SDO_GTYPE merupakan attribute yang menyatakan tipe geometry. Ada banyak tipe geometry yang dapat diwakili oleh SDO_TYPE yang semuanya secara garis besar dibagi atas 3 bagian yaitu Geometry 2 dimensi, 3 dimensi dan 4 dimensi. Format dari SDO_GTYPE adalah seperti yang diterangkan dibawah ini: dltt dimana: d menyatakan jumlah dimennsi(2,3,dan 4) l menyatakan linear referencing measure dimension untuk 3D geometry linear referencing system dimana dimensi(3 atau 4) mengandung suatu nilai tt menyatakan type geometry(00 s/d 07 dimana 08 sampai 99 untuk type geometry masa depan(belum terdefenisi). Berikut ini adalah tabel yang menjelaskan secara rinci nilai dari SDO_GTYPE yang valid: Value Geometry Type Description dl00 UNKNOWN_GEOMETRY Geometri tidak dikenal dl01 POINT Geometry Mengandung 1 Point dl02 LINE atau CURVE Geometry yang mengandung 1 garis yang bisa berupa garis lurus atau melengkung(lingkaran atau lengkungan biasa) atau keduanya. dl03 POLYGON Geometry mengandung 1 polygon baik tanpa lubang atau dengan lubang ditengahnya dl04 COLLECTION Geometry terdiri dari kumpulan elemen yang heterogen. COLLECTION adalah superset dari seluruh tipe geometry dl05 MULTIPOINT Geometry memiliki satu atau lebih titik(Multipoint adalah superset dari Point. dl06 MULTILINE atau Type Geometry yang memiliki lebih dari 1 garis baik garis MULTICURVE lurus(line) atau melengkung(curve). Multiline dan Multicurve adalah superset dari line dan curve dl07 MULTYPOLYGON Type Geometry yang bisa memiliki satu atau lebih polygon dimana polygon‐polygon tersebut bisa berupa disjoint polygon (memiliki lebih dari 1 exterior polygon)
Roni F. Sinaga: Praktisi serta orang yang berhasrat mengembangkan GIS Indonesia email:
[email protected],
[email protected]
SIG CONTINENT:The Future best global Solution On Mapping Sebagai contoh , misalkan SDO_GTYPE memiliki nilai 2003 maka bisa dikatan angka 2 menyatakan 2 dimensi, 0 menyatakan tidak mengandung nilai linear referencing system. 03 menyatakan type geometrynya adalah polygon. Jadi 2003 menyatakan type geometry polygon 2 dimensi. Sebagai catatan, nilai dimensi merefleksikan nilai‐nilai ordinat yang digunakan untuk merepresentasikan setiap vertex, sebagai contoh nilai X,Y adalah nilai 2 dimensi. POINTS dan LINES adalah contoh dari tipe geometry yang 2 dimensi. Sebagai catatan juga bahwa untuk setiap column atau layer yang sama harus mengandung nilai dimensi yang sama, jika berbeda maka mengakibatkan error atau kesalahan. Metoda‐metoda yang dapat digunakan untuk mengembalikan nilai dari setiap komponen dltt SDO_GTYPE untuk suatu objek geometry adalah GETS_DIMS, GET_LRS_DIM, GET_GTYPE 2. SDO_SRID Attribute SDO_SRID dapat digunakan untuk menyatakan sistem koordinat(spatial reference system) dari suatu Geometry. Jika SDO_SRID adalah null maka Geometry tidak memiliki sistem koordinat. Jika SDO_SRID bukan null maka nilainya harus merupakan salah satu dari nilai yang dinyatakan pada kolom SRID pada tabel MDSYS.CS_SRS dan nilai SDO_SRID yang sama juga digunakan kedalam kolom SDO_SRID pada view USER_SDO_GEOM_METADATA. Sebagai catatan, dalam satu tabel yang sama kolom SDO_GEOMETRY harus memiliki SDO_SRID yang sama. 3. SDO_POINT Attribut SDO_POINT didefenisikan menggunakan tipe SDO_POINT_TYPE dimana attributnya memiliki 3 nilai yaitu X,Y,Z dimana ketiga nilai tersebut memiliki tipe data number. Nilai X,Y,Z tersebut adalah nilai koordinat berupa point dari suatu Geometry. Apabila SDO_ELEM_INFO dan SDO_ORDINATES, yang merupakan Array, maka X,Y merupakan koordinat(latitude dan longitude) suatu Geometry, Jika tidak maka SDO_POINT akan diabaikan oleh oracle spatial. Jika Geometry yang kita miliki adalah bertipe point maka nilai koordinat dari point‐point tersebut disimpan didalam SDO_POINT. Selain itu apabila kita hanya memiliki dalam sebuah layer, maka sebaiknya koordint‐koordinat Geometry ditempatkan didalam SDO_POINT. sebagai catatan khusus adalah jangan menggunakan attribut SDO_POINT dalam pendefenisian Linear Referencing System (LRS) untuk point. 4. SDO_ELEM_INFO Attribut SDO_ELEM_INFO merupakan attribut yang berperan untuk memberikan informasi mengenai interpretasi yang dilakukan terhadap nilai dari SDO_ORDINATES. tipe SDO_ELEM_INFO adalah array. nilai SDO_ELEM_INFO terdiri dari triplet seperti yang ditunjukkan pada format dibawah ini: <SDO_STARTING_OFFSET,SDO_ETYPE,SDO_INTERPRETATION> untuk lebih jelasnya dapat dilihat pada penjelasan dibawah ini: 4.1. SDO_STARTING_OFFSET SDO_STARTING_OFFSET menyatakan indeks pertama dari SDO_ORDINATE yang disimpan dalam tabel. indeks dimulai dari 1 bukan dari 0. dengan kata lain ordinat pertama dari element pertama akan disimpan di SDO_GEOMETRY.SDO_ORDINATE(1). Jika ada element kedua, ordinate pertamanya akan dimulai dari SDO_GEOMETRY.SDO_ORDINATE(n), dimana n menyatakan indeks ke‐n, misalkan n=15 maka element kedua dimulai dari ordinate ke‐15 atau SDO_GEOMETRY.SDO_ORDINATE(15). 4.2. SDO_ETYPE
Roni F. Sinaga: Praktisi serta orang yang berhasrat mengembangkan GIS Indonesia email:
[email protected],
[email protected]
SIG CONTINENT:The Future best global Solution On Mapping Attribute SDO_ETYPE menyatakan tipe dari element. Ada 2 tipe element dari SDO_ETYPE yaitu simple elements dan compound elements. berikut penjelasan dari masing‐masing elements. 4.2.1. Simple Elements Simple Elements direpresentasikan dengan nilai 1,2,1003,2003. Khusus Untuk nilai 1003 dan 2003, digit pertama bukan menyatakan dimensi tetapi menyatakan exterior ataupun interior. Angka 1 menyatakan exterior dan angka 2 menyatakan interior dimana: 1003 : exterior polygon ring(didefenisikan secara counterclockwise) 2003: interior polygon ring(didefenisikan secara clockwise) 4.2.2. Compound Elements Compound Elements direpresentasikan dengan angka 4,1005, dan 2005. Representasi dari compound elements adalah adanya triplet header diikuti dengan rangkaian triplet lain yang merupakan bagian dari triplet header. Sama seperti simple elements digit pertama 1005 dan 2005 menyatakan apakah compound elements itu adalah exterior atau interior. 4.3. SDO_INTERPRETATION SDO_INTERPRETATION mengandung 2 nilai, dimana nilai tersebut bergantung pada nilai dari SDO_ETYPE apakah merupakan compound elements atau bukan. Jika SDO_ETYPE merupakan compound elements maka nilai dari SDO_INTERPRETATION merupakan banyaknya triplet yang merupakan bagian dari element.Jika SDO_INTERPRETATION bukan merupakan compound elements maka nilai dari SDO_INTERPRETATION menjelaskan bagaiman rangkaian ordinates element di interpretasikan. Sebagai contoh, apakah rangkaian element itu berupa line atau polygon pembatas yang dirangkai dari garis lurus(straight line) atau circular. Pasangan nilai yang valid antara SDO_INTERPRETATION dan SDO_ETYPE dapat dilihat pada tabel dibawah ini: SDO_ETYPE SDO_INTERPRETATION Deskripsi 0 Any number Type geometry yang tidak dikenali oleh Oracle Spatial 1 1 Type Point 1 n > 1 Cluster Point dengan n > 1 2 1 Line dimana titik‐titik pembentuk line terhubung oleh garis lurus 2 2 Line dimana titik‐titik pembentuk line terhubung secara circular. 1003 atau 2003 1 Simple polygon 1003 atau 2003 2 Polygon yang terhubung secara closed circular 1003 atau 2003 3 Type Rectangle 1003 atau 2003 4 Type Circle 4 n>1 Compound Line 1005 atau 2005 n>1 Compound Polygon 5. SDO_ORDINATES Attribut SDO_ORDINATES adalah attribute dengan type array(panjang array adalah sekitar 1.48.576). attribute ini menyimpan nilai dari koordinat objek spasial. Panjang Array ini harus sesuai dengan nilai yang ada di SDO_ELEM_INFO. Nilai‐nilai dalam array diurutkan sesuai dengan dimensi, dimulai dari dimensi yang terkecil sampai dengan dimensi yang terbesar. Sebagai contoh apabila nilainya berupa
Roni F. Sinaga: Praktisi serta orang yang berhasrat mengembangkan GIS Indonesia email:
[email protected],
[email protected]
SIG CONTINENT:The Future best global Solution On Mapping polygon 2 dimensi maka nilainya akan diurutkan seperti ini {X1,Y1,X2,Y2,X3.Y3,X4,Y4,X1,Y1}. Apabila nilainya berupa polygon 3‐dimensi maka nilainya akan diurutkan seperti ini {X1,Y1,Z1 ,X2,Y2,Z2 ,X3,Y3,Z3,X4,Y4,Z4,X1,Y1,Z1}. Nilai‐nilai dalam SDO_ORDINATES adalah nilai‐nilai yang valid. Tidak ada nilai khusus yang berfungsi sebagai pembatas element apabila SDO_ORDINATES terdiri dari banyak element. Metadata dari SDO_ORDINATES ada pada SDO_ELEM_INFO yang telaj dijelaskan sebelumnya. Seperti yang telah dijelaskan sebelumnya maka index awal dari SDO_ORDINATES dimulai dari 1. Ada beberapa hal yang dapat membantu kita secara cepat menganalisis nilai‐nilai dalam SDO_GEOMETRY diantaranya: 1. Untuk SDO_GTYPE dengan nilai d001 dan d005, setiap subelement yang nilai dari SDO_ETYPE tidak 1 akan diabaikan. 2. Untuk SDO_GTYPE dengan nilai d002 dan d006 maka setiap subelement yang nilai dari SDO_ETYPEnya bukan 2 atau 4 diabaikan. 3. Untuk SDO_GTYPE dengan nilai d003 dan d007 maka setiap subelement yang nilai dari SDO_ETYPEnya bukan 3 atau 5 akan diabaikan (termasuk variant dari SDO_ETYPE lainnya diantaranya 1003, 2003, 1005 atau 2005).
Contoh Setelah kita mempelajari secara mendetail mengenai SDO_GEOMETRY maka tidak akan lengkap kalau tidak disertakan dengan contoh‐contohnya. Untuk tools yang digunakan dalam contoh ini adalah menggunakan Toad For Oracle 11g. Misalkan kita mempunya tabel dengan nama bentuk_geometry. Kita akan memperlihatkan bagaimana tabel‐tabel ini akan diisi dengan berbagai bentuk geometry yang ada dimulai dari titik, garis, polygon, polygon with hole, compound line, compound polygon, Type 0 atau geometry yang tidak dikenali oleh oracle spatial. Untuk lebih jelasnya dapat dilihat pada penjelasan langkah‐langkah dibawah ini: 1. Buat Table bentuk_geometry Langkah pertama yang dilakukan adalah membuat table bentuk_geometry di database oracle. untuk membuat table bentuk_geometry dapat dilihat pada script query dibawah ini: Create table bentuk_geometry(ids number primary key, nama_geometry varchar2(100), keterangan varchar2(500), shape SDO_GEOMETRY); Eksekusi query diatas. setelah query diatas di eksekusi maka akan terbentuk tabel bentuk_geometry seperti yang terlihat pada gambar dibawah ini:
Roni F. Sinaga: Praktisi serta orang yang berhasrat mengembangkan GIS Indonesia email:
[email protected],
[email protected]
SIG CONTINENT:The Future best global Solution On Mapping
Setelah kita berhasil membuat tabel bentuk_geometry maka langkah berikutnya adalah memasukkan data‐data bentuk geometry kedalam tabel. 2. Geometry Tipe Point type geometry yang ingin kita masukkan terlebih dahulu adalah point. Seperti kita ketahui type geometry point direpresentasikan dengan sebuah koordinat x dan y. Berdasarkan analisis yang ada maka SDO_GEOMETRY untuk type geometry point adalah seperti yang terlihat pada penjelasan dibawah ini: SDO_GTYPE: 2001 SDO_SRID: NULL SDO_POINT: SDO_POINT_TYPE(3,5,NULL) SDO_ELEM_INFO: NULL SDO_ORDINATES:NULL karena tipe geometrynya berupa point maka SDO_ELEM_INFO dan SDO_ORDINATES dibuat null. SDO_SRID dibuat null hanyalah untuk mempermudah contoh query. setelah kita memahami isi dari SDO_GEOMETRY yang akan diisikan pada saat query insert dilakukan. contoh query insert untuk type geometry point dapat dilihat dibawah ini: Geometry insert into bentuk_geometry values(1,'point','Bentuk Point',SDO_GEOMETRY(2001,null,SDO_POINT_TYPE(3,5,NULL),NULL,NULL)); eksekusi query diatas sehingga data tersebut masuk kedalam tabel yang telah kita buat sebelumnya. hasil dari eksekusi query insert dapat dilihat pada pada gambar dibawah ini:
3. Geometry Tipe Line (Straight Line) Tipe Geometry lainnya yang akan kita masukkan kedalam tabel bentuk_geometry kita adalah tipe geometry line. Seperti kita ketahui Line dibentuk dari kumpulan titik‐titik yang dihubungkan dengan garis yang melewati titik‐titik tersebut. Untuk contoh kali ini kita akan memasukkan tipe line berupa
Roni F. Sinaga: Praktisi serta orang yang berhasrat mengembangkan GIS Indonesia email:
[email protected],
[email protected]
SIG CONTINENT:The Future best global Solution On Mapping straight line(garis lurus). Analisis yang kita lakukan terhadap SDO_GEOMETRY sebelum kita membuat query insert dapat dilihat pada penjelasan dibawah ini: SDO_GTYPE: 2002 SDO_SRID: NULL SDO_POINT: NULL SDO_ELEM_INFO: (1,2,1) SDO_ORDINATES: (3,5,5,5,7,5,9,5) Saat ini tipe geometry yang kita masukkan adalah line, straight line, maka yang perlu diperhatikan adalah SDO_POINT, SDO_ELEM_INFO dan SDO_ORDINATES. karena tipe geometrynya line maka SDO_POINT dibuat null, SDO_ELEM_INFO berupa triplet 1,2,1. 1 artinya SDO_STARTING_OFFSET bernilai 1, SDO_ETYPE 2 berarti tipe elementnya adalah simple element dengan tipe geometrynya adalah line. Selanjutnya SDO_INTERPRETATION nya adalah 1, artinya tipe geometry linenya adalah straight line. Sedangkan untuk SDO_ORDINATES menyatakan nilai dari titik‐titik koordinat yang digunakan untuk membentuk garis lurus(straight line). Query yang digunakan untuk memasukkan tipe koordinat line diatas dapat dilihat pada query dibawah ini: insert into bentuk_geometry values(2,'Line Geometry','Tipe Geometry Line',SDO_GEOMETRY(2002,null,null,SDO_ELEM_INFO_ARRAY(1,2,1),SDO_OR DINATE_ARRAY(3,5,5,5,7,5,9,5))); eksekusi query diatas sehingga data tersebut masuk kedalam tabel yang telah kita buat sebelumnya. hasil dari eksekusi query insert dapat dilihat pada pada gambar dibawah ini:
4. Polygon Ada banyak jenis polygon didalam geometry mulai dari simple polygon sampai dengan kompleks polygon. Untuk saat ini kita akan coba untuk membuat polygon dalam bentuk kotak. Ada banyak cara yang dapat dilakukan mulai dari membentuk kotak dari rangkaian garis lurus yang dibuat sedemikian rupa membentuk kotak atau dengan memanfaatkan salah satu nilai dari SDO_GTYPE yang bertipe polygon(2003). Untuk contoh kali ini kita akan memanfaatkan SDO_GTYPE 2003. Nilai‐ nilai dari SDO_GEOMETRY untuk membentuk polygon adalah seperti yang dituliskan dibawah ini: SDO_GTYPE: 2003 SDO_SRID: NULL SDO_POINT: NULL SDO_ELEM_INFO: (1,1003,3) SDO_ORDINATES: (3,5,6,11)
Roni F. Sinaga: Praktisi serta orang yang berhasrat mengembangkan GIS Indonesia email:
[email protected],
[email protected]
SIG CONTINENT:The Future best global Solution On Mapping Yang perlu diperhatikan adalah nilai dari SDO_ELEM_INFO dan SDO_ORDINATES. Untuk SDO_ELEM_INFO nilainya adalah triplet dari 1,1003 dan 3. ini berarti nilai dari SDO_STARTING_OFFSET adalah 1, SDO_ETYPE 1003 dan SDO_INTERPRETATION 3. SDO_STARTING_OFFSET bernilai 1 artinya SDO_ORDINATE dimulai dari indeks 1, kemudian seperti yang terlihat pada tabel diatas bahwa pasangan nilai SDO_ETYPE 1003 dengan SDO_INTERPRETATION 3 akan membentuk rectangle atau kotak. Disini kita tahu bahwa polygon yang akan kita bentuk adalah berbentuk rectangle atau kotak. kemudian pada SDO_ORDINATES hanya ada 2 titik yaitu titik 3,5 dan titik 6,11. Karena sudah dipastikan bahwa bentuk polygon yang dibentuk adalah rectangle atau kotak maka hanya dibutuhkan 2 titik saja yaitu titik kiri bawah dan kanan atas. Titik 3,5 adalah titik kiri bawah dan titik 6,11 adalah titik kanan atas. Setelah kita memahami isi dari SDO_GEOMETRY maka langkah berikutnya adalah membuat query yang akan memasukkan data geometry polygon kita yang berbentuk rectangle atau kotak kedalam tabel bentuk_geometry seperti yang terlihat pada query dibawah ini: Insert into bentuk_geometry values(3,'Geometry Polygon','Geometry Polygon bentuk kotak', SDO_GEOMETRY (2003, null, null, SDO_ELEM_INFO_ARRAY(1,1003,3),SDO_ORDINATES_ARRAY(3,5,6,11))); eksekusi query diatas sehingga data tersebut masuk kedalam tabel yang telah kita buat sebelumnya. hasil dari eksekusi query insert dapat dilihat pada pada gambar dibawah ini:
5. Compound Line Pada contoh‐contoh sebelumnya elemen‐elemen yang dibentuk adalah simple element. Pada contoh kali ini kita akan mencoba untuk membuat geometry dengan tipe compound line. nilai‐nilai SDO_GEOMETRY untuk compound line adalah sebagai berikut: SDO_GTYPE:2002 SDO_SRID:NULL SDO_POINT:NULL SDO_ELEM_INFO:(1,4,2,1,2,1,3,2,2) SDO_ORDINATES:(10,10,10,14,6,10,14,10) seperti yang terlihat pada SDO_ELEM_INFO diatas ada 3 triplet yaitu 1,4,2 dan 1,2,1 serta 3,2,2. Untuk triplet pertama kita lihat SDO_STARTING_OFFSETnya 1, SDO_ETYPE 4 dan SDO_INTERPRETATION 2. Seperti yang terlihat pada table diatas, pasangan nilai SDO_ETYPE 4 dan SDO_INTERPRETATION 2 (n>1) akan membentuk compound line. Karena tipe geometrynya adalah compound maka kita tahu bahwa triplet pertama adalah triplet header sedangkan triplet‐triplet berikutnya adalah bagian dari triplet header dalam artian triplet‐triplet berikutnya adalah triplet
Roni F. Sinaga: Praktisi serta orang yang berhasrat mengembangkan GIS Indonesia email:
[email protected],
[email protected]
SIG CONTINENT:The Future best global Solution On Mapping yang membentuk compound line. Dalam Geometry bertipe compound, nilai dari SDO_INTERPRETATION menyatakan jumlah subelement, dalam hal ini dinyatakan dalam jumlah triplet yang mengikuti triplet‐triplet header sehingga bisa dikatakan bahwa jumlah subelement pembentuk compound line berjumlah 2. Sekarang mari kita analisis bentuk dari compound line. pada triplet pertama disebutkan 1,2,1. dari triplet tersebut kita ketahui bahwa SDO_STARTING_OFFSET adalah 1, SDO_ETYPE 2 dan SDO_INTERPRETATION 1. Seperti yang kita lihat pada tabel diatas pasangan nilai SDO_ETYPE 2 dan SDO_INTERPRETATION 1 merupakan garis lurus (straight line). Dalam Geometry compound disebutkan bahwa akhir dari satu subelement merupakan awal dari subelement berikutnya. triplet subelement berikutnya adalah 3,2,2. Dari nilai triplet tersebut bisa dikatakan bahwa SDO_STARTING_OFFSET 3, SDO_ETYPE 2 dan SDO_INTERPRETATION 2. Dengan karakteristik geometry compound adalah contigous subelement maka titik akhir dari triplet 1,2,1 adalah awal dari triplet 3,2,2 yaitu 10,14. Kemudian pada triplet 3,2,2 kita ketahui bahwa pasangan nilai SDO_ETYPE 2 dan SDO_INTERPRETATION 2 merupakan geometry garis melengkung. Dengan melihat penjelasan yang diberikan maka bentuk dari compound line kita dapat dilihat pada gambar dibawah ini:
Query yang digunakan untuk memasukkan data dapat dilihat pada query dibawah ini: Insert into bentuk_geometry values(4,'Geometry Compound Line', 'Bentuk Geometry dengan tipe compound line',SDO_GEOMETRY(2002, null, null, SDO_ELEM_INFO_ARRAY(1,4,2,1,2,1,3,2,2), SDO_ORDINATE_ARRAY(10,10,10,14,6,10,14,10))); eksekusi query diatas sehingga data tersebut masuk kedalam tabel yang telah kita buat sebelumnya. hasil dari eksekusi query insert dapat dilihat pada pada gambar dibawah ini:
Roni F. Sinaga: Praktisi serta orang yang berhasrat mengembangkan GIS Indonesia email:
[email protected],
[email protected]
SIG CONTINENT:The Future best global Solution On Mapping
Demikian beberapa sampel yang dapat dilakukan. Dengan analogi yang sama maka kita dapat mengembangkan sample yang ada untuk memasukkan data lainnya diantaranya multipoints, kotak dengan menghubungkan 4 garis lurus, polygon yang memiliki lubang didalamnya, lingkaran, compound polygon dan banyak lagi bentuk‐bentuk geometry lainnya yang dapat dibentuk. Akhir kata saya mengucapkan selamat mencoba dan apabila ada koreksian ataupun komentar yang membangun silahkan kirimkan email ke
[email protected]. Terimakasih telah membaca tutorial singkat ini dan mari sama‐sama kita kembangkan dunia GIS Indonesia. Regards, Roni F. Sinaga
Roni F. Sinaga: Praktisi serta orang yang berhasrat mengembangkan GIS Indonesia email:
[email protected],
[email protected]