BAB 3
PERANCANGAN SISTEM
Pada bab ini akan dibahas mengenai perancangan dan pembuatan aplikasi visualisasi 3D. Pada tujuan utamanya, sistem yang akan dibuat mengacu kepada pembuatan sebuah kerangka yang dapat digunakan, dikembangkan, dan dimodifikasi dengan mudah diwaktu yang akan datang, oleh karena itu dibutuhkan perancangan sistem yang benar – benar baik dan cermat agar tujuan utama tersebut dapat tercapai.
Sistem yang direncanakan adalah sistem yang mempunyai data sumber berupa file gambar grayscale yang digunakan sebagai peta ketinggian dan file shp serta file dbf yang digunakan untuk menyimpan data-data layer seperti area, obyek, label, dan lain-lain. Desain ini berbeda dengan desain yang diajukan pada proposal proyek akhir, dimana data ketinggian didapatkan melalui pendefinisian secara manual pada sebuah file shp.
Berikut dibawah ini adalah gambar desain sistem yang telah dibuat :
Berikut adalah penjelasan gambar 3.1: 3.1 Pembacaan Citra Grayscale
Dalam proyek akhir ini digunakan citra grayscale sebagai data sumber untuk peta ketinggian, berbeda dengan rencana yang dicantumkan pada proposal proyek akhir sebelumnya, dimana ketinggian wilayah didefinisikan pada sebuah file shp. Dalam pembacaan citra ini, yang dilakukan hanyalah mendapatkan salah satu nilai dari komponen R, G, atau B dalam sebuah pixel, untuk kemudian disimpan dan digunakan sebagaidata ketinggian pada sebuah elemen dalam matriks peta 3D. Proses pembacaan data ketinggian dapat dilihat pada gambar 3.2.
Gambar 3.2 Pembacaan Citra Grayscale Pada gambar
Gambar 3.3 Matriks Peta 3.2 Pembacaan File SHP
Untuk pembacaan file shp, perlu untuk mengetahui secara pasti struktur dari sebuah file shp, setelah itu melakukan pembacaan file byte
demi byte untuk mendapatkan semua data yang ada didalamnya. Data yang tersimpan dalam sebuah file shp adalah data berupa koordinat dari titik-titik penyusun sebuah bentuk geometri, sebagai contoh adalah bentuk polygon dan polyline. Berikut ini adalah struktur sebuah file shp untuk memudahkan ilustrasi dari sebuah struktur file shp, dapat dilihat pada gambar 3.3.
Gambar 3.4 Struktur File SHP
Berikut ini adalah potongan program untuk membaca header dan record sebuah file shp :
bb.order(ByteOrder.BIG_ENDIAN); FileCode = bb.getInt(0); FileLength = bb.getInt(24); bb.order(ByteOrder.LITTLE_ENDIAN); Version = bb.getInt(28); ShapeType = bb.getInt(32); BoundingXMin = bb.getDouble(36); BoundingYMin = bb.getDouble(44); BoundingXMax = bb.getDouble(52); BoundingYMax = bb.getDouble(60); BoundingZMin = bb.getDouble(68); BoundingZMax = bb.getDouble(76); BoundingMMin = bb.getDouble(84); BoundingMMax = bb.getDouble(92);
Gambar 3.5 Listing Program Pembaca Header SHP
Pada potongan program diatas, yang dilakukan adalah mengambil informasi header file shp. Pada header tersebut ada beberapa informasi antara lain informasi tentang bersi shp yang digunakan, koordinat bounding box yang dipakai, serta beberapa informasi lainnya.
switch(shapeTypeTemp) { case DataType.POINT: Double x = bb.getDouble(); Double y = bb.getDouble(); points.add(new Point(x, y, this.dbf.records.get(dataCount))); break; File Header
Record Header Record Data
.... ....
case DataType.POLY_LINE: getBoundingBoxData(); getNumPartsData(); getNumPointsData(); getPartsData(); getPointsData();
polyLines.add(new PolyLine(Box, numParts, numPoints, Parts, Points));
break;
Gambar 3.6 Listing Program Pembaca Informasi SHP
Berdasarkan gambar 3.3, pada potongan program diatas dilakukan pembacaan record file shp, dimana dilakukan pengecekan terhadap tipe bentuk yang sedang dibaca, hasilnya akan menentukan obyek apakah yang akan ditambahkan kedalam program, kemungkinannya antara lain adalah polygon, polyline, dan point.
3.3 Pembacaan File DBF
Untuk file dbf, informasi yang perlu diambil adalah attribut atau informasi tambahan dari masing-masing data yang terdapat pada file shp, untuk kemudian dipasangkan dengan data yang bersesuaian pada file shp. Untuk mempermudah ilustrasi, dapat dilihat pada gambar 3.4 dibawah ini :
Gambar 3.7 Struktur File DBF
Berikut ini adalah potongan program untuk membaca definisi kolom pada tabel file dbf :
byte[] nameBuffer = new byte[11]; sourceBuffer.get(nameBuffer);
this.fieldName = new String(nameBuffer); int limit = this.fieldName.indexOf(0x00); if(limit>1)
this.fieldName = this.fieldName.substring(0, Header
Column 1 Definition Column n Definition
Record 1 Column 1 Data Record 1 Column n Data Record m Column 1 Data Record m Column n Data
limit);
sourceBuffer.order(ByteOrder.LITTLE_ENDIAN); this.fieldType = sourceBuffer.getChar(); sourceBuffer.order(ByteOrder.BIG_ENDIAN); /* skip byte ke-12 s/d 15 (3 byte) */
sourceBuffer.position(sourceBuffer.position()+3); this.fieldLength = sourceBuffer.get() & 0xFF; this.decimalCount = sourceBuffer.get(); /* skip byte ke-18 dan 19 (2 byte) */
sourceBuffer.position(sourceBuffer.position()+2); this.workAreaID = sourceBuffer.get();
/* skip byte ke-21 dan 22 (2 byte) */
sourceBuffer.position(sourceBuffer.position()+2); this.flagForSetField = sourceBuffer.get();
Gambar 3.8 Listing Program Pembaca Definisi Kolom DBF (sambungan)
Pada potongan program diatas, yang dilakukan adalah mengambil informasi yang terkandung dalam sebuah file dbf, informasinya antara lain adalah mengenai nama field, tipe data field, dan panjang field.
Berikut ini adalah potongan program untuk membaca record dari file dbf :
this.fields = fields;
this.deletedFlag = sourceBuffer.get(); this.mainData = new String[fields.size()]; byte buffer[] = new byte[RecordLength-1]; sourceBuffer.get(buffer);
this.mainString = new String(buffer); this.mainData = new String[fields.size()]; int offset = 0;
for (int i = 0; i < this.mainData.length; i++){ this.mainData[i] = this.mainString.substring(offset,
offset + fields.get(i).fieldLength); offset += fields.get(i).fieldLength;
if(fields.get(i).fieldType==DBFField.TYPE_NUMERIC{ this.mainData[i] = this.mainData[i].trim(); } if(fields.get(i).fieldType==DBFField.TYPE_CHARACTER)
{this.mainData[i] =
StringUtils.trimRight(this.mainData[i]); } } Gambar 3.9 Listing Program Pembaca Data DBF
Mekanisme atau urutan penyimpanan record pada file dbf sama persis dengan urutan yang digunakan dalam penyimpanan shape pada file shp, oleh karena itu untuk memasangkan atrribut pada masing shape, perlu untuk mengetahui index dari masing-masing shape pada file shp.
Gambar 3.10 Relasi Antara Data SHP dan DBF 3.4 Layer Area
Layer ini adalah layer yang digunakan untuk menyimpan informasi mengenai area suatu wilayah dan atributnya, misalkan area kabupaten atau kecamatan. Tipe data dari file shp tyang digunakan pada layer ini adalah polygon. Layer ini mempunyai beberapa fitur antara lain animasi, kemampuan menampilkan attribut dari masing-masing area yang didefinisikan, serta merepresentasikan sebuah keadaan yang berkaitan dengan attribute bertipe numerik pada masing-masing area. Layer ini dirancang untuk bisa menentukan kolom attribut manakah yang ditampilkan, setiap pilihan berubah, maka layer ini akan memberikan animasi berupa naik turunnya masing-masing area yang mempunyai nilai attribut yang berbeda.
Gambar 3.11 Polygon
Gambar 3.12 Attribut File SHP 3.5 Layer Obyek
Layer obyek adalah layer yang dibuat untuk menampilkan obyek, seperti rumah, pohon, gedung, dan sebagainya. Layer ini menggunakan tipe data point yang didefinisikan pada file shp, untuk attribut yang digunakan, tidak ada perbedaan dengan attribut yang digunakan pada layer area,yaitu
attribut bertipe numerik atau string.
Gambar 3.13 Definisi Point Untuk Layer Obyek. 3.6 Layer Disaster
Layer disaster ini berbeda dengan 2 layer yang lain, karena data yang digunakan bukan hanya merupakan data yang didefinisikan pada sebuah file shp, tetapi merupakan data yang beraneka ragam, antara lain data hotspot pada kebakaran hutan, dan data wilayah air pada bencana banjir.
3.7 Mapping Koordinat
Setelah semua data berhasil diambil, yang kemudian dilakukan dalam proyek akhir ini adalah mengolah data-data tersebut agar bisa digunakan pada base-map yang berupa matriks ketinggian yang diperoleh dari sebuah gambar graysale. Pengolahan yang dilakukan cukup sederhana, hanya mengkonversi atau menyesuaikan nilainya (mapping) dengan ukuran matriks yang digunakan.
Gambar 3.14 Matriks Hasil Mapping
Nilai yang digunakan dalam pemetaan nilai kedalam matrix adalah nilai dari varibel bounding box yang didapat dari header file shp, dari nilai
bounding box tersebut, dapat diketahui nilai koordinat minimum pada
sumbu x dan y, serta nilai koordinat maksimum pada sumbu x dan y. Jadi, yang perlu dilakukan hanya melakukan mapping nilai-nilai koordinat tersebut kedalam matriks dengan resolusi yang telah ditentukan. Untuk menentukan ukuran matrix dalam proyek akhir ini, yang digunakan adalah data bounding box yang didapat dari header file shp, caranya adalah dengan mengalikan dengan sebuah bilangan agar didapatkan ukuran matriks yang sesuai untuk kemudian divisualisasikan. Berikut ini adalah contoh data bounding box dari file kalteng.shp :
Xmin : 110.72972106933594 Ymin : -3.5460453033443757 Xmax : 115.8460006706667 Ymax : 0.7943595275676686
Dari data tersebut, maka bisa diketahui ukuran peta yang digunakan, dengan mencari selisih antara nilai maksimum dengan nilai minimum : lebar = Xmax – Xmin = 5.116279601
tinggi = Ymax – Ymin = 4.340404831
Dengan mempertimbangkan kemampuan komputasi dari hardware yang dipakai pada proyek akhir ini, maka dipilih ukuran matrix dibawah 10.000 x 10.000, oleh karena itu pada proyek akhir ini dipilih bilangan 1000 untuk dikalikan dengan ukuran peta sebenarnya (satuan dalam latittude dan
longittude), sehingga peta yang dihasilkan mempunyai resolusi 5116x4340.
Gambar 3.15 Matriks Ukuran 5116x4340 3.8 Penggambaran Pada OpenGL
Dalam proyek akhir ini dipilih OpenGL sebagai library untuk pemrosesan visualisasi karena beberapa hal. Salah satu yang utama adalah ketersediaan binding oleh bahasa pemrograman JAVA (JOGL) yang digunakan dalam proyek akhir ini. Langkah-langkah yang dilakukan dalam melakukan penggambaran antara lain sebagai berikut :
3.8.1 Penggambaran Base Map
Dalam melakukan penggambaran base map, yang bisa dilakukan adalah mengatur resolusi dari map yang ditampilkan, caranya adalah dengan menentukan setiap berapa elemen matrix dilakukan penggambaran.
Gambar 3.16 Cara Penggambaran Base Map
3.8.2 Penggambaran Layer Data
Layer data didesain agar fleksibel dalam kemampuan menampilkan data GIS yang disimpan didalam sebuah file shp, oleh karena itu desainnya dibuat seperti berikut :
a. Area Layer
Gambar 3.18 Area Layer Data Base Layer
Area Layer
Disaster Layer Object Layer
Tipe data yang digunakan dalam definisi data area adalah tipe bentuk polygon, data yang dipakai dalam proyek akhir ini adalah data kecamatan dan kabupaten propinsi kalimantan tengah, yang meliputi 123 kecamatan dan 7 kabupaten. Visualisasi 3D pada layer ini menggunakan salah satu fitur yang ada pada opengl, yaitu tesselation, yang berfungsi untuk melakukan
triangularization pada bentuk yang sulit seperti yang digunakan pada
bentuk diatas. b. Object Layer
Gambar 3.19 Polygon Dan Point Didalamnya
Tipe data yang digunakan dalam pendefinisian obyek adalah tipe data Point, yang berisi koordinat latittude dan longittude dari sebuah Point. Layer ini digunakan untuk menyimpan lokasi sebuah obyek, misalkan rumah, pos pemantau bencana alam, dan lain-lain. Dalam proyek akhir ini data yang digunakan adalah data simulasi, yang digunakan untuk merepresentasikan lokasi dari titik-titik obyek
Pada proyek akhir ini, layer disaster ini digunakan untuk menyimpan definisi tentang berbagai macam bencana alam yang terjadi, antara lain banjir dan kebakaran hutan. Pendefinisiannya bukan melalui file shp, tetapi dihasilkan pada saat program berjalan, inputnya bisa berbeda tergantung dari macam bencana alamnya, misalkan untuk kasus kebakaran hutan, data definisinya didapat dari hasil pendeteksian hotspot.
Dalam penggambaran layer data (Area dan Obyek), langkah-langkahnya bisa dilihat pada gambar 3.15 :
Gambar 3.20 Skema Penggambaran Data File SHP
Selain hal-hal diatas, pada proyek akhir ini juga dirancang sebuah
shp viewer sederhana yang dapat menampilkan bentuk geometri yang telah
didapatkan oleh library shp yang telah dibuat. Pada shp viewer ini, disediakan fitur zoom-in, zoom-out, serta informasi mengenai koordinat latittude dan longittude.
File SHP Ekstraksi Data (Point, Polygon) Matriks Mapping