DAFTAR PUSTAKA 1.
Bédard, Y. (1999), Visual Modelling Of Spatial Databases: Towards Spatial PVL and UML, GEOMATICA Vol. 53 No. 2.
2.
Borges, K.A.V., Clodoveue A.D.Jr. and Alberto H.F.L. (2001), Integrity Constraints in Spatial Databases. Paper at http://delivery.acm.org/ 10.1145/330000/320136/p1-borges.pdf.
3.
Calkins, H.W. 2003, Entity-Relationship Modeling Of Spatial Data For Geographic Information System, Paper at http://www.geo.unizh.ch/oai/spatialdb
4.
Cyran, M. (2005), Oracle Database Concepts 10g Release 2 (10.2), Oracle Corporation, Redwood City-CA, USA.
5.
Cockcroft, S. (1997), A Taxonomy of Spatial Data Integrity Constraints, Paper at http://divcom.otago.ac.nz:800/com/infosci.
6.
Direktorat Jenderal Pajak (2000), KEP-533/PJ/2000 Tanggal 20 Desember 2000 tentang Petunjuk Pelaksanaan Pendaftaran, Pendataan dan Penilaian Objek dan Subjek Pajak Bumi dan Bangunan Dalam Rangka Pembentukan dan atau Pemeliharaan Basis Data Sistem Manajemen Informasi Objek Pajak (SISMIOP), Sekretariat Direktorat Jenderal Pajak, Jakarta.
7.
de By, R.A. (2000), Principles of Geographic Information Systems, The International Institute for Aerospace Survey and Earth Science (ITC), Enschede, The Netherlands.
8.
Escobar, F., G. Hunter, I. Bishop and A Zerger. 2006. Introduction to GIS, http://www.sli.unimelb.edu.au/gisweb
9.
Elmasri, R., and Navathe, S. B. (2000), Fundamentals of Database System. The Benjamin/Cummings Company, California,USA.
10.
Fathansyah (2004), Sistem Basis Data. Informatika, Bandung.
11.
Güting, R.H. (1994), An Introduction to Spatial Database Systems, VLDB Journal. 3(4), Oktober 1994.
12.
Howe, D.R. (1991), Data Analysis for Database Design, Edward Arnold, London, UK.
13.
Laudon, K.C. and Jane P.L. (2002), Management Information Systems, Prentice Hall, New Jersey, USA.
14.
Laurini, R. and Derek T. (1993), Fundamental of Spatial Information Systems, Academic Press, London, UK.
67
68 15.
Lo, C. P. and A.K.W. Yeung (2002), Concepts and Techniques of Geographic Information Systems, Prentice Hall of India Private Limited, New Delhi, India.
16.
Loney, K. (2004), Oracle Database 10g : The Complete Referenc. McGrawHill/Osborne, New York, USA.
17.
Meadows, C. and Sushil J. (1995), Integrity in Multilevel Secure Database Management Systems, dalam Information Security: An Integrated Collection of Essays, IEEE Computer Society Press, Los Alamitos, CA USA.
18.
Murray, C. (2005), Oracle Spatial User’s Guide and Reference, 10g Release 2(10.2), Oracle Corporation, Redwood City-CA, USA.
19.
Nugroho, A. (2004), Konsep Pengembangan Sistem Basis Data, Informatika, Bandung.
20.
Prahasta, E. (2002), Konsep-konsep Dasar Sistem Informasi Geografis. Informatika, Bandung.
21.
Rigaux, P., Michel S. and Agnes V. (2002), Spatial Databases With Application to GIS, Morgan Kaufman Publishers, San Francisco, USA
22.
Santoso, B. (2005), Pengembangan Interoperabilitas Basis Data PBB dan BPN, Tesis Program Pasca Sarjana Universitas Gajah Mada, Yogyakarta.
23.
Shekhar,S. and Sanjay C. (2003) Spatial Databases: A Tour, Prentice Hall. New Jersey, USA.
24.
Shiberschatz, A. et al. (2002), Database System Concepts, McGraw-Hill Co. New York, USA.
25.
Sugiada, I.M. (2007), Peningkatan Keamanan Basis Data Spasial PBB Melalui Rancang Ulang Basis Data Spasial, Tesis Program Magister Teknik Geodesi dan Geomatika, FTSL-ITB, Bandung.
26.
Waljiyanto (2000), Sistem Basis Data : Analisis dan Pemodelan Data. J & J Learning, Yogyakarta
27.
Wikipedia (2007), Data Integrity, http://en.wikipedia.org
LAMPIRAN A Daftar Entitas, Atribut dan Relasi Antar Entitas Model Data Konseptual 1. Daftar Entitas No. 1 2 3 4 5 6 7 8 9 10 11 12 12
Nama Entitas Propinsi Kota Kecamatan Kelurahan Blok Bidang Bangunan Jalan Sungai Simbol Zona_Proyeksi Pemakai_SIG Wewenang_SIG
Atribut Kd_Prop, Lyr_Prop Kd_Kota , Lyr_Kota Kd_Kec , Lyr_Kec Kd_Kelurahan , Lyr_Kel Kd_Blok , Lyr_Blok No_Urut , Kd_Jns_Op , Lyr_Bidang No_Bng , Lyr_Bng Id_Jln , Nm_Jln, Lbr_Jln, Lyr_Jln Id_ Sungai , Nm_ Sungai, Lbr_Sungai, Lyr_ Sungai Id_ Simbol, Lyr_ Simbol No_Zona , Nm_Zona NIP_Petugas KD_Wwg, Nm_Wwg
Keterangan: Atribut yang digarisbawahi merupakan kunci/key dari entitasnya 2. Daftar Atribut dan Batasannya No
Nama
Tipe Data Panjang
Keberadaan
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 16 19 20
Kd_Prop Lyr_Prop Kd_Kota Lyr_Kota Kd_Kec Lyr_Kec Kd_Kel Lyr_Kel Kd_Blok Lyr_Blok No_Urut Kd_Jns_Op Lyr_Bidang No_Bng Lyr_Bng Id_Jln Lbr_Jln Nm_Jln Lyr_Jln Id_Sungai
C (2) Geometri C (2) Geometri C (3) Geometri C (3) Geometri C (3) Geometri C (4) C (1) Geometri C (3) Geometri N (5) N 93) C (30) Geometri N (5)
M M M M M M M M M M M M M M M M O M M M
69
Batasan Lainnya Bentuk geometri berupa polygon Bentuk geometri berupa polygon Bentuk geometri berupa polygon Bentuk geometri berupa polygon Bentuk geometri berupa polygon Bentuk geometri berupa polygon Bentuk geometri berupa polygon Bentuk geometri berupa polyline -
70
No
Nama
Tipe Data Panjang
Keberadaan
21 22 23 24 25 26 27 28 29 30
Nm_Sungai Lbr_Sungai Lyr_Sungai Kd_Simbol Lyr_Simbol Nm_Zona No_Zona NIP_Petugas Kd_Wwg Nm_Wwg
C (30) N (3) Geometri C (3) Geometri C (30) C (5) C (9) C(2) C (30)
M O M M M M M M M M
Batasan Lainnya Bentuk geometri berupa polyline Bentuk geometri berupa point -
Keterangan Tipe Data : C=Character, N=Number, D=Date, Geometri digunakan untuk data spasial Keberadaan : M=Mandatory, O=Optional 3. Daftar Relasi Entitas Entitas No
1
2
Ke-1 Propinsi
Kota
Ke-2 Kota
Kecamatan
Nama Relasi
Keterangan
Memiliki
Data kota harus berada di dalam propinsi dimana kota tersebut berada baik data atribut (kode) maupun data spasialnya
Memiliki
Data kecamatan harus berada di dalam kota dimana kecamatan tersebut berada baik data atribut (kode) maupun data spasialnya
3
Kecamatan
Kelurahan
Memiliki
4
Kelurahan
Blok
Memiliki
5
Sungai
Kelurahan
Berada Pada
6
Jalan
Kelurahan
Berada Pada
7
Simbol
Kelurahan
Berada Pada
8
Blok
Bidang
Terdapat
9
Bidang
Bangunan
Terdapat
Data kelurahan harus berada di dalam kecamatan dimana kelurahan tersebut berada baik data atribut (kode) maupun data spasialnya Data Blok harus berada di dalam kelurahan dimana blok tersebut berada baik data atribut maupun data spasialnya Data spasial sungai harus berada pada kelurahan dimana sungai tersebut berada Data jalan sungai harus berada pada kelurahan dimana jalan tersebut berada Data spasial simbol harus berada pada kelurahan dimana simbol tersebut berada Data bidang harus berada di dalam blok dimana bidang tersebut berada baik data atribut maupun data spasialnya Data bangunan harus berada di dalam bidang dimana bangunan tersebut berada baik data atribut maupun data spasialnya
LAMPIRAN B Daftar Tabel, Deskripsi Kolom/Kolom dan Daftar Hubungan Referensi (Foreign Key) Daftar Tabel dan Deskripsi Attribut dibuat dengan tujuan untuk menjelaskan secara detail setiap attribut yang ada dalam tabel yang saling berhubungan dalam perancangan data model. 1. Daftar Tabel dan Deskripsi Kolom/Kolom a. Tabel PROPINSI Tabel yang menyimpan data batas propinsi No.
Nama Kolom
Type
Key
Null ?
Deskripsi
1.
KD_PROP
Char(2)
Kode Propinsi
2.
LYR_PROP
SDO_Geometry
Data Geometri Wilayah Propinsi
b. Tabel KOTA Tabel yang menyimpan data batas kabupaten/Kota No.
Nama Kolom
Tipe
Key
Null ?
Deskripsi
1.
KD_PROP
Char(2)
Kode Propinsi
2.
KD_KOTA
Char(2)
Kode Kabupaten/Kota
3.
LYR_KOTA
SDO_Geometry
Data Geometri Kabupaten/Kota
Wilayah
c. Tabel KECAMATAN Tabel yang menyimpan data batas kecamatan No.
Nama Kolom
Tipe
Key
Null ?
Deskripsi
1.
KD_PROP
Char(2)
Kode Propinsi
2.
KD_ KOTA
Char(2)
Kode Kabupaten/Kota
3.
KD_KEC
Char(3)
Kode Kecamatan
4.
LYR_KEC
SDO_Geometry
Data Geometri Wilayah Kecamatan
71
72
d. Tabel KELURAHAN Tabel yang menyimpan data batas kelurahan No.
Nama Kolom
Tipe
Key
Null ?
Deskripsi
1.
KD_PROP
Char(2)
Kode Propinsi
2.
KD_ KOTA
Char(2)
Kode Kabupaten/Kota
3.
KD_KEC
Char(3)
Kode Kecamatan
4.
KD_KEL
Char(3)
Kode Kelurahan/desa
5.
LYR_KEL
SDO_Geometry
Data Geometri Wilayah Kelurahan
e. Tabel BLOK Tabel yang menyimpan data batas blok No.
Nama Kolom
Tipe
Key
Null ?
Deskripsi
1.
KD_PROP
Char(2)
Kode Propinsi
2.
KD_ KOTA
Char(2)
Kode Kabupaten/Kota
3.
KD_KEC
Char(3)
Kode Kecamatan
4.
KD_KEL
Char(3)
Kode Kelurahan/desa
5.
KD_BLOK
Char(3)
Kode Blok
6.
LYR_BLOK
SDO_Geometry
Data Geometri Area Blok
f. Tabel BIDANG Tabel yang menyimpan data bidang No.
Nama Kolom
Tipe
Key
Null ?
Deskripsi
1.
KD_PROP
Char(2)
Kode Propinsi
2.
KD_ KOTA
Char(2)
Kode Kabupaten/Kota
3.
KD_KEC
Char(3)
Kode Kecamatan
4.
KD_KEL
Char(3)
Kode Kelurahan/desa
5.
KD_BLOK
Char(3)
Kode Blok
6.
NO_URUT
Char(4)
Nomor Urut Objek Pajak
7.
KD_JNS_OP
Char(1)
Kode Jenis Objek Pajak
8.
NIP_PETUGAS
Char(9)
NIP Petugas Entri Data
9.
TGL_ENTRI_BIDANG
Date
Tanggal Entri Data Bidang
10.
LYR_BIDANG
SDO_Geometry
Data Geometri Bidang
73
g. Tabel BANGUNAN Tabel yang menyimpan data bangunan No.
Nama Kolom
Tipe
Key
Null ?
Deskripsi
1.
KD_PROP
Char(2)
Kode Propinsi
2.
KD_ KOTA
Char(2)
Kode Kabupaten/Kota
3.
KD_KEC
Char(3)
Kode Kecamatan
4.
KD_KEL
Char(3)
Kode Kelurahan/desa
5.
KD_BLOK
Char(3)
Kode Blok
6.
NO_URUT
Char(4)
Nomor Urut Objek Pajak
7.
KD_JNS_OP
Char(1)
Kode Jenis Objek Pajak
8.
NO_BNG
Char(3)
Nomor Urut Bangunan
9.
NIP_PETUGAS
Char(9)
NIP Petugas Entri Data
10.
TGL_ENTRI_BNG Date
Tanggal Entri Data Bidang
11.
LYR_BNG
Data Geometri Bangunan
Tipe
Key
Null ?
SDO_Geometry
h. Tabel JALAN Tabel yang menyimpan data jalan No.
Nama Kolom
Deskripsi
1.
KD_PROP
Char(2)
Kode Propinsi
2.
KD_ KOTA
Char(2)
Kode Kabupaten/Kota
3.
KD_KEC
Char(3)
Kode Kecamatan
4.
KD_KEL
Char(3)
Kode Kelurahan/desa
5.
ID_JLN
Number(5)
Nomor Identitas Jalan
6.
NM_JLN
VarChar(30)
Nama Jalan
7.
LBR_JLN
Numbe(3)
Lebar Jalan
8.
LYR_JLN
SDO_Geometry
Data Geometri Jalan
i. Tabel ZONA_PROYEKSI Tabel yang menyimpan data sistem proyeksi UTM dengan datum WGS84 beserta zonanya untuk tiap kabupaten/kota No.
Nama Kolom
Tipe
Key
Null ?
Deskripsi
1.
KD_PROP
Char(2)
Kode Propinsi
2.
KD_ KOTA
Char(2)
Kode Kabupaten/Kota
3.
NO_ZONA
Char(5)
Nomor Sistem Proyeksi dan Zona
4.
KET_ZONA
VarChar(50)
Keterangan Sistem Proyeksi dan Zona
74
j. Tabel SUNGAI Tabel yang menyimpan data sungai No.
Nama Kolom
Tipe
Key
Null ?
Deskripsi
1.
KD_PROP
Char(2)
Kode Propinsi
2.
KD_ KOTA
Char(2)
Kode Kabupaten/Kota
3.
KD_KEC
Char(3)
Kode Kecamatan
4.
KD_KEL
Char(3)
Kode Kelurahan/desa
5.
ID_SUNGAI
Number(5)
Nomor Identitas Sungai
6.
NM_SUNGAI
VarChar(30)
Nama Sungai
7.
LBR_SUNGAI
Number(3)
Lebar Sungai
8.
LYR_ SUNGAI
SDO_Geometry
Data Geometri Sungai
Tipe
Key
Null ?
k. Tabel SIMBOL Tabel yang menyimpan data simbol No.
Nama Kolom
Deskripsi
1.
KD_PROP
Char(2)
Kode Propinsi
2.
KD_ KOTA
Char(2)
Kode Kabupaten/Kota
3.
KD_KEC
Char(3)
Kode Kecamatan
4.
KD_KEL
Char(3)
Kode Kelurahan/desa
5.
ID_SIMBOL
Char(3)
Nomor Identitas Simbol
5.
KETERANGAN
Varchar(50)
Keterangan Mengenai Simbol
6.
LYR_ SIMBOL
SDO_Geometry
Data Geometri Simbol
l.
Tabel PEMAKAI_SIG
Tabel yang menyimpan data pemakai SIG PBB No.
Nama Kolom
Tipe
Key
Null ?
Deskripsi
1.
NIP_PETUGAS
Char(9)
NIP Petugas
2.
KD_ WWNG
Char(2)
Kode Wewenang
m. Tabel WEWENANG_SIG Tabel yang menyimpan data wewenang pemakai SIG PBB No.
Nama Kolom
Tipe
Key
Null ?
Deskripsi
1.
KD_ WWNG
Char(9)
Kode Wewenang
2.
NM_ WWNG
Char(2)
Nama Wewenang
75
2. Daftar Hubungan Referensi (Foreign Key) No
Nama
Tabel Induk
Tabel Anak
Kolom
1 2
PROP_KOTA
Propinsi
Kota
- Kd_Prop
KOTA_KEC
Kota
Kecamatan
3
KEC_KEL
Kecamatan
Kelurahan
4
KEL_BLOK
Kelurahan
Blok
5
BLOK_BIDANG
Blok
Bidang
6
BIDANG_BNG
Bidang
Bangunan
7
KEL_JLN
Kelurahan
Jalan
8
KEL_SUNGAI
Kelurahan
Sungai
9 10
PEMAKAI_BIDANG
Pemakai_SIG
Bidang
-
PEMAKAI_WWNG
Wewenang_SIG
Pemakai_SIG
- Kd_Wwng
11 12
PEMAKAI_BNG
Pemakai_SIG
Bangunan
- NIP_Petugas
SIMBOL_KEL
Kelurahan
Simbol
-
Kd_Prop Kd_Kota Kd_Prop Kd_Kota Kd_Kec Kd_Prop Kd_Kota Kd_Kec Kd_Kel Kd_Prop Kd_Kota Kd_Kec Kd_Kel Kd_Blok Kd_Prop Kd_Kota Kd_Kec Kd_Kel Kd_Blok No_Urut Kd_Jns_Op Kd_Prop Kd_Kota Kd_Kec Kd_Kel Kd_Prop Kd_Kota Kd_Kec Kd_Kel NIP_Petugas
Kd_Prop Kd_Kota Kd_Kec Kd_Kel
LAMPIRAN C Tablespace LAMPIRAN C.1 Daftar Tablespace Dan Penggunannya
No
Nama Tablespace
Objek Jenis
Nama
1
TS_DATSIG
Tabel
2
TSI_DATSIG
Indek
3
TS_REFSIG
Tabel
4
TSI_REFSIG
Indek
5
TS_BANGUNAN
Tabel
- BANGUNAN
6
TSI_BANGUNAN
Indek
- BANGUNAN_PK_IDX - BANGUNAN_ SPATIAL _IDX
7
TS_BIDANG
Tabel
- BIDANG
8
TSI_BIDANG
Indek
- BIDANG_PK_IDX - BIDANG_ SPATIAL _IDX
-
76
BLOK JALAN SIMBOL SUNGAI BLOK_PK _IDX JALAN_PK_IDX SIMBOL_PK_IDX SUNGAI_PK_IDX BLOK_ SPATIAL _IDX JALAN_ SPATIAL _IDX SIMBOL_ SPATIAL _IDX SUNGAI_ SPATIAL _IDX PROPINSI KOTAK KECAMATAN KELURAHAN REFSIMBOL PEMAKAI_SIG ZONA_PROYEKSI WEWENANG PROPINSI_PK_IDX KOTA_PK_IDX KECAMATAN_PK_IDX KELURAHAN_PK_IDX REFSIMBOL_PK_IDX PEMAKAI_SIG_PK_IDX ZONA_PROYEKSI_PK_IDX WEWENANG_PK_IDX PROPINSI_SPATIAL_IDX KOTA_ SPATIAL _IDX KECAMATAN_ SPATIAL _IDX KELURAHAN_ SPATIAL _IDX
77
LAMPIRAN C. 2 Skrip Pembuatan Tablespace -- Pembuatan tablespace TS_DATSIG drop tablespace TS_DATSIG including contents cascade constraints; create tablespace TS_DATSIG datafile 'D:\ORACLE\ORADATA\SISMIOP\TS_DATSIG_01.ORA' size 10 reuse autoextend on next 1 maxsize UNLIMITED; -- Pembuatan tablespace TSI_DATSIG drop tablespace TSI_DATSIG including contents cascade constraints; create tablespace TSI_DATSIG datafile 'D:\ORACLE\ORADATA\SISMIOP\TSI_DATSIG_01.ORA' size 10 reuse autoextend on next 2 maxsize UNLIMITED; -- Pembuatan tablespace TS_REFSIG drop tablespace TS_REFSIG including contents cascade constraints; create tablespace TS_REFSIG datafile 'D:\ORACLE\ORADATA\SISMIOP\TS_REFSIG_01.ORA' size 10 reuse autoextend on next 1 maxsize UNLIMITED; -- Pembuatan tablespace TSI_REFSIG drop tablespace TSI_REFSIG including contents cascade constraints; create tablespace TSI_REFSIG datafile 'D:\ORACLE\ORADATA\SISMIOP\TSI_REFSIG_01.ORA' size 10 reuse autoextend on next 1 maxsize UNLIMITED; -- Pembuatan tablespace TS_BIDANG drop tablespace TS_BIDANG including contents cascade constraints; create tablespace TS_BIDANG datafile 'D:\ORACLE\ORADATA\SISMIOP\TS_BIDANG_01.0RA' size 50 reuse autoextend on next 5 maxsize UNLIMITED; -- Pembuatan tablespace TSI_BIDANG drop tablespace TSI_BIDANG including contents cascade constraints; create tablespace TSI_BIDANG datafile 'D:\ORACLE\ORADATA\SISMIOP\TSI_BIDANG_01.ORA' size 50 reuse autoextend on next 5 maxsize UNLIMITED; -- Pembuatan tablespace TS_BANGUNAN drop tablespace TS_BANGUNAN including contents cascade constraints; create tablespace TS_BANGUNAN datafile 'D:\ORACLE\ORADATA\SISMIOP\TS_BANGUNAN_01.0RA' size 50 reuse autoextend on next 5 maxsize UNLIMITED; -- Pembuatan tablespace TSI_BANGUNAN drop tablespace TSI_BANGUNAN including contents cascade constraints; create tablespace TSI_BANGUNAN datafile 'D\ORACLE\ORADATA\SISMIOP\TSI_BANGUNAN_01.ORA', size 50 reuse autoextend on next 5 maxsize UNLIMITED;
LAMPIRAN D Beberapa Contoh Algoritma Trigger Data Spasial 1. Algoritma Pengecekan Representasi Objek Data Spasial
78
79 2. Algoritma Pengecekan Hubungan Spasial Objek Bidang dengan Objek Blok
80 3. Algoritma Pengecekan Hubungan Spasial Objek Bidang dengan Objek Jalan
81 4. Algoritma Pengecekan Hubungan Spasial antar Objek Bidang
LAMPIRAN E Skrip Pembuatan Basis Data /*===================================================*/ /* DBMS name: ORACLE */ /* Created By: Sunaryo */ /* Created on: 04/01/2008 5:39:37 */ /*===================================================*/ /*===================================================*/ /* Table: PROPINSI /*===================================================*/ create table SIGPBB.PROPINSI ( KD_PROP CHAR(2) not null, LYR_PROP MDSYS.SDO_Geometry not null, constraint PK_PROPINSI primary key (KD_PROP)) tablespace TS_REFSIG; /*===================================================*/ /* Index: PROP_SPATIAL_IDX /*===================================================*/ create index SIGPBB.PROP_SPATIAL_IDX on SIGPBB.PROPINSI (LYR_PROP) tablespace TSI_REFSIG indextype is mdsys.spatial_index; /*===================================================*/ /* Table: REF_SIMBOL /*===================================================*/ create table SIGPBB.REF_SIMBOL ( KD_SIMBOL CHAR(2) not null, NM_SIMBOL VARCHAR2(30), GAMBAR_SIMBOL BLOB, constraint PK_REF_SIMBOL primary key (KD_SIMBOL)) tablespace TS_REFSIG; /*===================================================*/ /* Table: WEWENANG_SIG /*===================================================*/ create table SIGPBB.WEWENANG_SIG ( KD_WWNG CHAR(2) not null, NM_WWNG VARCHAR2(30), constraint PK_WEWENANG_SIG primary key (KD_WWNG)) tablespace TS_REFSIG; /*===================================================*/ /* Table: ZONA_PROYEKSI /*===================================================*/ create table SIGPBB.ZONA_PROYEKSI ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_ZONA NUMBER(5) not null, KET_ZONA VARCHAR(200), constraint PK_ZONA_PROYEKSI primary key (KD_PROP, KD_KOTA, KD_ZONA)) tablespace TS_REFSIG;
82
83
/*===================================================*/ /* Table: KOTA /*===================================================*/ create table SIGPBB.KOTA ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, LYR_KOTA MDSYS.SDO_Geometry not null, constraint PK_KOTA primary key (KD_PROP, KD_KOTA), constraint FK_KOTA_PROP foreign key (KD_PROP) references SIGPBB.PROPINSI (KD_PROP)) tablespace TS_REFSIG; /*===============================================*/ /* Index: KOTA_SPATIAL_IDX /*===============================================*/ create index SIGPBB.KOTA_SPATIAL_IDX on SIGPBB.KOTA (LYR_KOTA)tablespace TSI_REFSIG indextype is mdsys.spatial_index; /*===================================================*/ /* Table: PEMAKAI_SIG /*===================================================*/ create table SIGPBB.PEMAKAI_SIG ( NIP_PETUGAS CHAR(9) not null, KD_WWNG CHAR(2) not null, constraint PK_PEMAKAI_SIG primary key (NIP_PETUGAS), constraint FK_PEMAKAI_WWNG foreign key (KD_WWNG) references SIGPBB.WEWENANG_SIG (KD_WWNG)) tablespace TS_REFSIG; /*===================================================*/ /* Index: PEMAKAI_WEWENANG_FK /*===================================================*/ create index SIGPBB.PEMAKAI_WEWENANG_FK on SIGPBB.PEMAKAI_SIG (KD_WWNG ASC); /*===================================================*/ /* Table: KECAMATAN /*===================================================*/ create table SIGPBB.KECAMATAN ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_KEC CHAR(3) not null, LYR_KEC MDSYS.SDO_Geometry not null, constraint PK_KECAMATAN primary key (KD_PROP, KD_KOTA, KD_KEC), constraint FK_KEC_KOTA foreign key (KD_PROP, KD_KOTA) references SIGPBB.KOTA (KD_PROP, KD_KOTA)) tablespace TS_REFSIG; /*===================================================*/ /* Index: KEC_SPATIAL_IDX /*===================================================*/ create index SIGPBB.KEC_SPATIAL_IDX on SIGPBB.KECAMATAN (LYR_KEC)tablespace TSI_REFSIG indextype is mdsys.spatial_index;
84
/*=================================================*/ /* Table: KELURAHAN /*=================================================*/ create table SIGPBB.KELURAHAN ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_KEC CHAR(3) not null, KD_KEL CHAR(3) not null, TGL_ENTRI_KEL DATE default sysdate, LYR_KEL MDSYS.SDO_Geometry not null, constraint PK_KELURAHAN primary key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL), constraint FK_KEL_KEC foreign key (KD_PROP, KD_KOTA, KD_KEC) references SIGPBB.KECAMATAN (KD_PROP, KD_KOTA, KD_KEC)) tablespace TS_REFSIG; /*================================================*/ /* Index: KEL_SPATIAL_IDX /*================================================*/ create index SIGPBB.KEL_SPATIAL_IDX on SIGPBB.KELURAHAN (LYR_KEL)tablespace TSI_REFSIG indextype is mdsys.spatial_index; /*=================================================*/ /* Table: JALAN /*=================================================*/ create table SIGPBB.JALAN ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_KEC CHAR(3) not null, KD_KEL CHAR(3) not null, ID_JLN NUMBER(5) not null, NM_JLN VARCHAR2(30), LBR_JLN NUMBER(3), LYR_JLN MDSYS.SDO_Geometry not null, constraint PK_JALAN primary key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, ID_JLN), constraint FK_JALAN_KEL foreign key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL) references SIGPBB.KELURAHAN (KD_PROP, KD_KOTA, KD_KEC,KD_KEL)) tablespace TS_DATSIG; /*==============================================*/ /* Index: JALAN_SPATIAL_IDX /*==============================================*/ create index SIGPBB.JALAN_SPATIAL_IDX on SIGPBB.JALAN (LYR_JLN)tablespace TSI_DATSIG indextype is MDSYS.SPATIAL_INDEX; /*==================================================*/ /* Table: SIMBOL /*==================================================*/ create table SIGPBB.SIMBOL ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_KEC CHAR(3) not null, KD_KEL CHAR(3) not null, ID_SIMBOL CHAR(3) not null, KD_SIMBOL CHAR(2) not null,
85
KETERANGAN VARCHAR2(50) not null, LYR_SIMBOL MDSYS.SDO_Geometry not null, constraint PK_SIMBOL primary key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, ID_SIMBOL), constraint FK_SIMBOL_KEL foreign key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL) references SIGPBB.KELURAHAN (KD_PROP, KD_KOTA, KD_KEC, KD_KEL), constraint FK_SIMBOL_REFSIMBOL foreign key (KD_SIMBOL) references SIGPBB.REF_SIMBOL (KD_SIMBOL)) tablespace TS_DATSIG; /*==================================================*/ /* Index: SIMBOL_SPATIAL_IDX /*==================================================*/ create index SIGPBB.SIMBOL_SPATIAL_IDX on SIGPBB.SIMBOL (LYR_SIMBOL)tablespace TSI_DATSIG indextype is mdsys.spatial_idx; /*===================================================*/ /* Table: SUNGAI /*===================================================*/ create table SIGPBB.SUNGAI ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_KEC CHAR(3) not null, KD_KEL CHAR(3) not null, ID_SUNGAI NUMBER(5) not null, NM_SUNGAI VARCHAR2(30), LBR_SUNGAI NUMBER(3), LYR_SUNGAI MDSYS.SDO_Geometry not null, constraint PK_SUNGAI primary key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, ID_SUNGAI), constraint FK_SUNGAI_KEL foreign key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL) references SIGPBB.KELURAHAN (KD_PROP, KD_KOTA, KD_KEC, KD_KEL) on delete cascade) tablespace TS_DATSIG; /*===================================================*/ /* Index: SUNGAI_SPATIAL_IDX /*===================================================*/ create index SIGPBB.SUNGAI_SPATIAL_IDX on SIGPBB.SUNGAI (LYR_SUNGAI)tablespace TSI_DATSIG indextype is MDSYS.SPATIAL_INDEX; /*===============================================*/ /* Table: BLOK /*===============================================*/ create table SIGPBB.BLOK ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_KEC CHAR(3) not null, KD_KEL CHAR(3) not null, KD_BLOK CHAR(3) not null, LYR_BLOK MDSYS.SDO_Geometry not null, constraint PK_BLOK primary key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, KD_BLOK), constraint FK_BLOK_KEL foreign key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL)
86
references SIGPBB.KELURAHAN (KD_PROP, KD_KOTA, KD_KEC, KD_KEL)) tablespace TSI_DATSIG; /*===================================================*/ /* Index: BLOK_SPATIAL_IDX /*===================================================*/ create index SIGPBB.BLOK_SPATIAL_IDX on SIGPBB.BLOK (LYR_BLOK)tablespace TSI_DATSIG indextype is MDSYS.SPATIAL_INDEX; /*=================================================*/ /* Table: BIDANG /*==================================================*/ create table SIGPBB.BIDANG ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_KEC CHAR(3) not null, KD_KEL CHAR(3) not null, KD_BLOK CHAR(3) not null, NO_URUT CHAR(4) not null, KD_JNS_OP CHAR(1) not null, NIP_PETUGAS CHAR(9) not null, TGL_ENTRI_BIDANG DATE default sysdate, LYR_BIDANG MDSYS.SDO_Geometry not null, constraint PK_BIDANG primary key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, KD_BLOK, NO_URUT, KD_JNS_OP), constraint FK_BIDANG_PEMAKAI foreign key (NIP_PETUGAS) references SIGPBB.PEMAKAI_SIG (NIP_PETUGAS), constraint FK_BIDANG_BLOK foreign key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, KD_BLOK) references SIGPBB.BLOK (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, KD_BLOK)) tablespace TS_BIDANG; /*===================================================*/ /* Index: PEMAKAI_BIDANG_FK /*===================================================*/ create index SIGPBB.PEMAKAI_BIDANG_FK on SIGPBB.BIDANG (NIP_PETUGAS ASC)tablespace TSI_BIDANG; /*==================================================*/ /* Index: BDG_SPATIAL_IDX /*==================================================*/ create index SIGPBB.BDG_SPATIAL_IDX on SIGPBB.BIDANG (LYR_BIDANG ASC) tablespace TSI_BIDANG indextype is MDSYS.SPATIAL_INDEX; /*===================================================*/ /* Table: BANGUNAN /*===================================================*/ create table SIGPBB.BANGUNAN ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_KEC CHAR(3) not null, KD_KEL CHAR(3) not null, KD_BLOK CHAR(3) not null, NO_URUT CHAR(4) not null, KD_JNS_OP CHAR(1) not null, NO_BNG CHAR(3) not null,
87
NIP_PETUGAS CHAR(9) not null, TGL_ENTRI_BNG DATE default sysdate, LYR_BNG MDSYS.SDO_Geometry not null, constraint PK_BANGUNAN primary key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, KD_BLOK, NO_URUT, KD_JNS_OP, NO_BNG), constraint FK_BANGUNAN_PEMAKAI foreign key (NIP_PETUGAS) references SIGPBB.PEMAKAI_SIG (NIP_PETUGAS), constraint FK_BANGUNAN_BIDANG foreign key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, KD_BLOK, NO_URUT, KD_JNS_OP) references SIGPBB.BIDANG (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, KD_BLOK, NO_URUT, KD_JNS_OP) on delete cascade) tablespace ts_bangunan; /*===============================================*/ /* Index: PEMAKAI_BNG_FK /*===============================================*/ create index SIGPBB.PEMAKAI_BNG_FK on SIGPBB.BANGUNAN (NIP_PETUGAS ASC)tablespace TSI_BANGUNAN; /*=================================================*/ /* Index: BNG_SPATIAL_IDX /*=================================================*/ create index SIGPBB.BNG_SPATIAL_IDX on SIGPBB.BANGUNAN (LYR_BNG)tablespace TSI_BANGUNAN indextype is MDSYS.SPATIAL_INDEX;
LAMPIRAN F Skrip Pembuatan Triggers /* Trigger TIUBS_PROPINSI pada tabel propinsi dijalankan saat insert atau update data */ CREATE OR REPLACE TRIGGER tiubs_propinsi BEFORE INSERT OR UPDATE ON sigpbb.propinsi FOR EACH ROW DECLARE integrity_error EXCEPTION; errno INTEGER; errmsg CHAR (200); dummy INTEGER; FOUND BOOLEAN; var_cek_geom NUMBER (1); var_id VARCHAR2 (5); BEGIN IF :NEW.kd_prop IS NOT NULL THEN var_id := :NEW.kd_prop; -- Cek bentuk geometri -- ============================================== var_cek_geom := cek_geometri (:NEW.lyr_prop, 3); IF var_cek_geom = 0 THEN errno := -20003; errmsg := 'Bentuk geometri propinsi ' || var_id || ' tidak valid'; RAISE integrity_error; END IF;
-- ============================================== END IF;
-- Errors handling
EXCEPTION WHEN integrity_error THEN raise_application_error (errno, errmsg); END; /
/* Trigger TIUBS_KOTA pada tabel kota dijalankan saat insert atau update data */ CREATE OR REPLACE TRIGGER tiubs_kota BEFORE INSERT OR UPDATE OF lyr_kota ON sigpbb.kota FOR EACH ROW DECLARE integrity_error EXCEPTION; errno INTEGER; errmsg CHAR (200); dummy INTEGER; FOUND BOOLEAN; var_cek_geom NUMBER (1); var_cek_sk NUMBER (1);
88
89 var_geo var_relation var_id var_pro
SDO_GEOMETRY; VARCHAR2 (255); VARCHAR2 (10); VARCHAR2 (10);
-- Deklarasi cursor data spasial tabel kecamatan
CURSOR cek_lyr_prop (var_kd_prop VARCHAR) IS SELECT lyr_prop FROM propinsi WHERE kd_prop = var_kd_prop; BEGIN
-- "Kota/kabupaten harus mempunyai hubungan INSIDE atau COVEREDBY dengan propinsi " IF :NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL THEN var_id := :NEW.kd_prop || :NEW.kd_kota; var_pro := :NEW.kd_prop;
-- Cek bentuk geometri -- ============================================== var_cek_geom := cek_geometri (:NEW.lyr_kota, 3); IF var_cek_geom = 0 THEN errno := -20003; errmsg := 'Bentuk geometri kota ' || var_id || ' tidak valid'; RAISE integrity_error; END IF;
-- ============================================== -- Cek sistem koordinat -- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_kota); IF var_cek_sk = 0 THEN errno := -20003; errmsg := 'Sistem koordinat dan atau zonanya salah'; RAISE integrity_error; END IF;
-- ============================================== OPEN cek_lyr_prop (:NEW.kd_prop); FETCH cek_lyr_prop INTO var_geo; FOUND := cek_lyr_prop%FOUND; CLOSE cek_lyr_prop;
-- Cek relasi spasial kota/kabupaten dengan propinsi
var_relation := sdo_geom.relate (:NEW.lyr_kota, 'determine', var_geo, 0.005); IF NOT FOUND THEN errno := -20002; errmsg := 'Wilayah propinsi ' || var_pro || ' tidak ada. Tidak bisa insert atau update objek kota/kabupaten'; RAISE integrity_error; ELSE IF var_relation NOT IN ('COVEREDBY', 'INSIDE') THEN errno := -20003;
90 errmsg := 'Kota/kabupaten ' || var_id || ' tidak berada pada wilayah propinsi yang benar'; RAISE integrity_error; END IF; END IF; END IF;
-- Errors handling
EXCEPTION WHEN integrity_error THEN raise_application_error (errno, errmsg); END; /
/* Trigger TIUBS_KECAMATAN pada tabel kecamatan dijalankan saat insert atau update data */ CREATE OR REPLACE TRIGGER tiubs_kecamatan BEFORE INSERT OR UPDATE OF lyr_kec ON sigpbb.kecamatan FOR EACH ROW DECLARE integrity_error EXCEPTION; errno INTEGER; errmsg CHAR (200); dummy INTEGER; FOUND BOOLEAN; var_cek_geom NUMBER (1); var_cek_sk NUMBER (1); var_geo SDO_GEOMETRY; var_relation VARCHAR2 (255); var_id VARCHAR2 (20); var_kt VARCHAR2 (20); -- Deklarasi cursor data spasial tabel kecamatan
CURSOR cek_lyr_kota (var_kd_prop VARCHAR, var_kd_kota VARCHAR) IS SELECT lyr_kota FROM kota WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota; BEGIN
-- "Kecamatan harus mempunyai hubungan INSIDE atau COVEREDBY dengan kota/kabupaten " IF :NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL AND :NEW.kd_kec IS NOT NULL THEN var_id := :NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec; var_kt := :NEW.kd_prop || :NEW.kd_kota;
-- Cek bentuk geometri -- ============================================== var_cek_geom := cek_geometri (:NEW.lyr_kec, 3); IF var_cek_geom = 0 THEN errno := -20003; errmsg := 'Bentuk geometri kecamatan ' || var_id || ' tidak valid'; RAISE integrity_error; END IF;
91 -- ============================================== -- Cek sistem koordinat -- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_kec); IF var_cek_sk = 0 THEN errno := -20003; errmsg := 'Sistem koordinat dan atau zonanya salah'; RAISE integrity_error; END IF;
-- ============================================== OPEN cek_lyr_kota (:NEW.kd_prop, :NEW.kd_kota); FETCH cek_lyr_kota INTO var_geo; FOUND := cek_lyr_kota%FOUND; CLOSE cek_lyr_kota;
-- Cek relasi spasial kecamatan dengan kota/kabupaten
var_relation := sdo_geom.relate (:NEW.lyr_kec, 'determine', var_geo, 0.005); IF NOT FOUND THEN errno := -20002; errmsg := 'Wilayah kota '|| var_kt|| ' tidak ada. Tidak bisa insert atau update objek kecamatan'; RAISE integrity_error; ELSE IF var_relation NOT IN ('COVEREDBY', 'INSIDE') THEN errno := -20003; errmsg := 'Objek kecamatan ' || var_id || ' tidak berada pada wilayah kota/kabupaten yang benar'; RAISE integrity_error; END IF; END IF; END IF;
-- Errors handling
EXCEPTION WHEN integrity_error THEN raise_application_error (errno, errmsg); END; /
/* Trigger TIUBS_KELURAHAN pada tabel kelurahan dijalankan saat insert atau update data */
CREATE OR REPLACE TRIGGER sigpbb.tiubs_kelurahan BEFORE INSERT OR UPDATE OF lyr_kel ON sigpbb.kelurahan FOR EACH ROW DECLARE integrity_error EXCEPTION; errno INTEGER; errmsg CHAR (200); dummy INTEGER; FOUND BOOLEAN;
92 var_cek_geom NUMBER (1); var_cek_sk NUMBER (1); var_geo SDO_GEOMETRY; var_relation VARCHAR2 (255); var_id VARCHAR2 (25); var_kec VARCHAR2 (25);
-- Deklarasi cursor data spasial tabel kecamatan
CURSOR cek_lyr_kec (var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR) IS SELECT lyr_kec FROM kecamatan WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota AND kd_kec = var_kd_kec;
BEGIN
-- "Kelurahankecamatan harus mempunyai hubungan INSIDE atau COVEREDBY dengan kecamatan " IF
:NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL AND :NEW.kd_kec IS NOT NULL AND :NEW.kd_kel IS NOT NULL THEN var_id := :NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec || :NEW.kd_kel; var_kec := :NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec;
-- Cek bentuk geometri -- ============================================== var_cek_geom := cek_geometri (:NEW.lyr_kel, 3); IF var_cek_geom = 0 THEN errno := -20003; errmsg := 'Bentuk geometri kelurahan ' || var_id || ' tidak valid'; RAISE integrity_error; END IF;
-- ============================================== -- Cek sistem koordinat -- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_kel); IF var_cek_sk = 0 THEN errno := -20003; errmsg := 'Sistem koordinat dan atau zonanya salah'; RAISE integrity_error; END IF;
-- ============================================== OPEN cek_lyr_kec (:NEW.kd_prop, :NEW.kd_kota, :NEW.kd_kec); FETCH cek_lyr_kec INTO var_geo; FOUND := cek_lyr_kec%FOUND; CLOSE cek_lyr_kec;
-- Cek relasi spasial kelurahan dengan kecamatan
var_relation := sdo_geom.relate (:NEW.lyr_kel, 'determine', var_geo, 0.005); IF NOT FOUND THEN errno := -20002;
93 errmsg := 'Wilayah kecamatan '|| var_kec|| ' tidak ada. Tidak bisa insert/update objek kelurahan'; RAISE integrity_error; ELSE IF var_relation NOT IN ('COVEREDBY', 'INSIDE') THEN errno := -20003; errmsg := 'Posisi objek kelurahan '|| var_id || ' tidak berada pada kecamatan yang benar'; RAISE integrity_error; END IF; END IF; END IF;
-- Errors handling
EXCEPTION WHEN integrity_error THEN raise_application_error (errno, errmsg); END; /
/* Trigger TIUBS_BLOK pada tabel blok dijalankan saat insert atau update data */ CREATE OR REPLACE TRIGGER tiubs_blok BEFORE INSERT OR UPDATE OF lyr_blok ON sigpbb.blok FOR EACH ROW DECLARE integrity_error EXCEPTION; errno INTEGER; errmsg CHAR (200); dummy INTEGER; FOUND BOOLEAN; var_cek_geom NUMBER (1); var_cek_sk NUMBER (1); var_geo SDO_GEOMETRY; var_relation VARCHAR2 (255); var_cek_geo VARCHAR2 (255); var_id VARCHAR2 (25); var_kel VARCHAR2 (25); -- Deklarasi cursor data spasial tabel kelurahan
CURSOR cek_lyr_kel (var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR, var_kd_kel VARCHAR ) IS SELECT b.lyr_kel FROM kelurahan b WHERE b.kd_prop = var_kd_prop AND b.kd_kota = var_kd_kota AND b.kd_kec = var_kd_kec AND b.kd_kel = var_kd_kel; BEGIN
-- "Blok harus mempunyai hubungan INSIDE atau COVEREDBY dengan Kelurahan"
IF
:NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL AND :NEW.kd_kec IS NOT NULL AND :NEW.kd_kel IS NOT NULL AND :NEW.kd_blok IS NOT NULL THEN
94 var_id := :NEW.kd_prop|| :NEW.kd_kota|| :NEW.kd_kec ||:NEW.kd_kel|| :NEW.kd_blok; var_kel := :NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec || :NEW.kd_kel;
-- Cek bentuk geometri -- ============================================== var_cek_geom := cek_geometri (:NEW.lyr_blok, 3); IF var_cek_geom = 0 THEN errno := -20003; errmsg := 'Bentuk geometri blok ' || var_id || ' tidak valid'; RAISE integrity_error; END IF;
-- ============================================== -- Cek sistem koordinat -- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_blok); IF var_cek_sk = 0 THEN errno := -20003; errmsg := 'Sistem koordinat dan atau zonanya salah '; RAISE integrity_error; END IF;
-- ==============================================
OPEN cek_lyr_kel (:NEW.kd_prop, :NEW.kd_kota, :NEW.kd_kec, :NEW.kd_kel); FETCH cek_lyr_kel INTO var_geo; FOUND := cek_lyr_kel%FOUND; CLOSE cek_lyr_kel;
-- Cek relasi spasial blok dengan kelurahan
var_relation := sdo_geom.relate (:NEW.lyr_blok, 'determine', var_geo, 0.005); IF NOT FOUND THEN errno := -20002; errmsg := 'Wilayah kelurahan ' || var_kel || ' tidak ada. Tidak bisa insert atau update objek blok'; RAISE integrity_error; ELSE IF var_relation NOT IN ('COVEREDBY', 'INSIDE') THEN errno := -20003; errmsg := 'Blok ' || var_id || ' tidak berada pada wilayah kelurahan yang benar'; RAISE integrity_error; END IF; END IF; END IF;
-- Errors handling
EXCEPTION WHEN integrity_error THEN raise_application_error (errno, errmsg); END; /
95 /* Trigger TIUBS_BIDANG pada tabel bidang dijalankan saat insert atau update data */ CREATE OR REPLACE TRIGGER sigpbb.tiubs_bidang BEFORE INSERT OR UPDATE ON sigpbb.bidang FOR EACH ROW DECLARE integrity_error EXCEPTION; errno INTEGER; errmsg CHAR (200); FOUND BOOLEAN; var_cek_geom NUMBER (1); var_cek_sk NUMBER (1); var_relation VARCHAR2 (255); var_geo SDO_GEOMETRY; var_cek NUMBER (1); var_id VARCHAR2 (25); var_blok VARCHAR2 (25); -- Deklarasi cursor data spasial tabel blok
CURSOR cek_lyr_blok (var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR, var_kd_kel VARCHAR, var_kd_blok VARCHAR ) IS SELECT lyr_blok FROM blok WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota AND kd_kec = var_kd_kec AND kd_kel = var_kd_kel AND kd_blok = var_kd_blok;
-- -- Deklarasi cursor data spasial tabel jalan
CURSOR cek_lyr_jln (var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR, var_kd_kel VARCHAR ) IS SELECT lyr_jln FROM jalan WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota AND kd_kec = var_kd_kec AND kd_kel = var_kd_kel;
-- -- Deklarasi cursor data spasial tabel sungai
CURSOR cek_lyr_sg ( var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR, var_kd_kel VARCHAR ) IS SELECT lyr_sungai FROM sungai WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota AND kd_kec = var_kd_kec AND kd_kel = var_kd_kel; BEGIN IF :NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL AND :NEW.kd_kec IS NOT NULL AND :NEW.kd_kel IS NOT NULL AND :NEW.kd_blok IS NOT NULL AND :NEW.no_urut IS NOT NULL AND :NEW.kd_jns_op IS NOT NULL THEN var_id := :NEW.kd_prop|| :NEW.kd_kota|| :NEW.kd_kec|| :NEW.kd_kel|| :NEW.kd_blok|| :NEW.no_urut|| :NEW.kd_jns_op; var_blok := :NEW.kd_prop || :NEW.kd_kota|| :NEW.kd_kec|| :NEW.kd_kel|| :NEW.kd_blok;
96 - Cek bentuk geometri -- ============================================== var_cek_geom := cek_geometri (:NEW.lyr_bidang, 3); IF var_cek_geom = 0 THEN errno := -20003; errmsg := 'Bentuk geometri bidang ' || var_id || ' tidak valid'; RAISE integrity_error; END IF;
-- ============================================== -- Cek sistem koordinat -- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_bidang); IF var_cek_sk = 0 THEN errno := -20003; errmsg := 'Sistem koordinat salah dan atau zonanya salah'; RAISE integrity_error; END IF;
-- ==============================================
-- "Bidang harus mempunyai hubungan INSIDE atau COVEREDBY dengan Blok" -- ==================================================== OPEN cek_lyr_blok (:NEW.kd_prop, :NEW.kd_kota,:NEW.kd_kec,:NEW.kd_kel, :NEW.kd_blok ); FETCH cek_lyr_blok INTO var_geo; FOUND := cek_lyr_blok%FOUND; CLOSE cek_lyr_blok;
-- Cek relasi spasial bidang dengan blok
var_relation := sdo_geom.relate (:NEW.lyr_bidang, 'determine', var_geo, 0.005); IF NOT FOUND THEN errno := -20003; errmsg := 'Blok ' || var_blok || ' tidak ada. Tidak bisa update objek bidang'; RAISE integrity_error; ELSE IF var_relation NOT IN ('COVEREDBY', 'INSIDE') THEN errno := -20004; errmsg := 'Bidang ' || var_id || ' tidak berada pada blok yang benar'; RAISE integrity_error; END IF; END IF;
-- ==================================================== -- "Bidang tidak boleh berpotongan/OVERLAP dengan Jalan" -- ====================================================
OPEN cek_lyr_jln (:NEW.kd_prop, :NEW.kd_kota, :NEW.kd_kec, :NEW.kd_kel); LOOP FETCH cek_lyr_jln INTO var_geo; EXIT WHEN cek_lyr_jln%NOTFOUND; var_relation := sdo_geom.relate (:NEW.lyr_bidang, 'determine', var_geo, 0.005);
97 IF var_relation LIKE 'OVERLAP%' THEN errno := -20004; errmsg := 'Bidang '|| var_id ||' tidak boleh berpotongan/overlap dengan Jalan'; RAISE integrity_error; END IF; END LOOP; CLOSE cek_lyr_jln;
-- =================================================
-- "Bidang tidak boleh berpotongan/OVERLAP dengan Sungai" -- ====================================================
OPEN cek_lyr_sg (:NEW.kd_prop, :NEW.kd_kota, :NEW.kd_kec, :NEW.kd_kel); LOOP FETCH cek_lyr_sg INTO var_geo; EXIT WHEN cek_lyr_sg%NOTFOUND; var_relation := sdo_geom.relate (:NEW.lyr_bidang, 'determine', var_geo, 0.005); IF var_relation LIKE 'OVERLAP%' THEN errno := -20004; errmsg := 'Bidang '||var_id||' tidak boleh berpotongan/overlap dengan Sungai'; RAISE integrity_error; END IF; END LOOP; CLOSE cek_lyr_sg;
-- ===================================================== -- "Cek relasi bidang dengan bidang (jika 0 ok, 1 ada yg overlap)" -- ===================================================
var_cek := cek_rel_antar_bidang (:NEW.kd_prop,:NEW.kd_kota,:NEW.kd_kec, :NEW.kd_kel,:NEW.kd_blok,:NEW.no_urut,:NEW.kd_jns_op, :NEW.lyr_bidang ); IF var_cek = 1 THEN errno := -20005; errmsg := 'Bidang '||var_id ||' tidak boleh berpotongan/OVERLAP dengan bidang lainnya'; RAISE integrity_error; END IF;
-- ===================================================
END IF;
-- Errors handling
EXCEPTION WHEN integrity_error THEN raise_application_error (errno, errmsg); END; /
/* Trigger TIUBS_BANGUNAN pada tabel bangunan dijalankan saat insert atau update data */ CREATE OR REPLACE TRIGGER sigpbb.tiubs_bangunan BEFORE INSERT OR UPDATE OF lyr_bgn ON sigpbb.bangunan
98 FOR EACH ROW DECLARE integrity_error EXCEPTION; errno INTEGER; errmsg CHAR (200); FOUND BOOLEAN; var_cek_geom NUMBER (1); var_cek_sk NUMBER (1); var_relation VARCHAR2 (255); var_cek_geo VARCHAR2 (255); var_geo SDO_GEOMETRY; var_id VARCHAR2 (25); var_nop VARCHAR2 (25);
-- Deklarasi cursor data spasial tabel blok
CURSOR cek_lyr_bidang ( var_kd_prop VARCHAR, var_kd_kota var_kd_kec VARCHAR, var_kd_kel VARCHAR, var_kd_blok var_no_urut VARCHAR, var_kd_jns_op VARCHAR ) IS SELECT lyr_bidang FROM bidang WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota AND kd_kec = var_kd_kec AND kd_kel = var_kd_kel AND kd_blok = var_kd_blok AND no_urut = var_no_urut AND kd_jns_op = var_kd_jns_op;
VARCHAR, VARCHAR,
BEGIN IF :NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL AND :NEW.kd_kec IS NOT NULL AND :NEW.kd_kel IS NOT NULL AND :NEW.kd_blok IS NOT NULL AND :NEW.no_urut IS NOT NULL AND :NEW.kd_jns_op IS NOT NULL AND :NEW.no_bgn IS NOT NULL THEN var_id := :NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec || :NEW.kd_kel || :NEW.kd_blok || :NEW.no_urut|| :NEW.kd_jns_op || :NEW.no_bgn; var_nop :=:NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec || :NEW.kd_kel || :NEW.kd_blok || :NEW.no_urut|| :NEW.kd_jns_op;
-- Cek bentuk geometri -- ============================================== var_cek_geom := cek_geometri (:NEW.lyr_bgn, 3); IF var_cek_geom = 0 THEN errno := -20003; errmsg := 'Bentuk geometri bangunan ' || var_id || ' tidak valid'; RAISE integrity_error; END IF;
-- ============================================== -- Cek sistem koordinat -- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_bgn); IF var_cek_sk = 0 THEN errno := -20003; errmsg := 'Sistem koordinat dan atau zonanya salah'; RAISE integrity_error;
99 END IF;
-- ============================================== -- "Bangunan harus mempunyai hubungan INSIDE, COVEREDBY atau EQUAL dengan Bidang" -- =================================================== OPEN cek_lyr_bidang (:NEW.kd_prop,:NEW.kd_kota,:NEW.kd_kec,:NEW.kd_kel, :NEW.kd_blok,:NEW.no_urut,:NEW.kd_jns_op); FETCH cek_lyr_bidang INTO var_geo; FOUND := cek_lyr_bidang%FOUND; CLOSE cek_lyr_bidang;
-- Cek relasi spasial bangunan dengan bidang
var_relation := sdo_geom.relate (:NEW.lyr_bgn, 'determine', var_geo, 0.005); IF NOT FOUND THEN errno := -20003; errmsg := 'Bidang ' || var_nop|| ' tidak ada. Tidak bisa insert/update objek bangunan'; RAISE integrity_error; ELSE IF var_relation NOT IN ('COVEREDBY', 'INSIDE', 'EQUAL') THEN errno := -20004; errmsg := 'Objek bangunan ' ||var_id|| ' tidak berada pada bidang yang benar'; RAISE integrity_error; END IF; END IF; END IF;
-- Errors handling
EXCEPTION WHEN integrity_error THEN raise_application_error (errno, errmsg); END; /
/* Trigger TIUBS_JALAN pada tabel jalan dijalankan saat insert atau update data */ CREATE OR REPLACE TRIGGER sigpbb.tiubs_jalan BEFORE INSERT OR UPDATE OF lyr_jln ON sigpbb.jalan FOR EACH ROW DECLARE integrity_error EXCEPTION; errno INTEGER; errmsg CHAR (200); dummy INTEGER; FOUND BOOLEAN; var_cek_geom NUMBER (1); var_cek_sk NUMBER (1); var_geo SDO_GEOMETRY; var_relation VARCHAR2 (255); var_cek_geo VARCHAR2 (255); var_id VARCHAR2 (50);
100 var_kel
VARCHAR2 (25);
-- Deklarasi cursor data spasial tabel kelurahan
CURSOR cek_lyr_kel (var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR, var_kd_kel VARCHAR) IS SELECT b.lyr_kel FROM kelurahan b WHERE b.kd_prop = var_kd_prop AND b.kd_kota = var_kd_kota AND b.kd_kec = var_kd_kec AND b.kd_kel = var_kd_kel;
-- Deklarasi cursor data spasial tabel kelurahan
CURSOR cek_lyr_bidang (var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR, var_kd_kel VARCHAR ) IS SELECT lyr_bidang FROM bidang WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota AND kd_kec = var_kd_kec AND kd_kel = var_kd_kel; BEGIN
-- "JALAN harus mempunyai hubungan INSIDE atau COVEREDBY dengan Kelurahan" IF
:NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL AND :NEW.kd_kec IS NOT NULL AND :NEW.kd_kel IS NOT NULL AND :NEW.id_jalan IS NOT NULL THEN var_id := :NEW.nm_jalan; var_kel := :NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec || :NEW.kd_kel;
-- Cek bentuk geometri -- ============================================== var_cek_geom := cek_geometri (:NEW.lyr_jln, 2); IF var_cek_geom = 0 THEN errno := -20003; errmsg := 'Bentuk geometri jalan ' || var_id || ' tidak valid'; RAISE integrity_error; END IF;
-- ============================================== -- Cek sistem koordinat -- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_jln); IF var_cek_sk = 0 THEN errno := -20003; errmsg := 'Sistem koordinat dan atau zonanya salah'; RAISE integrity_error; END IF;
-- ==============================================
OPEN cek_lyr_kel (:NEW.kd_prop, :NEW.kd_kota, :NEW.kd_kec, :NEW.kd_kel); FETCH cek_lyr_kel INTO var_geo; FOUND := cek_lyr_kel%FOUND; CLOSE cek_lyr_kel;
101 -- Cek relasi spasial JALAN dengan kelurahan
var_relation := sdo_geom.relate (:NEW.lyr_jln, 'determine', var_geo, 0.005);
IF NOT FOUND THEN errno := -20002; errmsg := 'Wilayah kelurahan '|| var_kel|| ' tidak ada. Tidak bisa insert/update objek jalan'; RAISE integrity_error; ELSE IF var_relation NOT IN ('COVEREDBY', 'INSIDE') THEN errno := -20003; errmsg := 'Jalan '|| var_id|| ' tidak berada pada area kelurahan yang benar'; RAISE integrity_error; END IF; END IF;
-- cek relasi dengan bidang
OPEN cek_lyr_bidang (:NEW.kd_prop, :NEW.kd_kota, :NEW.kd_kec, :NEW.kd_kel); LOOP FETCH cek_lyr_bidang INTO var_geo; EXIT WHEN cek_lyr_bidang%NOTFOUND; var_relation := sdo_geom.relate (:NEW.lyr_jln, 'determine', var_geo, 0.005); IF var_relation LIKE 'OVERLAP%' THEN errno := -20004; errmsg := 'Jalan ' || var_id || ' tidak boleh memotong bidang'; RAISE integrity_error; END IF; END LOOP; CLOSE cek_lyr_bidang; END IF;
-- Errors handling
EXCEPTION WHEN integrity_error THEN raise_application_error (errno, errmsg); END; /
/* Trigger TIUBS_SUNGAI pada tabel sungai dijalankan saat insert atau update data */ CREATE OR REPLACE TRIGGER tiubs_sungai BEFORE INSERT OR UPDATE OF lyr_sungai ON sigpbb.sungai FOR EACH ROW DECLARE integrity_error EXCEPTION; errno INTEGER; errmsg CHAR (200); dummy INTEGER; FOUND BOOLEAN; var_cek_geom NUMBER (1);
102 var_cek_sk NUMBER (1); var_geo SDO_GEOMETRY; var_relation VARCHAR2 (255); var_cek_geo VARCHAR2 (255); var_id VARCHAR2 (50); var_kel VARCHAR2 (25);
-- Deklarasi cursor data spasial tabel kelurahan
CURSOR cek_lyr_kel ( var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR, var_kd_kel VARCHAR ) IS SELECT lyr_kel FROM kelurahan WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota AND kd_kec = var_kd_kec AND kd_kel = var_kd_kel; BEGIN
-- "SUNGAI harus mempunyai hubungan INSIDE atau COVEREDBY dengan Kelurahan"
IF
:NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL AND :NEW.kd_kec IS NOT NULL AND :NEW.kd_kel IS NOT NULL AND :NEW.id_sungai IS NOT NULL THEN var_id := :NEW.nm_sungai; var_kel := :NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec || :NEW.kd_kel;
-- Cek bentuk geometri -- ============================================== var_cek_geom := cek_geometri (:NEW.lyr_sungai, 2); IF var_cek_geom = 0 THEN errno := -20003; errmsg := 'Bentuk geometri sungai ' || var_id || ' tidak valid'; RAISE integrity_error; END IF;
-- ============================================== -- Cek sistem koordinat -- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_sungai); IF var_cek_sk = 0 THEN errno := -20003; errmsg := 'Sistem koordinat dan atau zonanya salah'; RAISE integrity_error; END IF;
-- ==============================================
OPEN cek_lyr_kel (:NEW.kd_prop, :NEW.kd_kota, :NEW.kd_kec, :NEW.kd_kel); FETCH cek_lyr_kel INTO var_geo; FOUND := cek_lyr_kel%FOUND; CLOSE cek_lyr_kel;
-- Cek relasi spasial sungai dengan kelurahan
var_relation := sdo_geom.relate (:NEW.lyr_sungai, 'determine', var_geo, 0.005);
IF NOT FOUND THEN
103 errno := -20002; errmsg := 'Wilayah kelurahan '|| var_kel|| ' tidak ada. Tidak bisa insert atau update objek sungai'; RAISE integrity_error; ELSE IF var_relation NOT IN ('COVEREDBY', 'INSIDE') THEN errno := -20003; errmsg := 'Sungai '|| var_id|| ' tidak berada pada wilayah kelurahan yang benar'; RAISE integrity_error; END IF; END IF; END IF;
-- Errors handling
EXCEPTION WHEN integrity_error THEN raise_application_error (errno, errmsg); END; /
/* Trigger TIUBS_SIMBOL pada tabel simbol dijalankan saat insert atau update data */ CREATE OR REPLACE TRIGGER tiubs_simbol BEFORE INSERT OR UPDATE OF lyr_simbol ON sigpbb.simbol FOR EACH ROW DECLARE integrity_error EXCEPTION; errno INTEGER; errmsg CHAR (200); dummy INTEGER; FOUND BOOLEAN; var_cek_geom NUMBER (1); var_cek_sk NUMBER (1); var_geo SDO_GEOMETRY; var_relation VARCHAR2 (255); var_cek_geo VARCHAR2 (255); var_id VARCHAR2 (50); var_kel VARCHAR2 (25); -- Deklarasi cursor data spasial tabel kelurahan
CURSOR cek_lyr_kel ( var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR, var_kd_kel VARCHAR ) IS SELECT lyr_kel FROM kelurahan WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota AND kd_kec = var_kd_kec AND kd_kel = var_kd_kel; BEGIN
-- "Simbol harus mempunyai hubungan INSIDE atau COVEREDBY dengan Kelurahan"
IF
:NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL AND :NEW.kd_kec IS NOT NULL AND :NEW.kd_kel IS NOT NULL
104 AND :NEW.id_simbol IS NOT NULL THEN var_id := :NEW.nm_simbol; var_kel := :NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec || :NEW.kd_kel;
-- Cek bentuk geometri -- ============================================== var_cek_geom := cek_geometri (:NEW.lyr_simbol, 1); IF var_cek_geom = 0 THEN errno := -20003; errmsg := 'Bentuk geometri simbol ' || var_id || ' tidak valid'; RAISE integrity_error; END IF;
-- ============================================== -- Cek sistem koordinat -- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_simbol); IF var_cek_sk = 0 THEN errno := -20003; errmsg := 'Sistem koordinat dan atau zonanya salah'; RAISE integrity_error; END IF;
-- ==============================================
OPEN cek_lyr_kel (:NEW.kd_prop, :NEW.kd_kota, :NEW.kd_kec, :NEW.kd_kel); FETCH cek_lyr_kel INTO var_geo; FOUND := cek_lyr_kel%FOUND; CLOSE cek_lyr_kel;
-- Cek relasi spasial simbol dengan kelurahan
var_relation := sdo_geom.relate (:NEW.lyr_simbol, 'determine', var_geo, 0.005); IF NOT FOUND THEN errno := -20002; errmsg := 'Wilayah kelurahan '|| var_kel || ' tidak ada. Tidak bisa insert atau update objek simbol'; RAISE integrity_error; ELSE IF var_relation NOT IN ('COVEREDBY', 'INSIDE') THEN errno := -20003; errmsg := 'Simbol '|| var_id || ' tidak berada pada wilayah kelurahan yang benar'; RAISE integrity_error; END IF; END IF; END IF;
-- Errors handling
EXCEPTION WHEN integrity_error THEN raise_application_error (errno, errmsg); END; /
LAMPIRAN G Skrip Function /* Function CEK_GEOMETRI digunakan untuk pengecekan Geometri Objek data spasial */ CREATE OR REPLACE FUNCTION SIGPBB.cek_geometri ( p_geom SDO_GEOMETRY, p_geom_type NUMBER) RETURN NUMBER AS -- Return 1=valid, 0=not valid v_gtype NUMBER (1); v_gformat VARCHAR2 (20); v_gvalid NUMBER (1); v_return NUMBER (1); BEGIN -- cek tipe geometri v_gtype := p_geom.get_gtype (); -- cek format geometri v_gformat := SUBSTR (p_geom.get_wkt (), 1, (INSTR (p_geom.get_wkt (), '(') - 2)); -- cek validitas geometri v_gvalid := p_geom.st_isvalid (); IF p_geom_type = 1 THEN IF v_gtype = 1 AND v_gformat = 'POINT' AND v_gvalid = 1 THEN v_return := 1; ELSE v_return := 0; END IF; ELSIF p_geom_type = 2 THEN IF v_gtype = 2 AND v_gformat = 'LINE' AND v_gvalid = 1 THEN v_return := 1; ELSE v_return := 0; END IF; ELSIF p_geom_type = 3 THEN IF v_gtype = 3 AND v_gformat = 'POLYGON' AND v_gvalid = 1 THEN v_return := 1; ELSE v_return := 0; END IF; ELSE v_return := 0; END IF; RETURN (v_return); END; /
/* Function CEK_SIS_KOOR digunakan untuk pengecekan sistem koordinat data spasial */ CREATE OR REPLACE FUNCTION SIGPBB.cek_sis_koor ( p_prop CHAR, p_kota CHAR, p_geom SDO_GEOMETRY) RETURN NUMBER AS -- Return 1=sesuai, 0=tidak sesuai integrity_error EXCEPTION; errno INTEGER; errmsg CHAR (200);
105
106
dummy INTEGER; FOUND BOOLEAN; v_sis_koor zona_proyeksi.kd_zona%TYPE; v_srid INTEGER; v_return NUMBER (1); CURSOR c_ref_sis_koor IS SELECT kd_zona FROM zona_proyeksi WHERE kd_prop = p_prop AND kd_kota = p_kota; BEGIN -- Ambil nilai SRID dari data spasial (p_geom) v_srid := p_geom.sdo_srid; -- Cek kode sistem koordinat dari tabel referensi (zona pyoyeksi) OPEN c_ref_sis_koor; FETCH c_ref_sis_koor INTO v_sis_koor; FOUND := c_ref_sis_koor%FOUND; IF NOT FOUND THEN errno := -20002; errmsg := 'Referensi sistem koordinat tidak ada'; RAISE integrity_error; ELSE IF v_sis_koor = v_srid THEN v_return := 1; ELSE v_return := 0; END IF; END IF; CLOSE c_ref_sis_koor; RETURN (v_return); END; /
/* Function CEK_REL_ANTAR_BGN digunakan untuk pengecekan hubungan spasial antar data bangunan */ CREATE OR REPLACE FUNCTION SIGPBB.cek_rel_antar_bgn(p_prop IN VARCHAR2, p_kota IN VARCHAR2, p_kec IN VARCHAR2, p_kel IN VARCHAR2, p_blok IN VARCHAR2, p_urut IN VARCHAR2, p_jns IN VARCHAR2, p_bgn in varchar2, p_geom IN sdo_geometry) RETURN NUMBER AS pragma AUTONOMOUS_TRANSACTION; errno INTEGER; var_relation VARCHAR2(255); CURSOR c_rel_bgn IS SELECT sdo_geom.relate(p_geom, 'determine', lyr_bgn, 0.005) relationship FROM bangunan WHERE kd_prop = p_prop AND kd_kota = p_kota AND kd_kec = p_kec AND kd_kel = p_kel AND kd_blok = p_blok AND no_urut = p_urut AND kd_jns_op= p_jns and no_bgn <> p_bgn AND sdo_geom.relate(p_geom, 'determine', lyr_bgn, 0.005) NOT IN('DISJOINT', 'TOUCH'); BEGIN errno := 0; OPEN c_rel_bgn; LOOP FETCH c_rel_bgn INTO var_relation; EXIT WHEN c_rel_bgn % NOTFOUND; errno := 1; END LOOP; CLOSE c_rel_bgn; RETURN errno; END cek_rel_antar_bgn; /
107 /* Function CEK_REL_ANTAR_BIDANG digunakan untuk pengecekan hubungan spasial antar data bidang */ CREATE OR REPLACE FUNCTION SIGPBB.cek_rel_antar_bidang(p_prop IN VARCHAR2, p_kota IN VARCHAR2, p_kec IN VARCHAR2, p_kel IN VARCHAR2, p_blok IN VARCHAR2, p_urut IN VARCHAR2, p_jns IN VARCHAR2, p_geom IN sdo_geometry) RETURN NUMBER AS pragma AUTONOMOUS_TRANSACTION; errno INTEGER; var_relation VARCHAR2(255); CURSOR c_rel_bidang IS SELECT sdo_geom.relate(p_geom, 'determine', lyr_bidang, 0.005) relationship FROM bidang WHERE kd_prop = p_prop AND kd_kota = p_kota AND kd_kec = p_kec AND kd_kel = p_kel AND kd_blok = p_blok AND no_urut <> p_urut AND sdo_geom.relate(p_geom, 'determine', lyr_bidang, 0.005) NOT IN ('DISJOINT', 'TOUCH'); BEGIN errno := 0; OPEN c_rel_bidang; LOOP FETCH c_rel_bidang INTO var_relation; EXIT WHEN c_rel_bidang % NOTFOUND; errno := 1; END LOOP; CLOSE c_rel_bidang; RETURN errno; END cek_rel_antar_bidang; / /* Function CEK_REL_ANTAR_BLOK digunakan untuk pengecekan hubungan spasial antar data blok */ CREATE OR REPLACE FUNCTION SIGPBB.cek_rel_antar_blok ( p_prop IN VARCHAR2, p_kota IN VARCHAR2, p_kec IN VARCHAR2, p_kel IN VARCHAR2, p_blok IN VARCHAR2, p_geom IN SDO_GEOMETRY) RETURN NUMBER AS PRAGMA AUTONOMOUS_TRANSACTION; errno INTEGER; var_relation VARCHAR2 (255); CURSOR c_rel_blok IS SELECT sdo_geom.relate (p_geom, 'determine', lyr_blok, 0.005) relationship FROM blok WHERE kd_prop = p_prop AND kd_kota = p_kota AND kd_kec = p_kec AND kd_kel = p_kel AND kd_blok <> p_blok AND sdo_geom.relate (p_geom, 'determine', lyr_blok, 0.005) NOT IN ('DISJOINT', 'TOUCH'); BEGIN errno := 0; OPEN c_rel_blok; LOOP FETCH c_rel_blok INTO var_relation; EXIT WHEN c_rel_blok%NOTFOUND; errno := 1; END LOOP; CLOSE c_rel_blok; RETURN errno; END cek_rel_antar_blok; /
108
/* Function CEK_REL_ANTAR_KEC digunakan untuk pengecekan hubungan spasial antar data kecamatan */ CREATE OR REPLACE FUNCTION SIGPBB.cek_rel_antar_kec ( p_prop IN VARCHAR2, p_kota IN VARCHAR2, p_kec IN VARCHAR2, p_kel IN VARCHAR2, p_geom IN SDO_GEOMETRY) RETURN NUMBER AS PRAGMA AUTONOMOUS_TRANSACTION; errno INTEGER; var_relation VARCHAR2 (255); CURSOR c_rel_kec IS SELECT sdo_geom.relate (p_geom, 'determine', lyr_kec, 0.005) relationship FROM kecamatan WHERE kd_prop = p_propAND kd_kota = p_kota AND kd_kec <> p_kec AND sdo_geom.relate (p_geom, 'determine', lyr_kec, 0.005) NOT IN ('DISJOINT', 'TOUCH'); BEGIN errno := 0; OPEN c_rel_kec; LOOP FETCH c_rel_kec INTO var_relation; EXIT WHEN c_rel_kec%NOTFOUND; errno := 1; END LOOP; CLOSE c_rel_kec; RETURN errno; END cek_rel_antar_kec; / /* Function CEK_REL_ANTAR_KEL digunakan untuk pengecekan hubungan spasial antar data kelurahan */ CREATE OR REPLACE FUNCTION SIGPBB.cek_rel_antar_kel ( p_prop IN VARCHAR2, p_kota IN VARCHAR2, p_kec IN VARCHAR2, p_kel IN VARCHAR2, p_geom IN SDO_GEOMETRY) RETURN NUMBER AS PRAGMA AUTONOMOUS_TRANSACTION; errno INTEGER; var_relation VARCHAR2 (255); CURSOR c_rel_kel IS SELECT sdo_geom.relate (p_geom, 'determine', lyr_kel, 0.005) relationship FROM kelurahan WHERE kd_prop = p_prop AND kd_kota = p_kota AND kd_kec = p_kec AND kd_kel <> p_kel AND sdo_geom.relate (p_geom, 'determine', lyr_kel, 0.005) NOT IN ('DISJOINT', 'TOUCH'); BEGIN errno := 0; OPEN c_rel_kel; LOOP FETCH c_rel_kel INTO var_relation; EXIT WHEN c_rel_kel%NOTFOUND; errno := 1; END LOOP; CLOSE c_rel_kel; RETURN errno; END cek_rel_antar_kel; /
LAMPIRAN H Skrip Program Pemindahan Data
ke Skema SIGPBB CREATE OR REPLACE PROCEDURE pindah_data AS v_count NUMBER (4) := 0; CURSOR c_prop IS SELECT kd_propinsi, geoloc FROM tmpmap.propinsi; CURSOR c_kota IS SELECT kd_propinsi, kd_dati2, geoloc FROM tmpmap.dati2; CURSOR c_kec IS SELECT kd_propinsi, kd_dati2, kd_kecamatan, geoloc FROM tmpmap.kecamatan; CURSOR c_kel IS SELECT kd_propinsi, kd_dati2, kd_kecamatan, kd_kelurahan, geoloc FROM tmpmap.kelurahan; CURSOR c_blok IS SELECT kd_propinsi, kd_dati2, kd_kecamatan, kd_kelurahan, kd_blok, geoloc FROM tmpmap.blok; CURSOR c_bidang IS SELECT kd_propinsi, kd_dati2, kd_kecamatan, kd_kelurahan, kd_blok, no_urut, kd_jns_op, geoloc FROM tmpmap.bidang; CURSOR c_bang IS SELECT kd_propinsi, kd_dati2, kd_kecamatan, kd_kelurahan, kd_blok, no_urut, kd_jns_op, id_bangunan, geoloc FROM tmpmap.bangunan; CURSOR c_jalan IS SELECT kd_propinsi, kd_dati2, kd_kecamatan, kd_kelurahan, id_jalan, nm_jalan, geoloc FROM tmpmap.jalan; CURSOR c_sungai IS SELECT kd_propinsi, kd_dati2, kd_kecamatan, kd_kelurahan, id_sungai, nm_sungai, geoloc FROM tmpmap.sungai; CURSOR c_simbol IS SELECT kd_propinsi, kd_dati2, kd_kecamatan, kd_kelurahan, id_simbol, nm_simbol, geoloc FROM tmpmap.simbol; BEGIN FOR var_prop IN c_prop LOOP IF var_prop.geoloc IS NOT NULL THEN INSERT INTO sigpbb.propinsi (kd_prop, lyr_prop) VALUES (var_prop.kd_propinsi, var_prop.geoloc); COMMIT; END IF; END LOOP; FOR var_kota IN c_kota LOOP IF var_kota.geoloc IS NOT NULL
109
THEN
110
INSERT INTO sigpbb.kota (kd_prop, kd_kota, lyr_kota) VALUES (var_kota.kd_propinsi, var_kota.kd_dati2,var_kota.geoloc); COMMIT; END IF; END LOOP; FOR var_kec IN c_kec LOOP IF var_kec.geoloc IS NOT NULL THEN INSERT INTO sigpbb.kecamatan (kd_prop, kd_kota, kd_kec, lyr_kec ) VALUES (var_kec.kd_propinsi, var_kec.kd_dati2, var_kec.kd_kecamatan, var_kec.geoloc ); v_count := v_count + 1; IF v_count = 200 THEN COMMIT; v_count := 0; END IF; END IF; END LOOP; COMMIT; FOR var_kel IN c_kel LOOP IF var_kel.geoloc IS NOT NULL THEN INSERT INTO sigpbb.kelurahan (kd_prop, kd_kota, kd_kec, kd_kel,lyr_kel) VALUES (var_kel.kd_propinsi, var_kel.kd_dati2, var_kel.kd_kecamatan, var_kel.kd_kelurahan, var_kel.geoloc ); v_count := v_count + 1; IF v_count = 200 THEN COMMIT; v_count := 0; END IF; END IF; END LOOP; COMMIT; FOR var_blok IN c_blok LOOP IF var_blok.geoloc IS NOT NULL THEN INSERT INTO sigpbb.blok (kd_prop, kd_kota, kd_kec, kd_kel, kd_blok, lyr_blok ) VALUES (var_blok.kd_propinsi, var_blok.kd_dati2, var_blok.kd_kecamatan, var_blok.kd_kelurahan, var_blok.kd_blok, var_blok.geoloc); v_count := v_count + 1; IF v_count = 200 THEN COMMIT; v_count := 0; END IF; END IF; END LOOP; COMMIT; FOR var_bidang IN c_bidang
111
LOOP IF var_bidang.geoloc IS NOT NULL THEN INSERT INTO sigpbb.bidang (kd_prop, kd_kota,kd_kec, kd_kel, kd_blok, no_urut, kd_jns_op, lyr_bidang, nip_petugas ) VALUES (var_bidang.kd_propinsi, var_bidang.kd_dati2, var_bidang.kd_kecamatan, var_bidang.kd_kelurahan, var_bidang.kd_blok, var_bidang.no_urut, var_bidang.kd_jns_op, var_bidang.geoloc, '060096186' ); v_count := v_count + 1; IF v_count = 200 THEN COMMIT; v_count := 0; END IF; END IF; END LOOP; COMMIT; FOR var_bang IN c_bang LOOP IF var_bang.geoloc IS NOT NULL THEN INSERT INTO sigpbb.bangunan (kd_prop, kd_kota, kd_kec, kd_kel, kd_blok, no_urut, kd_jns_op, no_bng, lyr_bng, nip_petugas ) VALUES (var_bang.kd_propinsi, var_bang.kd_dati2, var_bang.kd_kecamatan, var_bang.kd_kelurahan, var_bang.kd_blok, var_bang.no_urut, var_bang.kd_jns_op, var_bang.id_bangunan, var_bang.geoloc, '060096186' ); v_count := v_count + 1; IF v_count = 200 THEN COMMIT; v_count := 0; END IF; END IF; END LOOP; COMMIT; FOR var_jln IN c_jalan LOOP IF var_jln.geoloc IS NOT NULL THEN INSERT INTO sigpbb.jalan (kd_prop, kd_kota, kd_kec, kd_kel, id_jln, nm_jln, lyr_jln ) VALUES (var_jln.kd_propinsi, var_jln.kd_dati2, var_jln.kd_kecamatan, var_jln.kd_kelurahan, var_jln.id_jalan, var_jln.nm_jalan, var_jln.geoloc ); v_count := v_count + 1; IF v_count = 200 THEN COMMIT; v_count := 0; END IF; END IF; END LOOP; COMMIT; FOR var_sg IN c_sungai LOOP
112
IF var_sg.geoloc IS NOT NULL THEN INSERT INTO sigpbb.sungai (kd_prop, kd_kota, kd_kec, kd_kel, id_sungai, nm_sungai, lyr_sungai ) VALUES (var_sg.kd_propinsi, var_sg.kd_dati2, var_sg.kd_kecamatan, var_sg.kd_kelurahan, var_sg.id_sungai, var_sg.nm_sungai, var_sg.geoloc ); v_count := v_count + 1; IF v_count = 200 THEN COMMIT; v_count := 0; END IF; END IF; END LOOP; COMMIT; FOR var_sbl IN c_simbol LOOP IF var_sbl.geoloc IS NOT NULL THEN INSERT INTO sigpbb.simbol (kd_prop, kd_kota, kd_kec, kd_kel,id_simbol, keterangan, lyr_simbol ) VALUES (var_sbl.kd_propinsi, var_sbl.kd_dati2, var_sbl.kd_kecamatan, var_sbl.kd_kelurahan, var_sbl.id_simbol, var_sbl.nm_simbol, var_sbl.geoloc ); v_count := v_count + 1; IF v_count = 200 THEN COMMIT; v_count := 0; END IF; END IF; END LOOP; COMMIT; END; /
LAMPIRAN I Contoh Tampilan Data dan Pesan Error Saat
Pengujian Basis Data Spasial 1. Kesalahan ID Data Spasial
(a). Insert tabel blok dimana primary key-nya tidak lengkap (KD_BLOK kosong)
(a). Update kode blok dimana foreign key-nya tidak ada 2.Data Spasial yang IDnya ada tetapi Objeknya tidak ada
(a). Insert tabel kelurahan dimana objek data spasialnya kosong
(b). Tampilan wilayah kelurahan yang objek data spasialnnya tidak ada
113
114
(c). Tampilan error saat menghapus objek wilayah kelurahan 3. Kesalahan karena kondisi geometri dan topologi undershoot
sliver
overshoot
unsmooth
missing segment
spike
(a). Tampilan objek data spasial dengan berbagai kondisi geometri dan topologi
(b). Tampilan error saat melakukan perubahan objek bidang dengan kesalahan bentuk geometri objek
115 4. Kesalahan penempatan objek data spasial (objek jalan pada layer bidang)
5. Kesalahan hubungan spasial objek data spasial Antar bidang overlap
Bidang memotong jalan
Bangunan melebihi bidangnya
Jalan memotong bidang
(a). Tampilan beberapa kesalahan hubungan spasial pada saat pengujian
(b). Pesan error saat insert objek bidang yang overlap dengan bidang lainnya
116
(c). Pesan error saat update objek bangunan yang keluar dari batas bidangnya
(d). Pesan error saat insert objek bidang yang memotong objek jalan 6. Kesalahan pemilihan sistem proyeksi dan zona
(a). Contoh tampilan kesalahan pemilihan sistem proyeksi dan zona
(b). Pesan error saat insert objek wilayah kelurahan dengan memilih sistem proyeksi yang salah (Non-Earth)