SISTEM NAVIGASI BERASASKAN ALGORITMA DIJKSTRA DI DALAM PERSEKITARAN TIGA DIMENSI

advertisement
SISTEM NAVIGASI BERASASKAN ALGORITMA DIJKSTRA DI DALAM
PERSEKITARAN TIGA DIMENSI
MUHAMAD UZNIR BIN UJANG
UNIVERSITI TEKNOLOGI MALAYSIA
Bahagian A – PENGESAHAN KERJASAMA*
Adalah disahkan bahawa projek penyelidikan tesis ini telah dilaksanakan melalui
kerjasama antara _______________________ dengan _______________________
Disahkan oleh:
Tandatangan
:
Nama
:
Jawatan
(Cop rasmi)
:
Tarikh :
* Jika penyediaan tesis/projek melibatkan kerjasama.
bahagian b – UNTUK KEGUNAAN PEJABAT SEKOLAH PENGAJIAN SISWAZAH
Tesis ini telah diperiksa dan diakui oleh:
Nama dan Alamat Pemeriksa Luar : PROF. MADYA DR. NANNA SURYANA
HERMAN
Timbalan Dekan (Penyelidikan & Pengajian
Siswazah)
Fakulti Teknologi Maklumat dan Komunikasi
Universiti Teknikal Malaysia Melaka
Karung Berkunci 1200
75450 AYER KEROH MELAKA
Nama dan Alamat Pemeriksa Dalam : PROF. MADYA MOHAMAD NOR SAID
Fakulti Kejuruteraan & Sains Geoinformasi
Universiti Teknologi Malaysia
81310 UTM Skudai
JOHOR DARUL TA’AZIM
Disahkan oleh Ketua Jabatan (Pengajian Siswazah):
Tandatangan
:
Nama
:
Tarikh :
SISTEM NAVIGASI BERASASKAN ALGORITMA DIJKSTRA DI DALAM
PERSEKITARAN TIGA DIMENSI
MUHAMAD UZNIR BIN UJANG
Tesis ini dikemukakan sebgai memenuhi
syarat penganugerahan Ijazah Sarjana Sains (Geoinformatik)
Fakulti Kejuruteraan Dan Sains Geoinformasi
Universiti Teknologi Malaysia
JUN 2008
DEDIKASI
This thesis is dedicated to:
My lovely mum Kasmira, my dad Ujang,
My best ever sis Uraini,
And lastly to you Wafiah.
Thanks for your love and kindness,
This is for you.
With love,
Muhamad Uznir Ujang
PENGHARGAAN
Dengan nama Allah Yang Maha Pemurah dan Maha Penyayang, Selawat dan
salam kepada junjungan besar Nabi Muhammad S.A.W, kaum keluarga baginda dan
para-para sahabat baginda.
Penghargaan ditujukan kepada penyelia kajian, Profesor Madya Dr. Alias
Abdul Rahman atas bimbingan dan tunjuk ajar yang diberikan. Bantuan yang
diberikan sepanjang penyelidikan tesis ini dijalankan adalah amat dihargai. Terima
kasih juga diucapkan kepada kakitangan FKSG yang terlibat secara langsung atau
pun tidak dalam menjayakan penyelidikan ini.
Sumbangan
dan
pertolongan
kalian
amatlah
dihargai
dan
penulis
mengucapkan jutaan terima kasih di atas jasa baik kalian. Semoga Tuhan membalas
jasa baik kalian, insyaAllah.
ABSTRAK
Navigasi merupakan salah satu aspek yang penting bagi sesetengah bidang,
contohnya seperti bidang pengangkutan perindustrian, bantuan kecemasan dan juga
perancangan. Analisis rangkaian yang terdapat di dalam proses navigasi dapat
menjimatkan kos pengangkutan, meminimakan kesan bencana atau kemalangan dan
dapat memberikan keputusan yang tepat mengenai laluan yang terbaik bagi situasisituasi tertentu. Algoritma Dijkstra merupakan antara algoritma yang digunakan di
dalam analisis rangkaian dan telah terbukti keberkesanannya dalam pengiraan laluan
yang terpendek bagi situasi yang melibatkan data dua dimensi (2D). Apabila
melibatkan navigasi di dalam bangunan bertingkat, analisis rangkaian terhadap
jaringan rangkaian tiga dimensi (3D) diperlukan. Sistem Maklumat Geografi (GIS)
semasa masih tidak mampu melakukan analisis rangkaian laluan yang terpendek
terhadap data 3D. Akibat daripada reka bentuk binaan dan bentuk muka bumi yang
menjadi semakin kompleks untuk diuruskan, maka wujudnya permintaan daripada
pengguna GIS terhadap pengurusan data 3D di dalam GIS. Oleh itu, kajian di dalam
tesis ini adalah bertujuan untuk mengkaji kebolehlaksanaan algoritma Dijsktra bagi
pengiraan laluan terpendek di dalam persekitaran 3D. Jaringan rangkaian navigasi
3D bagi model kawasan bangunan kajian dibina dan seterusnya diuji bersama-sama
dengan
algoritma
Dijkstra.
Hasil
daripada
analisis
rangkaian
tersebut
dipersembahkan dengan menggunakan enjin permainan komputer (3D State) di
dalam persekitaran objek spatial 3D dan seterusnya boleh melakukan navigasi di
dalam persekitaran 3D tersebut (Virtual Reality) dengan menggunakan simulasi
pergerakan manusia. Bagi mewujudkan persekitaran 3D yang lebih realistik,
penggunaan tekstur sebenar bagi objek spatial kawasan kajian digunakan untuk
memberikan kesan 3D bagi navigasi maya 3D yang dibina.
ABSTRACT
Navigation is an important aspect in some areas such as industrial
transportation, emergency navigation and also navigation planning. Network analysis
in navigation process can minimize transportation cost, disaster or accident impact
and also it can provide right decision for the best route in certain situations. Dijkstra's
algorithm is one of the algorithms that could be used in network analysis process
especially for 2D shortest route data. Network analysis for three-dimensional (3D)
network is required when it involves navigation inside a multi-level building. Current
Geographical Information System (GIS) is still not capable in performing shortest
route network analysis for 3D data. The complexity of building and surroundings
makes GIS users require a system that can manage the phenomenon in 3D
environment. Therefore, it is the aim of this study to conduct a research about the
Dijsktra’s algorithm implementation for shortest path calculation in 3D environment.
Hereby, the Dijkstra’s algorithm is tested with the developed 3D navigation network
inside the building model. The results from the network analysis will be shown by
using 3D computer game engine (3D State) in the 3D spatial objects environment
and navigation can be made inside the 3D environment (Virtual Reality) by
simulating human movements. Real texture of the surroundings is incorporated into
the navigation system to produce realistic 3D surroundings and to give more 3D
effects for the 3D virtual navigation.
ISI KANDUNGAN
BAB
1
PERKARA
MUKA SURAT
PENGAKUAN
ii
DEDIKASI
iii
PENGHARGAAN
iv
ABSTRAK
v
ABSTRACT
vi
ISI KANDUNGAN
vii
SENARAI RAJAH
xii
SENARAI SINGKATAN
xxi
SENARAI LAMPIRAN
xxii
PENGENALAN
1.1
Latar Belakang
1
1.2
Penyataan Masalah
4
1.3
Tujuan Kajian
6
1.4
Objektif Kajian
7
1.5
Skop Kajian
7
1.6
Kepentingan Kajian
8
1.7
Metodologi Kajian
9
1.8
Struktur Ringkasan Tesis
11
2
KAJIAN LITERATUR
2.1
Pendahuluan Bab
13
2.2
Sistem Maklumat Geografi (GIS) 3 Dimensi
14
2.3
Objek Tiga Dimensi (3D)
16
2.4
Kemampuan Perisian GIS Semasa
18
2.5
Navigasi dan GIS
20
2.6
Algoritma Dijkstra
21
2.7
Pembangunan GIS 3D
22
2.7.1
Enjin Grafik
23
2.7.2
Enjin Grafik 3D State
25
2.8 Kajian Berkaitan
3
27
KONSEP ALGORITMA DIJKSTRA
3.1
Pendahuluan Bab
34
3.2
Aplikasi Algoritma Dijkstra
35
3.3
Algoritma Laluan Optima (Optimum Path
Algorithm)
37
3.3.1
Teknik Penyelidikan Operasi
38
3.3.1.1
Masalah Laluan Terpendek
41
3.3.1.1.1
Acyclic Algorithm
42
3.3.1.1.2
Cyclic (Dijkstra
Algorithm)
3.3.2
Analisa Rangkaian (Network Analysis)
3.4
Perincian Prosidur Algoritma Dijkstra
3.5
Pengimplementasian Algoritma Dijkstra Di
Dalam Persekitaran 3D
45
47
51
54
4
REKA BENTUK SISTEM NAVIGASI
4.1
Pembangunan Analisis Rangkaian (3 Dimensi)
59
4.2
Fasa Permulaan
60
4.3
Fasa Pembangunan
61
4.3.1
Kajian Keperluan
63
4.3.2
Reka Bentuk Dalaman
64
4.3.3
Perkakasan Komputer
69
4.3.4
Model Bangunan 3D
70
4.3.4.1
Pendigitan Pelan Lantai
70
4.3.4.2
Reka Bentuk Model
Bangunan 3D
4.3.4.3
Reka Bentuk Model Objek
3D
4.3.4.4
96
4.3.5
Jaringan Rangkaian 3D
99
4.3.6
Pengaturcaraan
102
4.3.6.1
Converter
103
4.3.6.2
Topology
105
4.3.6.3
Attribute
106
4.3.6.4
Aplikasi Utama
107
4.3.7
5
88
Tekstur Model Bangunan
dan Objek-objek 3D
4.4
79
Pengujian
Rumusan
108
108
ANALISIS DAN KEPUTUSAN KAJIAN
5.1
Pendahuluan Bab
110
5.2
Jaringan Rangkaian 3 Dimensi
112
5.3
Antara Muka Converter
112
5.4
5.5
5.6
6
5.3.1
Menu File
113
5.3.2
Menu Tools
116
5.3.3
Menu Help
118
Antara Muka Topology
119
5.4.1
Menu File
120
5.4.2
Menu Tools
123
5.4.3
Menu Help
124
Antara Muka Attribute
125
5.5.1
Menu File
126
5.5.2
Menu Edit
128
5.5.3
Menu Find
134
5.5.4
Menu Help
135
Paparan dan Penukaran Format bagi Model 3D
Bangunan FKSG
137
5.7
Aplikasi Utama
139
5.8
Analisis Rangkaian 3D
160
5.9
Rumusan
169
KESIMPULAN DAN CADANGAN
6.1
Pendahuluan Bab
170
6.2
Kesimpulan dan Ulasan
170
6.3
Masalah yang Dihadapi
172
6.4
Cadangan
174
6.4.1
Algoritma Kajian
174
6.4.2
Enjin Grafik 3D
175
6.4.3
Integrasi Analisis Rangkaian 3D
dengan Perisian-perisian GIS
175
6.4.4
Paparan Navigasi 3D Pada Alat-alat
Mudah Alih
RUJUKAN DAN BIBLIOGRAFI
LAMPIRAN A - J
176
177
182 - 234
SENARAI RAJAH
NO. RAJAH
TAJUK
MUKA SURAT
2.1
Contoh paparan ArcGlobe
19
2.2
Contoh paparan 3D menggunakan ArcGIS
20
3D Analyst
2.3
Contoh pengaturcaraan enjin grafik
26
menggunakan bahasa Visual Basic
2.4
Model 3 dimensi bandar Hamburg
2.5
Kawasan kajian (Florida Keys) bagi kajian
27
Agent-Based Modeling and Analysis of
Hurricane Evacuation Procedures for the
Florida Keys (Chen et al., 2005)
2.6
Struktur Evacuation Path (M. Meijers et
al.,2005)
2.7
30
Jalan terpendek daripada balai bomba ke
tempat bencana (Kwan et al., 2003)
3.1
29
32
Contoh rangkaian yang mengandungi 5 nod
dan juga 8 arka.
39
3.2
Rangkaian bersambung
40
3.3
Rangkaian bersambung (Merentang)
41
3.4
Contoh rangkaian yang mewakili
kedudukan bandar
43
3.5
Laluan terpendek daripada nod 1 ke nod 7
44
3.6
Contoh rangkaian bagi pengiraan algoritma
Cyclic
45
3.7
Hasil pengiraan algoritma Cyclic
3.8
Contoh rangkaian bagi pengiraan algoritma
47
Dijkstra
48
3.9
Spanning Tree
50
3.10
Contoh rangkaian yang mengandungi 7 nod
dan juga 9 arka
3.11
Hasil akhir pengiraan algoritma Dijkstra
dalam bentuk Spanning Tree
3.12
54
Perbezaan kedudukan nod A (x 1, y1, z1) dan
nod B (x2, y2, z 2)
4.1
51
57
Carta alir menunjukkan hasil bagi setiap dua
fasa yang pertama bagi sesebuah sistem
maklumat. Teks yang ditunjukkan dalam
Italics merujuk kepada pengembalian ke
fasa yang sebelumnya hanya jika perlu
sahaja (Sumber: Steven, 2002).
4.2
Fasa Pembangunan dan aktiviti-aktiviti
yang berkaitan dengannya
4.3
71
Proses mencantumkan imej menggunakan
arahan Align
4.7
66
Imej yang diimbas dimasukkan sebagai
rujukan bagi proses pendigitan.
4.6
65
Lakaran kasar paparan antara muka bagi
navigasi
4.5
62
Carta alir ringkas aplikasi yang direka
bentuk
4.4
60
72
Ketiga-tiga imej pelan lantai yang
dicantumkan menjadi satu pelan bagi satu
aras
4.8
Proses pendigitan pelan lantai (ketebalan
dinding)
4.9
73
74
Hasil pendigitan entiti ruang bilik dan lantai
bagi satu aras
75
4.10
Pembetulan kesalahan bagi keseluruhan
hasil pendigitan dengan menggunakan
arahan Drawing Cleanup
4.11
76
Proses penganjakkan dilakukan bagi data
digital pelan
77
4.12
Proses penskalaan data digital pelan
78
4.13
Proses pembetulan herotan pada pelan lantai
digital
79
4.14
Menu Select File to Import
80
4.15
Import Options (Geometry Tab)
81
4.16
Import Options (Layers Tab)
82
4.17
Import Options (Spline Rendering Tab)
82
4.18
Menu transform
83
4.19
Properties box (Selection)
84
4.20
Penggunaan element bagi reka bentuk
85
model
4.21
Fungsi Extrude bagi membentuk dinding
bangunan
4.22
Dinding bangunan dihasilkan menggunakan
fungsi Extrude
4.23
86
87
Dinding bangunan dan lantai yang telah siap
dibentuk
88
4.24
Pilihan Stairs untuk mereka bentuk tangga
89
4.25
Reka bentuk tangga menggunakan fungsi
reka bentuk U Type Stair yang tersedia di
dalam perisian
4.26
90
Nilai parameter yang boleh diubah bagi
menghasilkan sebuah tangga mengikut jenis
tangga yang dikehendaki pengguna
91
4.27
Tangga yang telah siap direka bentuk
92
4.28
Koridor yang telah siap direka bentuk
92
4.29
Hasil reka bentuk ukiran yang terdapat pada
bumbung bangunan FKSG
93
4.30
Hasil reka bentuk ukiran yang terdapat pada
bumbung bangunan FKSG serta gabungan
beberapa objek geometri yang lain bagi
membentuk model bumbung untuk
digunakan dengan model bangunan yang
sebenar
4.31
94
Hasil keseluruhan reka bentuk ukiran dan
bumbung bangunan FKSG
95
4.32
Pondok wakaf
95
4.33
Bangku kayu di Dataran Harmonis (C06)
96
4.34
Beberapa tekstur sebenar bagi objek spatial
3D yang telah disunting untuk
memperbetulkan herotan, warna, dan
sebagainya bagi kegunaan permodelan
model 3D bangunan kajian
4.35
Contoh model aras bangunan yang dibuka
di dalam CAD
4.36
98
100
Rangkaian 3D bagi aras 1 yang diwarnakan
dengan warna ungu yang ditunjukkan secara
pandangan Planimetri (atas) dan pandangan
Perspektif (bawah)
4.37
Carta alir sub-sub aktiviti dalam aktiviti
pengaturcaraan
4.38
101
102
Contoh bentuk data rangkaian yang
disimpan di dalam komputer (AutoCAD
Drawing)
104
4.39
Contoh rangkaian (asas)
105
4.40
Format Pangkalan Data MW
107
5.1
Carta alir bagi kedudukan kefungsian
program-program yang dibina dan juga
5.2
aplikasi utama
111
Antara muka bagi program Converter
113
5.3
Fungsi Load yang digunakan untuk mencari
dan membuka fail jaringan rangkaian 3D
5.4
114
Fail jaringan rangkaian 3D yang telah
dibuka di dalam program
114
5.5
Fungsi Save As
115
5.6
Menu Tools
116
5.7
Analisis yang boleh dilakukan
116
5.8
View Coordinates
117
5.9
Build MWraw file
118
5.10
Fungsi About memaparkan maklumat
berkaitan dengan tujuan Converter dibina
119
5.11
Antara muka Topology
120
5.12
Fungsi-fungsi yang terdapat pada menu File
121
5.13
Tetingkap pertanyaan bagi automasi
pembinaan topologi
121
5.14
Tetingkap Open MWraw File
122
5.15
Tetingkap Save As fail MW Database
(*.MW)
123
5.16
Menu Tools dan Sub Menu Tools
124
5.17
Tetingkap MW Database file
124
5.18
Tetingkap About bagi program Topology
124
5.19
Antara muka program Attribute
125
5.20
Sub-menu bagi menu File
127
5.21
Fungsi Load
127
5.22
Sub-menu pada menu Edit
128
5.23
Fungsi Start Editing tidak diaktifkan
129
5.24
Tetingkap Insert Attribute – Step 1
digunakan untuk memasukkan maklumat
nama blok
5.25
129
Tetingkap Insert Attribute – Step 2
digunakan untuk memasukkan maklumat
aras
130
5.26
Tetingkap Insert Attribute – Step 3
digunakan untuk memasukkan maklumat
nombor bilik
5.27
130
Tetingkap Insert Attribute – Step 4
digunakan untuk memasukkan maklumat
nama bilik
5.28
Contoh nod yang tiada atau pun tidak
dimasukkan maklumat atribut
5.29
133
Tetingkap ini dipaparkan untuk menyimpan
maklumat atribut yang telah dimasukkan
5.32
132
Tetingkap Save As dipaparkan apabila
fungsi Stop Editing diklik
5.31
131
Contoh nod telah dimasukkan maklumat
atribut
5.30
131
133
Sub-menu Search Phrase di bawah menu
Find
134
5.33
Tetingkap Find
134
5.34
Hasil pencarian menggunakan fungsi Find
135
5.35
Fungsi sub menu About pada menu Help
136
5.36
Butang arahan untuk navigasi data
136
5.37
Paparan imej model 3D FKSG mengikut
blok-blok
5.38
138
Paparan splash screen pada permulaan
aplikasi
139
5.39
Antara muka utama aplikasi
140
5.40
Fungsi yang diklik akan bertukar warna
tulisannya
141
5.41
Paparan bagi fungsi FKSG Base Plan
142
5.42
Cursor diarahkan ke tulisan C02 dan imej
model 3D blok C02 dipaparkan
5.43
143
Paparan imej snapshot model 3D bagi
fungsi 3D Screenshot
144
5.44
Butang navigasi bagi melihat imej-imej
snapshot
144
5.45
Butang arahan Flythrough
145
5.46
Paparan fungsi arahan Flythrough
145
5.47
Paparan antara muka 3D Navigation
146
5.48
Konfigurasi pangkalan data bagi kegunaan
aplikasi
5.49
Arahan Open digunakan untuk mencari fail
rangkaian atau model 3D
5.50
147
148
Tetingkap Open File dipaparkan untuk
mencari fail rangkaian 3D dan model spatial
3D
5.51
148
Arahan Save Setting diaktifkan selepas data
yang baru disetkan di dalam paparan
Database ini
5.52
149
Tetingkap informasi untuk menyatakan set
data yang baru telah dimasukkan ke dalam
aplikasi utama
149
5.53
Fungsi Shortest Path
150
5.54
Sebahagian nama-nama yang terdapat di
dalam drop down list
5.55
Fungsi Search untuk mencari maklumat
atribut secara filtering
5.56
5.59
152
Nombor bilik yang di’filter’kan berdasarkan
nama blok dan aras
5.58
151
Aras yang di’filter’kan berdasarkan nama
blok
5.57
151
153
Nama bilik yang di’filter’kan berdasarkan
nama blok, aras dan nombor bilik
153
Fungsi Acquire pada paparan Search
154
5.60
Fungsi Acquire yang memindahkan
maklumat pada paparan Search ke medan
nama staff/bilik paparan Shortest Path
5.61
Amaran yang dipaparkan kerana syarat
utama bagi fungsi Calculate tidak dipenuhi
5.62
154
155
Paparan statistik pengiraan algoritma
Dijkstra
156
5.63
Arahan Navigate dan Cancel
158
5.64
Paparan Navigasi 3D
159
5.65
Paparan bagi fungsi About
160
5.66
Konfigurasi set data yang digunakan adalah
penting sebelum melakukan analisis
rangkaian 3D
5.67
161
Lokasi semasa disetkan Satellite Navigation
Research Group (SNAG) dan lokasi
destinasi disetkan Hydro I and Hydro II
Lecture Room sebelum melakukan
pengiraan analisis rangkaian 3D
5.68
162
Statistik pengiraan algoritma Dijkstra hasil
daripada pengiraan laluan yang terpendek
daripada bilik Satellite Navigation Research
Group (SNAG) ke lokasi destinasi iaitu bilik
Hydro I and Hydro II Lecture Room
5.69
Paparan graf hasil pengiraan algoritma
Dijkstra
5.70
163
164
Lokasi awal disetkan di lokasi semasa yang
ditetapkan pengguna pada permulaan
analisis iaitu di bilik Satellite Navigation
Research Group (SNAG)
5.71
165
Lokasi destinasi (Hydro I and Hydro II
Lecture Room) akan ditandakan dengan OK
bagi menunjukkan pengguna telah tiba ke
lokasi destinasi
166
5.72
Anak panah yang terdapat pada papan
kekunci
5.73
Tetingkap informasi mengenai maklumat
asas navigasi
5.74
166
167
Peta 2D menunjukkan pandangan plan
(Plan View)
168
SENARAI SINGKATAN PERKATAAN
GIS
Sistem Maklumat Geografi
2D
Dua Dimensi
3D
Tiga Dimensi
4D
Empat Dimensi
GIS 3D
Sistem Maklumat Geografi Tiga Dimensi
SDK
Software Development Kit
API
Application Programming Interface
VR
Virtual Reality
FKSG
Fakulti Kejuruteraan dan Sains Geoinformasi
UTM
Universiti Teknologi Malaysia
PIRR
Photo realistic Interactive Real-Time Rendering
SIS
Spatial Information System
GIERS
GIS-based intelligent emergency response system
EMIS
Emergency management information systems
CAD
Computer Aided Design
LOD
Level of Details
RSO
Rectified Skew Orthomorphic
SENARAI LAMPIRAN
LAMPIRAN
TAJUK
A
Pelan Lantai Bangunan Kajian
B
Tekstur yang Digunakan pada Model
MUKA SURAT
182
Bangunan 3D Kajian
194
C
Carta alir program Converter
199
D
Contoh Pengaturcaraan Bagi Program
Converter
200
E
Carta alir program Topology
206
F
Contoh Pengaturcaraan Bagi Program
Topology
207
G
Carta alir program Attribute
217
H
Contoh Pengaturcaraan Bagi Program
Attribute
218
I
Contoh Pengaturcaraan Program Utama
233
J
Carta alir program Aplikasi Utama (pengiraan
laluan terpendek)
234
BAB 1
PENGENALAN
1.1
Latar Belakang
Di
antara
keistimewaan
Sistem
Maklumat
Geografi
(GIS)
ialah
kemampuannya untuk melakukan analisis spatial terhadap entiti seperti poligon,
garisan dan juga titik (polygon/line/point analysis). GIS juga mampu untuk
melakukan pengiraan statistik berdasarkan entiti-entiti spatial yang terdapat di muka
bumi (geografi). Selain itu, fungsi utama GIS yang lain ialah ianya dapat
menghubungkan maklumat spatial dengan maklumat-maklumat bukan spatial
(atribut). Ciri-ciri ini tidak boleh dilakukan oleh mana-mana sistem yang lain.
Sebagai contoh, dengan menggunakan GIS, maklumat spatial seperti peta gunatanah
dapat dihubungkan dengan maklumat-maklumat (rekod-rekod) yang berkaitan
dengan peta gunatanah tersebut seperti jenis kegiatan yang dilakukan terhadap tanah
tersebut, keluasan tanah, nombor lot, nama pemilik, perkadaran cukai yang
ditetapkan dan sebagainya.
Kemampuan GIS ialah ianya dapat mempercepatkan proses kerja/tugas
manual yang pada sebelum ini memerlukan masa yang agak lama. GIS juga dapat
menyediakan atau menyimpan maklumat-maklumat geografi dalam bentuk yang
teratur supaya ianya lebih mudah difahami dan juga lebih mudah untuk dicapai.
Namun begitu, apabila bentuk muka bumi menjadi semakin kompleks untuk
diuruskan dan tambahan pula kemampuan teknologi berubah dari hari ke hari,
keperluan terhadap GIS ini semakin meningkat. Binaan dan teknologi canggih seperti
laluan jalanraya bertingkat, bangunan berkembar, laluan terowong bawah tanah dan
perancangan bagi kawasan yang padat memerlukan kefungsian tambahan bagi GIS
yang sedia ada. Terdapat juga beberapa usaha daripada sesetengah pihak dalam
membangunkan fungsi atau pun aplikasi bagi menyelesaikan permasalahan tersebut.
Akan tetapi, kebanyakan usaha bagi setiap permasalahan yang dilakukan adalah
berdasarkan “task oriented”. Namun begitu, persoalan yang boleh ditanya ialah
adakah pendekatan tersebut menyelesaikan permasalahan GIS dan memenuhi
kehendak pengguna GIS secara menyeluruh?
Analisis spatial merupakan salah satu kelebihan atau pun “tools package”
yang hadir bersama-sama dengan GIS. Akan tetapi, telah dinyatakan sebelum ini,
akibat daripada keperluan pengguna GIS yang semakin meningkat, berlaku satu
evolusi yang menghendaki GIS mengendalikan data yang berasaskan 3 dimensi (3D).
3D di sini bermaksud data yang mempunyai 3 elemen asas koordinat iaitu x, y dan z
di dalam maklumat spatialnya. Ketiga-tiga elemen ini hendaklah digunakan atau pun
diaplikasikan ke dalam GIS sebagaimana ia digunakan di dalam dunia yang sebenar.
Pengguna boleh melakukan sebarang pertanyaan dan juga analisis yang berkaitan
terhadap ketiga-tiga elemen tersebut. Sebagai contoh, bagi kes jalanraya bertingkat,
pengguna boleh memilih untuk melakukan analisis terhadap jalan yang berada di atas
atau pun jalanraya yang terdapat di bahagian bawah. Ini tidak bermakna bahawa
“tools package” yang hadir bersama-sama GIS untuk ketika ini tidak lengkap, akan
tetapi perkara atau pun situasi seperti ini timbul akibat daripada reka bentuk objek
spatial yang dibina semakin kompleks.
Apa yang mampu dilakukan oleh pakej GIS yang sedia ada sekarang ialah
analisis terhadap data yang berbentuk 2 dimensi (2D) sahaja. Terdapat juga beberapa
“extension” tambahan yang dibina untuk digunakan bersama perisian-perisian GIS
yang sedia ada untuk menganalisis data-data yang berasaskan 3D. Akan tetapi
“extension” tersebut mempunyai limitasi-limitasi yang tertentu. Namun begitu
menurut pendapat penyelidik-penyelidik GIS yang menyatakan bahawa kebanyakan
kes yang berlaku sekarang ini, contohnya bagi kawasan bandar yang menggunakan
GIS, evolusi ke arah objek 3D adalah sangat perlahan. Ini mungkin disebabkan oleh
beberapa faktor. Di antaranya ialah cara pemikiran sesetengah pihak terhadap GIS
2D. Sebagai contoh, bagi data kadester; proses evolusi kepada 3D bagi data kadester
2D yang sedia ada adalah dengan kaedah menggunakan “extensions” untuk
mewujudkan bentuk 3D bagi data kadester tersebut. Walaupun produk yang
dihasilkan agak memuaskan, akan tetapi pendekatan yang dilakukan itu tidak
lengkap dan juga terdapat had-had yang tertentu contohnya seperti analisis dalam
persekitaran 3D itu sendiri. Oleh itu, apa yang paling kritikal di sini ialah analisis
spatial 3D yang berfungsi sebagai salah satu “tool” bagi model 3D, lihat Billen et al
(2001).
Analisis spatial 3D merupakan sesuatu yang masih lagi di dalam peringkat
kajian. Bagi memenuhi keperluan ini, pelbagai kajian atau perkara perlu diambil kira
secara menyeluruh bagi melengkapkannya di dalam bidang GIS. Analisis spatial 2D
yang sedia ada terbahagi kepada beberapa kategori. Contohnya analisis spatial yang
asas seperti Buffer (penimbal), Join (cantum), dan Overlay (tindihan). Namun begitu
terdapat juga analisis spatial yang lain seperti analisis permukaan (surface analysis)
dan analisis rangkaian (network analysis). Bagi analisis rangkaian, di antara analisis
yang dilakukan ialah pencarian laluan yang terpendek di antara dua lokasi.
Contohnya seperti pencarian laluan yang terpendek/terbaik bagi pelancong untuk ke
sesebuah restoran daripada hotel. Hasil daripada analisis seperti ini dapat membantu
individu tersebut dalam melakukan navigasi dengan menjimatkan masa atau pun kos
pengangkutan.
Namun begitu, implementasi analisis pada persekitaran 3D adalah berbeza.
Analisis rangkaian yang menggunakan rangkaian 2D bersama-sama dengan
maklumat permukaan 3D (Digital Terrain Model) tidak melibatkan pengiraan
analisis rangkaian 3D. Perbezaannya tidak ketara jika analisis tersebut masih
menggunakan rangkaian 2D (data geografi 2D). Akan tetapi, bagi situasi bangunan
bertingkat, pastinya rangkaian 3D perlu digunakan. Lazimnya, pengiraan yang
dilakukan untuk mencari laluan terpendek/terbaik di dalam analisis rangkaian 2D
menggunakan algoritma matematik yang khusus berdasarkan situasi yang terlibat. Di
antara algoritma yang digunakan dan terbukti berkesan dalam pengiraan laluan
terpendek/terbaik ialah algoritma Dijkstra, DKD, Graph Growth dan juga Genetic.
Bagi mengaplikasikan algoritma-algoritma ini ke atas jaringan rangkaian 3D, kajian
yang terperinci perlu dilakukan.
Terdapat beberapa rumusan yang boleh dibuat daripada perbincangan yang
telah dilakukan. Di antaranya ialah, GIS perlu menguruskan data 3D di masa yang
mendatang. Pengguna kini semakin bijak, mereka menghendaki analisis-analisis
yang boleh dilakukan terhadap data geografi 3D. Permintaan daripada pengguna GIS
dan ditambah pula dengan rupa bentuk muka bumi dan binaan manusia yang
semakin kompleks pada masa sekarang ini menyebabkan perlunya satu GIS yang
dapat menyokong analisis 3D untuk membantu pengguna dalam melakukan tugastugas seharian.
1.2
Penyataan Masalah
Lanjutan daripada perbincangan yang dilakukan di seksyen 1.1, dirumuskan
bahawa perkara yang kritikal pada masa ini ialah di antaranya masih kurang analisisanalisis yang boleh dilakukan di dalam persekitaran GIS 3D. Kajian-kajian ke arah
menghasilkan struktur analisis GIS 3D adalah perlu bagi memenuhi kehendak
pengguna-pengguna GIS di masa akan datang.
Dari
segi
pengimplementasian
algoritma
Dijkstra,
kebanyakannya
diimplementasikan terhadap permukaan 2D dan ini adalah berdasarkan kajian-kajian
penyelidik sebelum ini (Cherkassy et al.,1991), (Zhan, 2001), (Eklund, 1993).
Kemampuan algoritma Dijkstra dalam menyelesaikan permasalahan “shortest path”
telah terbukti di dalam kajian-kajian terdahulu (Shad et al., 1998), (Sherlock et al.,
1999), (Semanta et al., 2005). Namun begitu, kajian mengenai analisis terhadap
permukaan 3D masih kurang dan perlu dijalankan penyelidikan dan kajian berkaitan.
Beberapa kajian terdahulu mengenai GIS 3D telah pun dilakukan oleh beberapa
penyelidik seperti Meijers et al. (2005), Kwan et al. (2003), dan Kirkby et al. (1996).
Meijers et al. melakukan kajian mengenai struktur bagi bangunan bertingkat
untuk diimplementasikan di dalam GIS yang berasaskan 3D supaya satu struktur
yang piawai dapat dibina untuk proses “evacuation” bagi bangunan yang bertingkat.
Kwan et al. pula melakukan kajian mengenai potensi untuk membina satu sistem
kecemasan bagi bangunan bertingkat (kawasan mikro-spatial) secara real-time, dan
Kirkby et al. mengkhususkan kajiannya terhadap pengimplementasian algoritma
untuk mencari jalan terpendek di dalam persekitaran 3D bagi tujuan visualisasi
(drive/flythrough).
Di dalam kajian-kajian ini turut dinyatakan penggunaan algoritma Dijkstra
untuk mencari “shortest route”. Kesemua kajian ini tertumpu kepada pembinaan
seperti struktur laluan bagi proses “evacuation”, mengkaji potensi untuk
mewujudkan sistem kecemasan bagi bangunan 3D dan bagi Kirkby et al.
pengkhususan 3D hanyalah kepada tujuan navigasi kenderaan dan tidak tertumpu
kepada bangunan bertingkat. Manakala, kajian mengenai algoritma Dijkstra
khususnya
kepada
pengimplementasiannya
kepada
permasalahan
bangunan
bertingkat berdasarkan struktur dan model 3D adalah masih kurang dan perlu
diberikan tumpuan. Berdasarkan daripada permasalahan dan cadangan tersebut,
penekanan di dalam kajian tesis ini adalah untuk mengimplementasikan algoritma
Dijkstra ini ke dalam jaringan di dalam bangunan bertingkat. Fungsi algoritma
adalah untuk mencari laluan terpendek/terdekat (shortest route) dari satu lokasi ke
lokasi yang lain (lokasi destinasi) dalam persekitaran 3D. Bagi tujuan paparan 3D,
enjin komputer 3D (3D State) digunakan sebagai alat visualisasi dan navigasi 3D.
Menurut Kirkby et al.(1996), kelebihan bagi pengimplementasian algoritma
“shortest path” secara grafikal di dalam persekitaran 3D ialah ia memudahkan
pemahaman pengguna terhadap hasil pengiraan “shortest path” tersebut dan
seterusnya dengan adanya kajian lanjutan yang berkaitan mengenai kajian seperti ini
akan menghasilkan senario model 3D yang lebih realistik bagi GIS.
GIS sebenarnya memerlukan kajian-kajian lanjutan yang berkaitan dengan
3D. Kajian-kajian tersebut perlu merangkumi beberapa aspek penting, antaranya
seperti permodelan data 3D, topologi 3D, pangkalan data 3D dan juga analisis
terhadap data yang berbentuk 3D. Pendekatan analisis rangkaian terhadap
persekitaran 3D di dalam tesis ini amat berguna bagi bidang-bidang yang tertentu
seperti pengurusan bencana, pengurusan bangunan, dan juga navigasi-navigasi yang
memerlukan maklumat 3D. Algoritma Dijkstra terbukti berjaya dari segi
implementasinya terhadap data-data GIS yang berbentuk 2D. Oleh itu, kajian di
dalam tesis ini menjurus kepada mengaplikasikan algortitma Dijkstra terhadap data
yang berasaskan 3D. Analisis “shortest path” yang selama ini hanya dapat dilakukan
terhadap
data
2D,
diimplementasikan
terhadap
data
3D
dan
seterusnya
pengimplementasian tersebut akan diadaptasikan terhadap kawasan persekitaran
model bangunan 3D.
1.3
Tujuan Kajian
Tujuan kajian ini dijalankan adalah untuk mengimplementasikan algoritma
Dijkstra ke atas jaringan rangkaian 3D di dalam bangunan. Seterusnya, enjin
komputer 3D digunakan sebagai alat bagi tujuan navigasi dan paparan hasil
pengiraan algoritma di dalam persekitaran 3D.
1.4
Objektif Kajian
Berdasarkan tujuan kajian yang dikhususkan, beberapa objektif telah dikenal
pasti, iaitu:
i.
Mengkaji keperluan algoritma Dijkstra dari segi implementasinya
terhadap analisis rangkaian dalam persekitaran 3D,
ii.
Mengimplementasikan algoritma tersebut ke dalam persekitaran 3D
dengan menggunakan enjin komputer 3D.
1.5
Skop Kajian
Skop kajian merangkumi kawasan kajian, algoritma serta tumpuan utama
analisis adalah seperti berikut:
i.
Berdasarkan cadangan kajian yang terdahulu, algoritma Dijkstra dipilih
sebagai analisis rangkaian yang terlibat dalam kajian ini. Algoritma ini
digunakan bertujuan untuk mengira jarak terpendek di antara dua lokasi
di dalam persekitaran 3D. Ianya dipilih berdasarkan kemampuan
pengiraannya berdasarkan jumlah nod yang terlibat dalam kajian.
Penekanan diberikan terhadap kaedah pengimplementasian algoritma
tersebut terhadap jaringan rangkaian 3D dengan menggunakan
pendekatan GIS.
ii.
Model digital bangunan 3D yang digunakan adalah bangunan Fakulti
Kejuruteraan dan Sains Geoinformasi, Universiti Teknologi Malaysia,
Skudai Johor (Blok C02, C03, C04, C05 dan C06).
iii.
Jaringan rangkaian yang dibentuk adalah berdasarkan laluan navigasi
yang terdapat di dalam bangunan kajian. Rangkaian yang dibina adalah
rangkaian yang distruktur dan direka tanpa mengambil kira sebarang
halangan (obstacle/barrier) atau pun faktor-faktor navigasi yang lain.
Ini kerana, tujuan utama rangkaian yang dibina adalah untuk digunakan
bersama algoritma kajian.
iv.
Bagi tujuan paparan 3D, enjin komputer 3D (3D State) digunakan
sebagai alat visualisasi dan navigasi 3D.
1.6
Kepentingan Kajian
Kajian ini bertujuan untuk memberikan beberapa sumbangan kepada bidang
GIS. Ia merupakan salah satu kajian awal dalam mewujudkan GIS berbentuk 3D,
mengurus dan menganalisis data 3D. Kajian ini boleh dijadikan rujukan awal kepada
penyelidik-penyelidik yang lain bagi mewujudkan GIS yang lebih baik, terutamanya
bagi aspek analisis seperti analisis rangkaian. Kajian ini juga dijalankan berdasarkan
objek 3D sebenar yang mana keberkesanan penggunaan algoritma dapat diuji untuk
kajian lanjutan.
Kajian ini juga dapat membantu penyelidikan yang berkaitan pengurusan
bencana (disaster management) terutamanya dalam persekitaran bangunan. Ini
kerana bagi bangunan bertingkat proses “evacuation” adalah kriteria yang utama dan
perlu dilakukan dengan pantas dan efisyen. Oleh kerana kajian ini adalah untuk
proses navigasi dalam bangunan bertingkat, maka ia bersesuaian bagi navigasi
kecemasan di dalam bangunan bertingkat ketika berlaku sebarang bencana seperti
kebakaran, gempa bumi dan sebagainya.
Algoritma Dijkstra pula terkenal sebagai salah satu kaedah penyelesaian bagi
permasalahan di dalam bidang sains komputer. Terdapat tiga faktor utama yang
menjadikan ia terkenal di dalam bidang tersebut:
i.
Pencipta algoritma ini ialah seorang saintis komputer,
ii.
Ia memerlukan struktur data yang berlainan (special data),
iii.
Terdapat
persaingan
antara
operation
research
(OR/MS)
untuk
mengorientasikan algoritma yang menyelesaikan masalah bagi laluan
terpendek tersebut.
Namun begitu algoritma ini menjadi semakin terkenal digunakan di dalam
bidang-bidang aplikasi praktikal lain yang memerlukan kemampuan algoritma ini.
Contohnya bidang GIS sendiri memerlukan online computing dan penunjuk arah di
dalam navigasi. Pihak Microsoft juga mempunyai pasukan penyelidik yang membuat
kajian mengenai shortest path ini (Dijkstra’s Algorithm, 2005). Implementasi
algoritma Dijkstra kebanyakannya dibuat terhadap permukaan 2D. Oleh itu, kajian di
dalam tesis ini adalah untuk mengimplementasikan algoritma Dijkstra ke dalam
dunia GIS sebenar untuk mencari laluan terpendek/terdekat (shortest route) dari satu
lokasi ke lokasi yang lain (lokasi destinasi) bagi objek yang berada di dalam
persekitaran 3D. Tambahan pula, kajian ini membuat percubaan untuk menggunakan
algoritma ini ke dalam persekitaran 3D di mana ianya adalah satu cabaran baru bagi
algoritma ini sendiri. Penggunaan algoritma ini terhadap jaringan jalanraya sebenar,
telah terbukti adalah di antara yang terpantas, Zhan (2001).
1.7
Metodologi Kajian
Bagi mencapai tujuan dan objektif kajian berdasarkan skop yang telah
dinyatakan, satu pendekatan atau metodologi kajian yang baik dan tepat amat
diperlukan. Sehubungan dengan itu, Rajah 1.1 menunjukkan carta alir perlaksanaan
kajian dalam tesis ini. Ianya menyatakan pemahaman masalah, penetapan tujuan dan
objektif kajian, metodologi, keputusan dan analisis serta kesimpulan kajian.
Carian literatur dan
penyertaan seminar
Penemuan Isu dan Masalah
Struktur analisa
rangkaian dan
navigasi dalam
persekitaran 3D
Penanda aras
kajian
Matlamat dan Objektif Kajian
Pembentukan hala tuju
kajian
Kajian Literatur
Metodologi Kajian
Kajian mengenai prosedur
algoritma:
1.
Steps
2.
Iterations
Algoritma Dijkstra
struktur jaringan

Kemampuan/prestasi algoritma GIS
 Kajian terhadap struktur
penyimpanan data jaringan

 Struktur simpanan maklumat
dibina

Integrasi enjin 3D dan model 3D
dikaji
 Kesesuaian SDK

 Pengoptimaan jumlah nod dan
poligon bagi model 3D
GIS dan Algoritma Dijkstra
Kaedah Implementasi
Algoritma
Struktur Data Jaringan
struktur model
bangunan
Model 3D
Struktur Model 3D
Algoritma Dijkstra (3D)

 Kriteria bagi
pengimplementasian algoritma
pada jaringan 3D disenaraikan

 Keserasian enjin 3D diuji
Dijkstra dan Elemen 3D
Digunakan semasa
pengiraan algoritma
Struktur MW
Pengubahsuaian semula
Modifikasi Algoritma

 Algoritma yang diubahsuai diuji
bersama dengan pangkalan
data jaringan dan juga model 3D
bangunan
Pengujian Algoritma
Rangkaian Jaringan
3D
Converter
Topology
Attribute
Statistik pengiraan dan
navigasi 3D
Model 3D Kajian
Pembangunan Data Spatial dan Atribut
Pembangunan Aplikasi Utama
Keputus an dan Analisis Kajian
Kesimpulan
Rajah 1.1: Carta alir perlaksanaan kajian
1.8
Struktur Penulisan Tesis
Penulisan kajian ini dibahagikan kepada enam bab. Kandungan rumusan
perbincangan bab-bab adalah seperti berikut:
a)
Bab satu
Bab
ini
berkaitan
dengan
pengenalan
terhadap
kajian
yang
menghuraikan permasalahan kajian, tujuan dan objektif kajian, skop
kajian dan juga kepentingan kajian. Penerangan metodologi dan hasil
akhir kajian turut dinyatakan secara umum di dalam bab ini
b)
Bab dua
Bab kedua membincangkan beberapa kajian literatur yang dilaksanakan
sepanjang kajian. Permasalahan dalam kajian yang berkaitan dikenal
pasti dan penelitian terhadap struktur jaringan rangkaian 3D yang sedia
ada dirujuk bagi tujuan implementasi navigasi di dalam bangunan
kajian. Enjin 3D yang digunakan sebagai alat paparan navigasi 3D
diterangkan dalam bab ini bagi melihat ciri-ciri dan prestasi enjin
tersebut. Selain itu, cadangan seperti penggunaan algoritma yang sesuai
berdasarkan jenis jaringan rangkaian turut dititik beratkan di dalam bab
ini.
c)
Bab tiga
Bab ini tertumpu kepada pemahaman algoritma Dijkstra dan kaedah
pengimplementasian algoritma tersebut terhadap jaringan rangkaian 3D.
Ciri-ciri algoritma diterangkan bagi melihat kebolehlaksanaannya ke
atas
jaringan rangkaian sebenar. Perbincangan mengenai cara
penyelesaian laluan terpendek dalam beberapa bidang (teknik
penyelidikan operasi dan analisa rangkaian) juga diterangkan di dalam
bab ini.
d)
Bab empat
Bab keempat menerangkan mengenai persediaan yang terlibat sebelum
kiraan algoritma dan navigasi. Contohnya seperti kajian keperluan, reka
bentuk aplikasi, penyediaan model 3D bangunan dan jaringan
rangkaian 3D kajian dan juga pengaturcaraan berkaitan. Pengaturcaraan
dibuat bagi mendapatkan maklumat daripada data jaringan rangkaian
dan seterusnya kiraan algoritma Dijkstra itu sendiri.
e)
Bab lima
Bab ini menghuraikan keputusan dan analisis kajian. Pengaturcaraan
yang dibincangkan pada bab keempat dijelaskan dalam bab ini dan
hasilnya ditunjukkan mengikut kefungsiannya. Hasil akhir kajian iaitu
pengiraan laluan terpendek terhadap jaringan rangkaian 3D dan juga
navigasi 3D ditunjukkan pada aplikasi utama kajian yang dibangunkan.
f)
Bab enam
Bab terakhir berkaitan dengan kesimpulan dan cadangan kajian.
Permasalahan yang dihadapi dalam kajian dinyatakan bagi menjadi
justifikasi dan juga penambah baikan terhadap kajian-kajian berkaitan
pada masa akan datang. Ini kerana, kajian tesis ini merupakan kajian
awal terhadap kajian-kajian lanjutan yang berkaitan dengan analisis
rangkaian dan navigasi dalam persekitaran 3D.
BAB 2
KAJIAN LITERATUR
2.1
Pendahuluan Bab
Bab ini menerangkan dan membincangkan kajian-kajian terdahulu yang
berkaitan dengan kajian. Ini bertujuan untuk mendapatkan gambaran senario sebenar
penyelidikan yang telah dijalankan serta melihat contoh-contoh kaedah perlaksanaan
kajian-kajian tersebut. Tambahan pula, beberapa isu dibincangkan untuk melihat
permasalahan yang timbul sepanjang kajian tersebut. Selain itu, pengertian GIS
secara umum dan juga maksud GIS 3D dibincangkan bagi tujuan mendapatkan
gambaran awal mengenai bidang kajian.
Perbincangan lain seperti perisian-perisian yang digunakan di dalam kajian
dan mengapa ianya dipilih turut dibincangkan. Walau bagaimana pun, algoritma
laluan terpendek yang digunakan dalam kajian iaitu algoritma Dijkstra juga
dibincangkan secara am dari aspek kefungsian dan peranannya. Perincian mengenai
algoritma Dijkstra dibincangkan pada bab seterusnya iaitu bab empat. Di samping
itu, fakta dan maklumat sokongan kajian dikumpul dan kemudiannya dijadikan
sumber rujukan bagi kajian yang dilakukan.
2.2
Sistem Maklumat Geografi (GIS) 3 Dimensi
GIS yang sedia ada mampu memberikan persembahan peta 2D yang menarik
bagi bentuk muka bumi. Namun begitu persembahan peta yang berbentuk 2D masih
tidak mencukupi. Ini dapat dilihat dari aspek visualisasi 3D. Contohnya visualisasi
ini amat diperlukan dalam proses perancangan pembangunan bandar, pembinaan
jalanraya yang bertingkat, dan juga navigasi. Terdapat juga beberapa proses yang
tidak dinyatakan di sini yang memerlukan elemen dimensi ke tiga dalam GIS.
Permintaan
penggunaan
3D
ini
wujud
daripada
pengguna
GIS
sendiri.
Memandangkan bentuk muka bumi serta binaan manusia yang semakin kompleks
untuk diuruskan maka permintaan-permintaan seperti ini terhasil untuk memenuhi
kehendak pengguna GIS. Walaupun permintaan wujud, akan tetapi untuk meletakkan
satu lagi dimensi di dalam GIS adalah bukan perkara yang mudah dan cepat dari segi
masa untuk menghasilkannya. Ini kerana akan wujud beberapa komplikasi dari segi
permasalahan spatial dan ia memerlukan permodelan geometri yang lebih terperinci
termasuklah juga perhubungan antara entiti-entiti spatial itu sendiri (Chen, 2005).
Bagi mewujudkan GIS yang berunsurkan 3D, pelbagai kajian terperinci perlu
dilakukan. Memandangkan GIS sebelum ini mampu menguruskan data spatial 2D
dengan baik, maka rujukan akan dibuat secara terperinci dari segi pendekatan
pengimplementasian GIS terhadap data spatial 2D. Sudah pasti akan wujud
perbezaan yang ketara dari segi pendekatan mahupun visualisasi 3D. Akan tetapi
rujukan terhadap pengurusan data spatial 2D adalah merupakan landasan atau pun
asas yang terbaik. Penelitian terhadap skop 3D adalah penting sebagai permulaan.
Terdapat satu kajian yang cuba menghubungkan antara GIS 3D dengan
Virtual Reality Environment (VR) (Verbree et. al., 1999). Kelebihan VR ialah ianya
membolehkan pengguna untuk memvisualisasikan data 3D. Penyelidikan tersebut
mencadangkan pendekatan 3 multi-view berdasarkan 3 jenis visualisasi iaitu plan
view (2D), model view (2.5D) dan world view (3D). Kriteria-kriteria seperti jenis
model, pandangan visualisasi, jenis navigasi, proses selection, manipulasi dan
analisis bagi setiap view dinyatakan. Bagi view yang berbeza, setiap kriteria yang
diambil kira juga berbeza-beza. Sebagai contoh, analisis bagi pandangan plan view
ialah Buffer, Overlay dan Network Proximity. Bagi Model View pula, analisis yang
boleh dilakukan ialah Line of Sight dan Volume Proximity (3D). Akhir sekali bagi
World View, analisis yang terlibat hanya Sound Sight dan juga proses Shadow.
Kesemua ini merupakan satu usaha kumpulan penyelidik untuk mencipta GIS
3D dengan menggunakan VR yang dinamakan Karma VI. Ini adalah penting bagi
permulaan GIS 3D untuk menetapkan satu piawai bagi paparan data yang berbeza
mengikut jenis pandangan (view) yang digunakan di dalam persekitaran 3D.
Walaupun wujud permintaan untuk GIS 3D ini, akan tetapi banyak perkara
perlu difikirkan dan dikaji sebelum menghasilkan apa yang dikatakan GIS 3D ini.
Memandangkan kajian-kajian terhadap GIS 3D ini masih giat dibuat, namun ia masih
belum mencukupi untuk mewujudkan GIS 3D yang boleh memuaskan kehendak
kesemua
pengguna GIS. Setakat ini
apa yang berjaya dilakukan ialah
pengimplementasian GIS 3D terhadap sistem/aplikasi yang hendak dibina. GIS 3D
yang dihasilkan hanya berorientasikan kepada tujuan ia dibina dan bukanlah untuk
kegunaan pengguna GIS secara menyeluruh. Contohnya jika GIS 3D yang dibina
adalah untuk perancangan pembangunan bandar, maka ia tidak boleh digunakan bagi
sistem/aplikasi lain seperti pengawalan alam sekitar mahupun proses perlombongan
(3D mining). GIS 3D yang dibina bukan untuk penggunaan operasi 3D yang
menyeluruh akan tetapi hanya berorientasikan kepada tujuan-tujuan tertentu sahaja.
2.3
Objek Tiga Dimensi (3D)
Jika dirujuk kepada definisinya, objek dua dimensi (2D) bermaksud objek
yang dibina berasaskan 2 paksi (x dan y, tinggi dan lebar, lajur dan baris dan
sebagainya). Struktur 3D juga kebiasaanya digunakan untuk mensimulasikan imej
3D pada skrin.
GIS menyimpan maklumat geografi sebagai satu koleksi lapisan tematik yang
dihubungkan bersama-sama. Ia nampak mudah tetapi sebenarnya terbukti berkesan
dan
berkemampuan
untuk
menyelesaikan pelbagai permasalahan geografi.
Persembahannya yang ringkas iaitu dengan hanya berdasarkan lapisan-lapisan
tematik yang digunakan bersama-sama membenarkan pengguna untuk memahami
perhubungan antara objek-objek spatial. Kejayaan pendekatan GIS ini dapat dilihat
di serata dunia berdasarkan pelbagai aplikasi dan sistem yang dibangunkan untuk
menguruskan maklumat geografi.
Aktiviti GIS kebanyakannya menggunakan data geografi 2D sama ada data
yang terdapat pada cetakan kertas (peta topografi) mahupun data secara digital (peta
digital) yang sedia ada. Walau bagaimana pun, data geografi 2D tersebut tetap dalam
bentuk 3D di dunia yang sebenar. Kajian juga menunjukkan kebanyakan aplikasi
yang berasaskan 2D menunjukkan kemampuan yang terhad atau tidak mencukupi
apabila membabitkan analisis ruang 3D. Maka berlaku peralihan kepada GIS 3D.
Sesetengah pengguna GIS hanya melakukan projeksi terhadap data 2D untuk
menjadikannya seakan-akan menyerupai objek 3D. Objek 3D yang dicipta daripada
projeksi objek 2D sebenarnya akan kehilangan beberapa maklumat penting yang
mana ia akan menyukarkan pengguna untuk memahami, menganalisis dan menilai
keadaan persekitaran untuk sebarang aktiviti manusia. Terdapat pelbagai aplikasi
yang cuba untuk membina alat untuk memodel, menyimpan, menganalisis dan
memvisualisasikan data-data 3D dengan cara yang efektif.
Antara bidang yang mempunyai permintaan terhadap pengurusan data 3D
ialah seperti pembangunan bandar, perancangan lanskap, telekomunikasi, harta
tanah, kadester, pembinaan jalanraya/landasan keretapi/bangunan, pengurusan utiliti,
perniagaan dan juga pelancongan (Zlatanova, 2002). Akan tetapi jika dilihat daripada
pihak vendor pula, keadaannya adalah sama sekali berbeza. Vendor bertungkus
lumus untuk menghasilkan fungsi-fungsi tambahan bagi perisian mereka. Akan tetapi
apa yang kurangnya ialah aspek pengurusan data 3D dan juga kekurangan dari segi
kefungsian yang diperlukan bagi aplikasi yang pelbagai. Perisian-perisian tersebut
sebenarnya bagus dan baik untuk penggunaan dari segi visualisasi data 3D dan juga
untuk analisis permukaan. Tetapi model-model yang digunakan sebenarnya masih
dalam keadaan 2D yang mana elemen dimensi ketiganya masih lagi disimpan
sebagai atribut. Namun begitu, peralihan teknologi yang begitu cepat akan dapat
memperkembangkan lagi bidang GIS 3D ini pada masa yang akan datang.
Model 3D yang berasaskan realiti banyak menerima perhatian dari pelbagai
perspektif, di antaranya ialah 3D data capturing, 3D visualization dan 3D data
modeling and management (Nebiker, 2003):
3D Data Capture
Pelbagai kajian telah pun dilakukan dan banyak kemajuan telah berlaku dalam
bidang ini. Antaranya ialah kaedah pengumpulan data seperti pembinaan model
permukaan secara automasi daripada imej foto udara atau pun imbasan laser. Projekprojek yang masih dijalankan kebanyakannya menjurus kepada integrasi multipenderiaan dalam proses untuk meningkatkan ketepatan data 3D.
3D Geovisualization
Terdapat beberapa kemajuan melibatkan model bandar dan lanskap dari segi
visualisasi. Perisian-perisian dan juga grafik 3D yang baru dan canggih yang ada
pada komputer peribadi membantu dalam 3D Geovisualization ini. Antara
pembangunan yang sedang dijalankan ialah untuk memaparkan model 3D bagi
sebuah bandar besar (bangunan 3D dalam kuantiti yang banyak) pada alat-alat
mudah alih (mobile devices).
3D Data Modeling and Management
Sejak beberapa tahun yang lalu, dapat dilihat pelbagai usaha dijalankan dalam bidang
permodelan dan pengurusan objek geospatial 3D. Sesetengah daripadanya
memfokuskan kepada model 3D yang kompleks sebagai kajian awal terhadap
persekitaran perhubungan DBMS. Antara projek-projek yang sedang dijalankan ialah
untuk menggunakan konsep object relational bagi isu-isu yang berkaitan dengan
topologi.
2.4
Kemampuan Perisian GIS Semasa
Terdapat beberapa vendor GIS yang mempunyai produk/perisian yang
mampu menyokong beberapa aplikasi untuk tujuan 3D. Kebanyakannya menjurus
kepada proses navigasi sahaja (Abdul Rahman, 2005). Antara vendor tersebut ialah
ESRI, ERDAS, Intergraph, dan PCIGEOMATICS yang mana vendor-vendor ini
mempunyai pasaran yang luas di antara pengguna-pengguna GIS (Zlatanova et. al,
2002).
Antara vendor yang aktif dan juga mempunyai pasaran yang luas di antara
pengguna-pengguna GIS dan juga pengguna di Malaysia ialah ESRI. Produk
terbarunya ialah ArcGIS 9.2 yang mana ia mempunyai beberapa kemampuan untuk
memanipulasi data-data geografi 2D menjadi 3D dan seterusnya digunakan untuk
tujuan visualisasi. ArcGlobe (rujuk Rajah 2.1) merupakan sebahagian daripada
ArcGIS 3D Analyst extension. Ia menyediakan paparan interaktif maklumat geografi.
Seperti ArcMap (ArcGIS), ArcGlobe juga menggunakan data GIS, memaparkan
maklumat yang terdapat di dalam geodatabase dan juga format data GIS yang
mampu disokongnya (ESRI, 2005). ArcGlobe mempunyai paparan maklumat
geografi 3D yang dinamik. Ia juga membenarkan data geografi dipaparkan hanya
apabila berada pada skala yang sepatutnya.
Rajah 2.1: Contoh Paparan ArcGlobe
(Sumber: http://www.esri.com/software/arcgis/extensions/3danalyst/index.html)
Bagi ArcGIS Desktop, terdapat beberapa pilihan tambahan atau pun
extensions yang ditawarkan oleh ESRI. Antaranya ialah ArcGIS 3D Analyst (Rajah
2.2). ArcGIS 3D Analyst menawarkan pengguna fungsi visualisasi dan analisis data
permukaan yang efektif. Pengguna boleh melihat maklumat permukaan (contohnya
permukaan tanah) daripada pelbagai titik pandangan (multiple viewpoints), membuat
pertanyaan terhadap data permukaan tersebut, menentukan objek apa yang patut atau
pun yang dapat dilihat daripada tempat pandangan dan membenarkan imej raster
ditampal (drape) pada data permukaan tersebut. Di antara tools yang ada dalam pakej
ArcGIS 3D Analyst untuk 3D ialah seperti cut and fill (potong dan timbus), line of
sight (laluan pandangan) dan juga terrain modelling (permodelan muka bumi). Untuk
menjadikan ia lebih realistik lagi, ia juga boleh menggunakan simbol bagi objekobjek 3D.
Rajah 2.2: Contoh Paparan 3D menggunakan ArcGIS 3D Analyst
(Sumber: http://www.arcdata.cz/img/2004/arcglobe.jpg)
2.5
Navigasi dan GIS
Navigasi diaplikasikan dalam pelbagai jenis aplikasi. Di antaranya ialah
seperti navigasi kecemasan, yang membabitkan kes-kes seperti bencana alam,
navigasi ambulans, bomba mahupun polis yang memerlukan maklumat
tertentu bagi membantu mengurangkan kesan bencana yang berlaku. Selain
itu, terdapat juga navigasi kenderaan yang tidak melibatkan proses kecemasan
seperti navigasi untuk mencari arah atau pun tempat yang dituju. Navigasi
kapal di lautan boleh juga di ambil kira, cuma pendekatannya bukanlah seperti
di daratan tetapi pemetaan navigasi tersebut adalah di lautan yang tidak
mempunyai limitasi seperti di daratan. Apabila dihubungkan GIS dengan
navigasi, pelbagai aplikasi dibangunkan untuk mencapai tujuan yang
diperkatakan. Contohnya bidang Location Based Services (LBS) yang agak
baru. LBS berkemampuan untuk menyokong aplikasi berkaitan navigasi.
Contohnya seperti navigasi daripada satu lokasi ke lokasi destinasi. Teknologi
Global Positioning System (GPS) yang diintegrasikan bersama LBS berfungsi
sebagai alat penentu kedudukan pengguna. Ini menggalakkan lagi penggunaan
LBS dalam kehidupan seharian. Justeru itu, navigasi dengan menggunakan
GIS dipilih kerana berdasarkan kelebihan dan kemampuan GIS dalam
menguruskan data geografi.
Perbincangan sebelum ini banyak menyentuh kepada navigasi-navigasi
yang memerlukan pemetaan 2D. Bagaimana pula dengan navigasi-navigasi 3D?
Navigasi di dalam bangunan bertingkat memerlukan pendekatan yang
berlainan kerana persekitaran yang diperlukan adalah dalam 3D (termasuklah
jaringan rangkaian 3D). Begitu juga navigasi yang terlibat di dalam simulasi
perancangan bandar, yang memerlukan simulasi/navigasi bagi tujuan membuat
perancangan dan pembangunan sesebuah bandar itu. Bagi navigasi 2D,
berdasarkan
kajian-kajian
yang
terdahulu
memang
banyak
pengimplementasian telah pun dilakukan dan juga GIS berjaya menguruskan
analisis-analisis yang melibatkan analisa rangkaian 2D. Akan tetapi bagi
navigasi 3D yang agak baru dalam bidang GIS, masih belum banyak aplikasi
dibangunkan dan kebanyakannya adalah masih di dalam peringkat kajian.
2.6
Algoritma Dijkstra
Algoritma Dijkstra merupakan algoritma yang dicipta oleh seorang professor
berbangsa Jerman yang bernama Edsger W. Dijkstra untuk menyelesaikan masalah
mencari laluan yang terpendek dari satu titik di dalam graf matematik (mathematical
graf) untuk ke titik yang lain atau pun titik destinasinya (Wikipedia, 2005).
Algoritma ini digunakan secara meluas dalam bidang matematik (graf).
Contoh penggunaannya seperti bandar-bandar diwakilkan sebagai titik di dalam graf.
Manakala pemberat di dalam graf tersebut pula ialah jarak antara bandar-bandar
tersebut yang mana setiap bandar tersebut dihubungkan/berhubung dengan bandarbandar lain dengan jalanraya masing-masing. Kegunaan algoritma Dijkstra ini
terletak pada kemampuannya untuk mencari shortest route diantara dua bandar
berpandukan jalanraya yang sedia ada.
Terdapat banyak kajian yang melihat kepada prestasi algoritma Dijkstra.
Salah satu kajian mengenai algoritma Dijkstra adalah oleh Shad et al. (1998). Kajian
ini membuat perbandingan antara algoritma pengiraan jalan terpendek di dalam GIS.
Terdapat pelbagai algoritma yang digunakan untuk mencari best route, least cost,
atau pun shortest path. Beberapa algoritma dipilih di dalam kajian ini seperti
Dijkstra’s Algorithm, Graph Growth Algorithm dan DKD Algortihm. Ujian tersebut
dilakukan terhadap beberapa peta yang mempunyai Level Of Detail (LOD) yang
berbeza (jumlah nod berbeza). Merujuk kepada kajian tersebut, hasil kajiannya
menunjukkan perbezaan mengikut situasi-situasi yang telah ditetapkan (one to one,
one to all dan all to all). Daripada kajian perbandingan tersebut, bagi situasi one to
one, jumlah nod yang kurang atau sama dengan 2000, pengimplementasian algoritma
yang terbaik ialah algoritma Dijkstra. Namun begitu, keputusan algoritma yang
terbaik untuk digunakan ke atas rangkaian 3D masih tidak boleh lagi ditetapkan
kerana tiada lagi kajian yang dibuat untuk dibuat perbandingan. Penerangan
mengenai algoritma Dijsktra secara terperinci akan dibincangkan di dalam Bab 3.
2.7
Pembangunan GIS 3D
Bagi pembangunan GIS ke arah 3D, pelbagai pendapat diutarakan oleh
penyelidik-penyelidik mengenai kaedah dalam mewujudkan satu GIS secara
menyeluruh bagi menyokong data 3D. Pelbagai kriteria perlu diambil kira
sebelum wujudnya GIS 3D yang sempurna. Di antaranya ialah pembangunan
data 3D dan permodelan data 3D. Kajian secara komprehensif adalah perlu
bagi mengkaji struktur penyimpanan data 3D dalam GIS. Ini kerana bagi
sistem pangkalan data GIS semasa, ianya hanya mampu menyokong data 2D
sahaja. Kajian mengenai permodelan data spatial 3D adalah perlu kerana
geometri bagi entiti-entiti spatial perlu dikaji sebelum diaplikasikan pada
sistem GIS.
Terdapat pelbagai kaedah untuk melakukan permodelan 3D. Namun
begitu tiada kajian dibuat untuk mencari model yang terbaik untuk
diimplementasikan dalam GIS dengan mengambil kira faktor-faktor seperti
pengstoran data, LOD dan lain-lain. Di dalam kajian ini enjin grafik digunakan
sebagai alat untuk memaparkan objek spatial di dalam persekitaran 3D.
Perbincangan seterusnya adalah mengenai enjin grafik yang digunakan.
2.7.1
Enjin Grafik
Beberapa faktor dikenalpasti mengenai mengapa perlunya penggunaan
enjin grafik yang ada di pasaran jika dibandingkan dengan membina enjin
grafik sendiri bagi membangunkan sesebuah aplikasi atau sistem. Faktor-faktor
yang dikenal pasti ialah perkakasan dan perisian, masa pembangunan, kit
pembangunan perisian (SDK) dan juga tumpuan terhadap aplikasi utama.
Perkakasan dan perisian komputer sering berubah terutamanya bagi 3D
accelerator dan juga API (Application Programming Interface). Produk baru
sering diperkenalkan, antaranya seperti MiniGL Out, ICD In, DirectX 9.0 Out,
Direct9.1 In, Glide2x Out, Glide 3x In, OpenGL 1.2 1.1 dan lain-lain. Pengujian
bagi setiap kod pada setiap 3D accelerator adalah rumit dan memakan masa
yang lama dan masa yang diperlukan untuk menghasilkan aplikasi utama
terpaksa dikurangkan. Pada masa enjin grafik dan aplikasi siap dibina, suasana
teknologi industri komputer mungkin sudah berubah. Oleh itu, kumpulan yang
khusus pada penghasilan enjin grafik adalah diperlukan. Manakala kumpulan
pembangunan aplikasi pula menumpukan perhatian kepada penghasilan
aplikasi utama. Oleh sebab itu, enjin grafik diperlukan bagi menyokong
aplikasi yang dibuat dan juga ia dapat menjimatkan masa dalam proses
pembangunan aplikasi.
Enjin grafik 3D yang baik tidak perlu menunjukkan pengaturcaraan 3D
API yang tidak mesra pengguna kepada pengguna. Dalam pada masa yang
sama, jika ianya menggunakan antara muka yang baik, enjin tersebut
sepatutnya tidak mengurangkan prestasi pemprosesan. Selain itu, untuk
menjadi seseorang pakar bagi satu API sahaja memakan masa yang lama.
Dengan menggunakan enjin grafik, pengguna dapat membuat program utama
di peringkat yang lebih tinggi.
Seseorang pakar di dalam 3D API tetap perlu membina sebuah enjin
grafik untuk memaparkan objek 3D. Pembinaan sebuah enjin grafik yang baru
memerlukan masa sedangkan terdapat pelbagai enjin grafik yang baik telah
dibina oleh organisasi lain yang tugasnya khusus kepada penghasilan enjin
grafik sahaja. Ini kerana hasilnya adalah sama bagi kedua-dua enjin cuma
masa yang lebih diperlukan untuk enjin grafik yang dihasilkan sendiri.
Dari aspek prestasi, enjin grafik yang datang dalam satu pakej dengan
perkakasan API tidak menunjukkan prestasi yang baik. Sebagai contoh, enjin
Direct3D Retained Mode adalah agak lemah, dan tidak mampu untuk
menyokong persekitaran 3D yang luas.
Perkara lain mengapa enjin grafik dipilih ialah tools yang disediakan
bersama dengan enjin berkenaan. Kit pembangunan perisian (SDK) enjin 3D
yang baik hadir bersama dengan tools untuk membantu proses pembangunan
sistem. GUI-based tools boleh mengurangkan masa pembangunan secara
menyeluruh dan kerja-kerja pengaturcaraan dapat diganti dengan operasi
penggunaan tetikus seperti drag and drop. Bagi enjin yang mempunyai SDK
yang tidak lengkap, contohnya seperti menggunakan enjin 3D daripada vendor
X, World Builder (bagi tujuan permodelan persekitaran 3D) daripada vendor Y
dan terrain generation daripada vendor Z, maka pembina aplikasi akan banyak
menghabiskan masa pada proses import/export fail yang mengakibatkan hasil
yang tidak diingini. Contohnya model yang dibina daripada 3DS (3D Studio
MAX) akan nampak berbeza dalam format DirectX.
2.7.2
Enjin Grafik 3DState
Terdapat pelbagai enjin grafik di pasaran pada masa kini. Bagi tujuan
kajian ini, 3D State dipilih sebagai enjin grafik untuk memaparkan objek
spatial 3D di dalam analisis rangkaian. Beberapa ciri enjin ini menepati bagi
tujuan
kajian.
Faktor-faktor
yang
dikenalpasti
ialah
prestasi
enjin,
pengaturcaraan enjin, multi-tasking dan teknologi enjin.
Enjin ini dipilih kerana kelebihannya seperti prestasi nisbah high frame
per second, kualiti grafik dan juga kesan khasnya. Enjin ini mampu memproses
objek persekitaran 3D bagi kawasan yang luas dengan menggunakan 3D
accelerator card.
Selain daripada itu, enjin ini menggunakan state-of-the-art algorithms
and techniques termasuklah teknologi PIRR (Photo realistic Interactive Real-
Time Rendering). Hasilnya adalah lebih prestasi pada kelajuan frame per second
dan kualiti imej berbanding dengan enjin yang lain. SDK enjin ini
membenarkan pengguna untuk menambah sebarang jenis aplikasi bagi
mewujudkan satu suasana 3D yang lengkap.
Cara menggunakan enjin ini adalah mudah. Ia dapat mengurangkan
masa pembinaan aplikasi. Pengaturcaraan 3D State adalah padat. Rajah 2.3
merupakan contoh pengaturcaraan yang dibuat untuk memaparkan satu
persekitaran 3D (world) pada skrin komputer sehingga pengguna menekan
kekunci Escape (Esc).
Private Sub Form_Load()
STATE_engine_load_world "world1.wld", "", "bitmaps",_
_USER_DEFINED_BEHAVIOR
While (GetAsyncKeyState(vbKeyEscape) <> 0)
STATE_engine_render 0, STATE_camera_get_default_camera
Wend
End Sub
Rajah 2.3: Contoh pengaturcaraan enjin grafik menggunakan
bahasa Visual Basic
Kelebihan lain bagi enjin 3D State ialah ia dibina untuk tujuan yang
pelbagai. Sesetengah enjin grafik dibina untuk tujuan yang tertentu sahaja.
Contohnya enjin yang baik seperti Quake tidak boleh digunakan untuk mereka
bentuk sebuah permainan lumba kereta atau pun simulasi penerbangan.
Kelebihan enjin 3D State adalah ia membenarkan pelbagai tujuan aplikasi
untuk dibangunkan.
Selain daripada itu, 3D State menyediakan pelbagai tools untuk
digunakan bersama-sama dengan enjin. Tools lain bagi tujuan pembangunan
aplikasi tidak diperlukan. Tambahan lagi, enjin ini didatangkan bersama
dengan pelbagai SDK untuk digunakan bersama platfom yang berbeza
berdasarkan kepada pilihan pengguna. SDKnya datang dengan sampel Console,
Windows API dan juga beberapa program MFC.
Akhir sekali enjin ini tidak menggunakan class yang baru mahupun
struktur data yang baru. Beberapa sample (contoh) disediakan untuk
memudahkan pengguna dalam membangunkan aplikasi.
2.8 Kajian Berkaitan
Evolusi 3D yang berlaku sekarang ini banyak menggunakan “extensions”
untuk menghasilkan maklumat 3D. Hasil yang ditunjukkan agak memuaskan, cuma
pendekatan tersebut masih tidak lengkap dan akibatnya pengguna masih juga
terdapat had-had yang tertentu dalam melakukan analisis. Perkara yang kritikal di
sini ialah analisis spatial untuk model 3D.
Rajah 2.4: Model 3 dimensi bandar Hamburg, Jerman (Coors, 2001)
Coors (2001) telah membina model 3D bagi seluruh bandar Hamburg (Rajah
2.4). Ia dibina daripada data-data kadester (2D) dan juga atributnya seperti bilangan
tingkat di dalam bangunan. Namun begitu model ini kemudiannya terpaksa dibina
semula disebabkan oleh beberapa faktor. Antaranya cabaran bagi model 3D ini ialah
ketinggian bagi bangunan-bangunan yang unik dan berbeza (bumbung). Ini
menunjukkan bahawa proses pembinaan model 3D dengan kaedah “extrude” secara
automatik daripada data 2D mengakibatkan beberapa maklumat penting tidak dijana.
Akhirnya pengguna akan berhadapan dengan masalah untuk menginterpretasi data
tersebut. Walupun data 2D tersebut berjaya dijadikan 3D, akan tetapi pendekatan
tersebut masih lagi tidak lengkap (Billen et al., 2001). Ini jelas menunjukkan bahawa
terdapat keperluan untuk mewujudkan GIS 3D yang mampu menguruskan maklumat
geometri dan topologi 3D, mengintegrasikan maklumat geometri 3D dengan
maklumat semantik, dan seterusnya proses visualisasi data tersebut di dalam bentuk
yang bersesuaian.
Dari aspek pengimplementasian algoritma Dijkstra di dalam analisis
rangkaian 2D, Eklund et al. (1993), membincangkan mengenai implementasi
algoritma klasik Dijkstra untuk mencari laluan (path) dalam jaringan jalanraya yang
bersambungan. Algoritma yang diubahsuai ini kemudiannya digunakan untuk 3D
Spatial Information System (SIS) bagi kegunaan servis “routing” kecemasan bagi
kenderaan. “Vehicle routing” tersebut dilakukan berdasarkan keadaan mukabumi
bandaraya Jepun (Okayama) dengan merujuk kepada simulasi gempa bumi yang
terdapat di bandar tersebut. Keputusan daripada kertas kerja ini menegaskan bahawa
penggunaan algoritma Dijkstra adalah amat efisyen. Pengiraan “shortest path” bagi
data yang digunakan mengambil masa di bawah 3 saat (data dan visualisasi adalah
dalam bentuk 2 dimensi sahaja).
Rajah 2.5: Skop kawasan bagi kajian Agent-Based Modeling and Analysis of
Hurricane Evacuation Procedures for the Florida Keys (Chen et al., 2005)
Kajian lain yang mengimplementasikan algoritma Dijkstra dalam proses
mencari “shortest path” atau pun “best route” adalah yang dijalankan oleh Chen et
al. (2005). Kajian ini adalah mengenai proses “evacuation” bagi kawasan Florida
Keys (Rajah 2.5) secara 2D jika taufan melanda. Jumlah penduduk bagi kawasan
tersebut ialah 92,596 orang. Rupa bentuk geografi kawasan Florida Keys yang unik
menyebabkan
proses
evacuation
adalah
sukar
untuk
dilaksanakan.
Pengimplementasian algoritma Dijkstra yang digunakan di sini ialah untuk mencari
laluan yang terbaik bagi proses mengosongkan bandar tersebut. Proses simulasi yang
telah berjaya dijalankan menunjukkan bahawa ia mengambil masa paling minimum
20 jam 11 minit hingga 20 jam 14 minit untuk mengosongkan penduduk seramai
92,596 orang. Pretasi algoritma adalah berbeza bergantung kepada tahap
kompleksnya jaringan yang digunakan dan jumlah nod yang terlibat (Shad et al.,
1998).
Balstrom (2001) melakukan kajian untuk mencari laluan terbaik seperti kajian
yang dilakukan oleh penyelidik-penyelidik yang lain. Namun begitu pendekatannya
adalah berbeza. Tugasnya ialah untuk mencari laluan yang terbaik di kawasan
berbukit tanpa maklumat jaringan laluan pejalan kaki. Prosedur seperti ini biasanya
dilakukan kepada laluan yang baru. Adalah sukar untuk mencari laluan terbaik bagi
kawasan berbukit jika maklumat laluan (secara digital) untuk proses jejakan tersebut
tiada. Beliau menegaskan pencarian laluan terbaik ini adalah mudah dilakukan jika
jaringan jalan (laluan) telah siap dibina secara digital. Walau bagaimana pun, bagi
tujuan pengimplementasian algoritma Dijkstra, jaringan tersebut perlu disediakan
terlebih dahulu sebelum sebarang pengiraan analisis dilakukan. Oleh itu kajian ini
menyelesaikan masalah tersebut secara GIS dan implementasi algoritma Dijkstra
seterusnya digunakan untuk mencari laluan jejakan tersebut.
Seterusnya, perbincangan yang akan dibuat adalah mengenai kajian yang
berkaitan dengan pembinaan model 3D dan juga potensi pengimplementasian
algoritma Dijkstra ke dalam persekitaran 3D. Ini kerana kajian ini melibatkan
pengimplementasian algoritma Dijkstra ke atas struktur bangunan yang bertingkat
dan juga navigasi di dalam bahagian dalam bangunan. Maka kajian-kajian terdahulu
seumpanya akan diselidik sebelum kajian ini dijalankan.
Rajah 2.6: Struktur Evacuation Path (Meijers et al.,2005)
Menurut Meijers et al. (2005), bahagian dalam bangunan (interior) selalunya
dipersembahkan di dalam bentuk 2D dan terdapat atribut dihubungkan dengannya.
Contohnya seperti reka bentuk arkitek hinggalah ke peta yang menunjukkan jalan
kecemasan di dalam bangunan. Kebanyakan proses navigasi yang menggunakan peta
dua dimensi (2D) adalah untuk tujuan visualisasi dan komunikasi. Namun begitu
terdapat juga model 3D seperti bangunan-bangunan bersejarah dan muzium yang
menawarkan proses navigasi menerusi bahagian dalam bangunan 3D yang diletakkan
tekstur (dinding) bangunan dan beberapa objek-objek 3D yang lain di dalam
bangunan.
Namun begitu, navigasi seperti ini hanyalah dibina untuk tujuan
navigasi/visualisasi sahaja. Tiada struktur yang dibina khas untuknya (contohnya
laluan navigasi pengguna dan laluan kecemasan). Membina struktur bagi bahagian
interior bangunan bukanlah kerja yang mudah kerana ia memerlukan pengkhususan
dan juga penelitian. Meijers mencadangkan dalam kajiannya satu struktur rangkaian
yang khusus dibina sebelum analisis rangkaian dilakukan (Rajah 2.6). Jika tidak
struktur laluan yang dianalisis akan menghadapi masalah yang tertentu (Karas et al.,
2005). Struktur yang dibina perlulah mengambil kira faktor-faktor seperti fungsi
bangunan, struktur bangunan tersebut, laluan-laluan yang sedia ada dan lain-lain.
Setiap bangunan bertingkat mempunyai seni pembinaan yang berbeza. Contohnya
seperti kawasan open-air food-court yang mana ia dinamakan open-air tetapi ia
sebenarnya masih di dalam bangunan.
Kwan et al. (2003) melakukan kajian berkaitan dengan GIS-Based Intelligent
Emergency Response System (GIERS). GIERS adalah merupakan satu sistem bagi
menggantikan Emergency Management Information Systems (EMIS) yang sedia ada.
EMIS hanya mampu menguruskan maklumat-maklumat kecemasan untuk data-data
berbentuk 2D sahaja. Masalah timbul apabila ianya hendak diaplikasikan kepada
sistem kecemasan bangunan-bangunan bertingkat (Rajah 2.7). Contoh bangunanbangunan bertingkat tersebut ialah bangunan yang mempunyai stesen keretapi bawah
tanah. Oleh kerana penyelidikan dan kajian-kajian mengenai bangunan bertingkat
yang berstruktur masih dijalankan, ia mengakibatkan proses pembinaan model dan
analisis 3D menjadi sukar. Tambahan pula untuk membina bahagian dalaman
bangunan bukanlah satu kerja yang mudah (Meijers et al., 2005).
Penyelidikan yang dibuat mengenai potensi GIERS ini ialah untuk melihat
potensi implementasi GIS 3D untuk tindakan kecemasan bagi kawasan persekitaran
mikro-spatial. Ini adalah kesan lanjutan daripada serangan pengganas terhadap
World Trade Center (WTC) di New York dan di Pentagon pada 11 September 2001.
Kesan ini menjejaskan bangunan yang diserang dan juga bangunan-bangunan
bersebelahan. Ini menunjukkan perlunya satu sistem yang teratur untuk tujuan
evacuation bagi bangunan bertingkat (3D) ketika di dalam kecemasan.
Rajah 2.7: Jalan terpendek daripada balai bomba ke tempat bencana
(Kwan et al., 2003)
Kajian ini juga menyatakan setiap bilik atau pun pejabat yang dinamakan zon
eksklusif di dalam bangunan berhubung dengan jalan pengangkutan yang kompleks
contohnya koridor. Manakala bagi setiap tingkat (aras) bangunan dihubungkan
dengan sistem pangangkutan seperti lif dan tangga (stairways). Ditambah pula,
maklumat mendatar (horizontal) dan tegak (vertical) ini (maklumat di setiap tingkat
dan hubungan antara tingkat-tingkat di dalam bangunan) dihubungkan dengan sistem
pengangkutan bawah tanah (keretapi) dan sistem pengangkutan awam (teksi, bas dan
sebagainya). Hasil kajian menunjukkan terdapat potensi untuk mewujudkan sistem
navigasi GIS 3D bagi bangunan-bangunan tersebut. Juga dicadangkan dalam kajian
ini mengenai potensi penggunaan algoritma Dijkstra dalam mencari laluan yang
sesuai bagi proses pengosongan (evacuation). Walaupun pendekatan bagi sistem ini
masih baru namun ia masih berpontensi untuk dilaksanakan dengan jayanya.
Kajian-kajian yang dibincangkan adalah berkaitan dengan usaha mewujudkan
model 3D bagi data spatial yang kebanyakannya digunakan untuk tujuan
perancangan bandar dan juga simulasi/visualisasi. Kajian seperti ini dirujuk kerana
kajian di dalam tesis ini turut menggunakan model bangunan 3D di dalam analisis
rangkaiannya. Objek spatial 3D (bangunan) di dalam persekitaran enjin komputer 3D
dibina berdasarkan pelan asal bangunan. Pendekatan kaedah “extension” tidak
digunakan kerana terdapat banyak limitasi wujud seperti limitasi maklumat koridor,
ketinggian bumbung, maklumat setiap aras dan sebagainya.
Secara rumusannya, pengkhususan bagi kajian ini adalah menjurus kepada
pengimplementasian algoritma Dijkstra ke dalam persekitaran bangunan bertingkat.
Algoritma Dijkstra pada kebiasaannya digunakan sebagai salah satu kaedah
penyelesaian laluan terpendek di dalam bidang sains komputer. Dengan
mengimplementasikan algoritma tersebut ke dalam bidang GIS dan hasil
pengiraannya digunakan di dalam persekitaran 3D, ianya dapat menambahkan lagi
kajian-kajian yang berkaitan dengan analisis permukaan 3D di dalam GIS. Sebagai
langkah permulaan, kajian ini adalah sebagai pendekatan awal kepada analisis yang
dilakukan di dalam persekitaran 3D dan juga sebagai rujukan bagi kajian-kajian
lanjutan yang berkaitan dengan tajuk penyelidikan.
BAB 3
KONSEP ALGORITMA DIJKSTRA
3.1
Pendahuluan Bab
Di dalam GIS, perwakilan bagi maklumat spatial di muka bumi sebenar
adalah terdiri daripada bentuk-bentuk geometri asas iaitu titik, garisan dan poligon
(point, line and polygon). Bagi perwakilan garisan (line), ia mewakili entiti-entiti
spatial berbentuk linear seperti jaringan jalanraya, jaringan paip air, jaringan agihan
sumber bekalan kuasa elektrik dan sebagainya. Jaringan-jaringan atau pun garisangarisan ini pula terdiri daripada sejumlah titik-titik yang bersambung (continous
point/node) yang mana titik-titik ini apabila disambungkan akan membentuk garisan
dan seterusnya sejumlah garisan tersebut pula membentuk jaringan garisan yang luas
atau pun dipanggil jaringan rangkaian.
Geometri asas bagi garisan ialah sejumlah titik-titik yang bersambung, dan
membentuk satu garisan. Perkaitan antara algoritma Dijkstra dan GIS ialah titik-titik
yang dinyatakan. Dirujuk kembali kepada definisi algoritma Dijkstra; “ it solves the
single-source shortest path problem for a directed graph with nonnegative edge
weights”, Wikipedia (2005). Directed graph dalam bidang GIS bermaksud
rangkaian. Rangkaian mengandungi sejumlah garisan dan garisan tersebut dibentuk
daripada titik-titik yang dinyatakan sebelum ini. Kegunaan algoritma Dijkstra
terletak pada kemampuannya untuk mencari jalan terpendek atau pun shortest route
di antara dua titik (nod). Carian laluan terpendek di dalam graf bagi algoritma
Dijkstra boleh diimplementasikan ke dalam GIS untuk mencari laluan yang
terpendek bagi jaringan garisan (line) yang asasnya adalah terdiri daripada titik-titik
yang bersambungan (continous node). Justeru itu, kajian dalam tesis ini ialah untuk
mengimplementasikan algoritma ini ke dalam persekitaran 3D dengan menggunakan
enjin permainan komputer untuk mencari laluan terpendek daripada satu lokasi ke
lokasi yang lain dan secara tidak langsung dapat digunakan dalam permasalahan
dunia sebenar.
3.2
Aplikasi Algoritma Dijkstra
Ramai penyelidik masih melakukan kajian untuk menggunapakai algoritma
ini. Di antaranya ialah Meijers et al. (2005), Takino (2000), Kwan et al. (2003),
Eklund et al. (1993) dan Karas et al. (2006). Kajian-kajian ini dilakukan untuk
menggunakan algoritma Dijkstra dan menyesuaikannya dengan aplikasi masingmasing yang berorientasikan sistem kecemasan (yang memerlukan pengiraan laluan
terpendek). Contohnya kajian oleh Shad et al. (1998) menyatakan bahawa pengiraan
laluan terpendek yang merupakan salah satu fungsi dalam analisis rangkaian adalah
penting bagi permasalahan pengangkutan jalanraya. Kertas kerja ini mengkaji
prestasi beberapa algoritma “shortest path” secara 2D dengan menggunakan
beberapa bahasa pengaturcaraan. Keputusan kajian menunjukkan bahawa tiada
jawapan tepat boleh dirumuskan untuk penggunaan dalam pengangkutan kerana
penggunaan algoritma bergantung kepada tahap betapa kompleksnya jaringan
rangkaian jalanraya, jumlah nod dan juga jumlah arka yang ada.
Menurut Sherlock et al. (1999), penilaian pengiraan komputer bagi analisis
laluan terpendek dalam kajiannya dibuat berdasarkan lesen perisian, masa
implementasi (masa pembinaan perisian), kos implementasi dan masa pertanyaan
untuk “shortest path” (shortest path query). Kajian analisis komperatif seperti ini
penting bagi para penyelidik GIS untuk mencari implementasi terbaik berdasarkan
keperluan komputer bagi pengiraan laluan terpendek.
Contoh kajian yang menggunakan pengiraan laluan terpendek di dalam
situasi sebenar adalah seperti Semanta et al. (2005). Beliau menilai kiraan masa
perjalanan yang diperlukan untuk ke stesen keretapi daripada rumah pengguna atau
stesen bas. Masa pengiraan di dalam kajian tersebut dilakukan berdasarkan daripada
centroids rumah pengguna/stesen bas ke stesen keretapi yang dicadangkan. Laluan
terpendek dalam permasalahan dunia sebenar adalah penting. Contohnya navigasi
kecemasan seperti navigasi ambulans, bomba dan polis yang boleh mengakibatkan
berlakunya kes-kes kehilangan nyawa, Abdul Rahman (2004). Laluan terpendek
sesuai digunakan bagi tujuan navigasi seperti navigasi kecemasan, navigasi
kenderaan mahupun navigasi persendirian (pejalan kaki) dan sebagainya.
Terdapat beberapa perisian GIS yang mampu melakukan analisis mencari
laluan yang terpendek ini. Namun begitu, maklumat mengenai algoritma yang
digunakan untuk hitungan mencari laluan terpendek ini tidak diketahui dan diuji
keberkesanannya. Ini kerana prestasi algoritma adalah berbeza-beza mengikut situasi
pengimplementasian (Shad et al., 1998). Analisis yang terdapat pada perisian GIS
boleh dilaksanakan dengan menggunakan fungsi yang disediakan bersama-sama
dengan perisian (penyediaan data digital 2D adalah mengikut keperluan sistem
perisian GIS tersebut). Hasil analisis adalah paparan maklumat mengenai jaringan
laluan terpendek daripada satu lokasi ke lokasi destinasi (sasaran) yang diwarnakan
dengan warna yang berbeza. Maklumat tersebut adalah tepat dan benar. Menurut
Sherlock et al. (1999), ArcView's Network Analyst menggunakan algoritma Dijkstra
yang telah diubahsuai dengan menggunakan kombinasi pengurusan memori
komputer dengan tujuan untuk menguruskan data rangkaian yang besar.
Bagi navigasi kecemasan, contohnya navigasi ambulans yang memerlukan
maklumat yang tepat mengenai laluan jalanraya yang hendak digunakan, beberapa
maklumat atau kriteria lain perlu diambil kira sebelum melakukan analisis laluan
terpendek. Maklumat kriteria tambahan tersebut seperti maklumat mengenai masa
minimum yang perlu diambil untuk membuat tindakan, keadaan lalu-lintas (traffic
flow), keadaan jalanraya, kedudukan lampu isyarat dan sebagainya. Namun begitu,
faktor yang paling kritikal ialah masa. Perkara yang perlu ditekankan di sini ialah
mengenai algoritma yang digunakan. Algoritma yang berlainan akan melibatkan
masa pengiraan (computation time) bagi sistem berbeza. Jika melibatkan data yang
besar, perkara atau pun faktor masa ini amat perlu dititikberatkan terutama sekali di
dalam sistem navigasi kecemasan. Oleh itu, implementasi algoritma Dijkstra dalam
persekitaran enjin 3D komputer merupakan salah satu langkah kajian awal bagi
kajian-kajian yang selanjutnya yang berkaitan dengan laluan terpendek mahupun
navigasi kecemasan.
3.3
Algoritma Laluan Optima (Optimum Path Algorithm)
Terdapat pelbagai algoritma bagi pencarian laluan optima. Antaranya ialah
seperti algoritma Dijkstra, algoritma Genetic, algoritma DKD dan sebagainya.
Namun begitu, tujuan asas bagi pengiraan di dalam algoritma-algoritma tersebut
ialah untuk mencari laluan yang terbaik bagi situasi masing-masing. Terdapat
algoritma yang bukan sahaja digunakan untuk mencari laluan yang terpendek malah
ianya juga digunakan untuk mencari laluan yang terbaik bagi kriteria yang lain.
Contohnya seperti di dalam bidang perindustrian (pengangkutan barang-barang
perindustrian), algoritma yang digunakan bukan sahaja untuk mencari laluan yang
terpendek, tetapi ia juga mengambil kira faktor kapasiti barangan yang boleh
dimuatkan di sesebuah jalanraya yang hendak digunakan. Ini kerana tidak semua
jalanraya membenarkan kenderaan-kenderaan berat melaluinya. Pada kebiasaannya
algoritma-algoritma seperti ini digunakan untuk mencari laluan yang optima.
Di dalam topik yang selanjutnya, perbincangan yang dibuat adalah mengenai
algoritma Dijkstra yang digunakan di dalam bidang-bidang yang tertentu. Di dalam
bidang yang berlainan, kaedah pengimplementasian algoritma Dijkstra adalah
berlainan. Akan tetapi kaedah pengiraan algoritma Dijkstra adalah berasaskan
kepada konsep yang sama. Bidang yang dibincangkan selanjutnya adalah mengenai
penggunaan algoritma Dijkstra di dalam bidang Teknik Penyelidikan Operasi
(Research Operational Technique) dan bidang Analisa Rangkaian (Network
Analysis).
3.3.1
Teknik Penyelidikan Operasi
Penyelidikan operasi adalah merupakan salah satu cabang daripada bidang
matematik yang menggunakan kaedah seperti permodelan matematik, statistik dan
algoritma bagi mendapatkan keputusan yang optima bagi permasalahan yang
kompleks. Penyelesaian yang optima boleh menjurus kepada pengoptimaan maksima
(keuntungan, peningkatan jalur lebar dan sebagainya) atau pengoptimaan minima
(mengurangkan risiko, perancangan yang teratur dan lain-lain) mengikut objektif
penyelidikan tersebut. Tujuan sebenar penyelidikan operasi ini adalah untuk mencari
penyelesaian matematik yang terbaik, bagi mengoptimakan prestasi sesebuah sistem.
Algoritma laluan optima seperti algoritma Dijkstra (laluan terpendek) yang
menggunakan jarak sebagai pemberat merupakan salah satu penyelidikan yang
terdapat dalam penyelidikan operasi. Berdasarkan ciri-ciri algoritma tersebut ia
merupakan kaedah mencari laluan yang optima dengan menggunakan jarak sebagai
pemberatnya.
Pencarian laluan optima memerlukan rangkaian dan pemberat bagi
pengiraannya. Jika dilihat dari definisi rangkaian (network), ia terdiri daripada set-set
nod yang dihubungkan oleh garisan lengkung (arcs). Setiap arka ini dikaitkan
dengan suatu aliran tertentu di dalamnya. Contohnya rangkaian pengangkutan.
Bandar diwakili oleh nod dan jalanraya diwakili oleh arka. Aliran pula diukur dengan
kapasiti kenderaan yang dapat menggunakan jalan-jalan berkenaan (Haron et. al.,
2004). Bagi pemberat-pemberat yang dinyatakan sebelum ini, ianya digunakan
sebagai faktor untuk menentukan laluan yang optima. Di antara contoh-contoh
pemberat adalah seperti masa, jarak, had kapasiti dan sebagainya.
Notasi piawai bagi menerangkan rangkaian ialah G. G = (N, A). N mewakili
set-set nod dan A mewakili arka (rujuk Rajah 3.1).
3
5
1
4
2
N = {1, 2, 3, 4, 5}
A = {(1,3), (1,2), (2,3), (2,4), (2,5), (3,4), (3,5), (4,5)
Rajah 3.1: Contoh rangkaian yang mengandungi
5 nod dan 8 arka.
Aliran dalam arka dihadkan oleh kapasiti - sama ada terhingga/tak terhingga.
Arka dikatakan berarah/berhaluan (directed) jika ia membenarkan aliran pada satu
arah dan aliran sifar pada arah yang bertentangan. Rangkaian berarah/berhaluan
adalah keadaan di mana semua arka adalah berarah.
Lalua n meru paka n arka yang mengh ubun gkan dua nod. Pada Raja h 3.1,
lalu an yang bole h digu naka n dari nod 1 ke nod 4 iala h lalu an 1→3, 3→2 dan
2→4. Lalua n dika taka n bole h memb entu k satu gelun g (loop /cyc le) jika ia
mengh ubun gkan nod denga n diri nya send iri. Cont oh pada Raja h 3.1, arka 3→2,
4→3 dan 2→4 memb entu k gelun g. Gelu ng berar ah (dire cted loop /cir cuit ) pula
adal ah gelun g di man a semu a arka memp unyai arah yang sama .
Rangkaian bersambung (connected) adalah rangkaian di mana setiap dua nod
yang berasingan dihubungkan oleh suatu laluan arka (Rajah 3.1). Rangkaian
bersambung melibatkan hanya beberapa nod-nod yang ada manakala rangkaian
bersambung (merentang) terdiri dari semua nod dalam rangkaian tetapi tidak
mempunyai gelung. Rajah 3.2 menunjukkan contoh pohon rangkaian bersambung
dan Rajah 3.3 menunjukkan rangkaian bersambung (merentang) bagi sesebuah
rangkaian.
3
1
4
2
Rajah 3.2: Rangkaian bersambung
3
5
1
4
2
Rajah 3.3: Rangkaian bersambung (Merentang)
Model-model rangkaian boleh digunakan untuk menganalisis banyak jenis
masalah keputusan. Banyak masalah pengurusan yang praktikal adalah terlalu
kompleks/rumit dan ianya memerlukan penyelesaian dengan menggunakan kaedah
grafik. Selanjutnya penerangan akan menyentuh penggunaan model rangkaian dalam
masalah pengoptimaan bagi masalah laluan terpendek.
3.3.1.1 Masalah Laluan Terpendek
Masalah laluan yang terpendek adalah permasalahan bagi menentukan arka
yang dihubungkan dalam rangkaian yang menghasilkan jarak terpendek antara nod
sumber ke nod destinasi. Terdapat 2 algoritma yang boleh digunakan iaitu Acyclic
Algorithm dan Cyclic Algorithm (bergantung kepada situasi).
3.3.1.1.1
Acyclic Algori thm
Berdasa rkan kepada pengira an secara rekurs if iaitu pengira an yang
menggun akan rumus/ kaedah yang sama secara berula ng-ulang bagi mendap atkan
jawapan , di→j mewaki li jarak antara nod i ke nod j. Manakal a uj mewaki li jarak
terpen dek antara nod j dengan nod sebelu mnya.
Anggap nod pertam a (sumbe r) mempun yai nilai u1 bersam aan dengan 0.
Nilai u j, bagi u 1, u 2 , u3 , . . . ., un dikira secara rekurs if dengan menggunakan
rumus beriku t u j = min i { u 1 + d i→ j }.
Setiap nod dilabe lkan dengan {u j , n}. n mewaki li nod yang mendah ului
(nod selepa s) dan j ialah jarak yang terpen dek. Oleh itu u j bersam aan dengan u j =
min i {u i, d i→j } = un + d n→j .
Nod pertam a (sumbe r) dilabe lkan sebagai [0, -] untuk menand akan ianya
adalah nod sumber . Algorit ma ini menghas ilkan jarak terpen dek antara nod
sumber dengan nod lain dalam rangkai an. Rajah 3.4 menunj ukkan rangkai an
antara bandar-bandar yang diwaki li oleh nod-nod dan dihubu ngkan oleh arka
(jalan raya/leb uhraya).
2
5
2
5
6
1
11
7
8
4
4
3
3
9
7
1
6
Rajah 3.4: Contoh rangkaian yang mewakili kedudukan bandar
Jika nod 1 diangga p sebagai nod sumber dan nod 7 adalah nod destin asi
atau nod yang dituju , pengira an lalua n yang terpen dek boleh dilaku kan dengan
kaedah sepert i beriku t:
Labelkan nod 1 [0, - ] iaitu nod sumber/pertama.
1) u1 = 0,
labelkan [0,-] pada nod 1
Pengiraan untuk nod 2,
2) u2 = u1 + d1→2 = 0 + 2 = 2,
labelkan [2, 1 ] pada nod 2
Pengiraan untuk nod 3,
3) u3 = u1 + d1→3 = 0 + 4 = 4,
labelkan [4, 1 ] pada nod 3
Pengiraan untuk nod 4,
4) u4 = min {u2 + d2→4, u3 + d3→4,}
= min {2+11, 4+3}
= min {13, 7} = 7,
Pengiraan untuk nod 5,
labelkan [7,3] pada nod 4
5) u5 = min {u2 + d2→5, u4 + d4→5}
= min {2+5, 7+8}
= min (7,15) = 7,
labelkan [7,2] pada nod 5
Pengiraan untuk nod 6,
6) u6 = min {u3 + d3→6, u4 + d4→6}
= min {4+1, 7+7}
= min {5,14} =5,
labelkan [5,3] pada nod 6
Pengiraan untuk nod 7,
7) u7 = min {u5 + d5→7, u6+d6→7}
= min {7+6, 5+9}
= min {13,14} = 13,
labelkan [13,5] pada nod 7
[2,1]
[0,-]
[7,2]
5
2
2
5
6
[13,5]
1
11
4
4
3
3
[4,1]
7
8
[7,3]
9
7
1
6
[5,3]
Rajah 3.5: Laluan terpendek daripada nod 1 ke nod 7
Setelah selesai, setiap nod dilabelkan berdasarkan kiraan yang dibuat bagi
mencari laluan yang terpendek (Rajah 3.5). Oleh itu, berdasarkan rangkaian pada
Rajah 3.5, laluan terpendek daripada nod 1 (nod sumber) ke nod 7 (nod destinasi)
ialah dengan menggunakan laluan (1) - (2) - (5) - (7).
3.3.1.1.2
Cyclic (Dijkstra's) Algorithm
Algoritma Cyclic juga dikenali sebagai algoritma Dijkstra. Algoritma tersebut
digunakan bagi rangkaian yang mempunyai gelung (cycle/loop). la membenarkan
perubahan dilakukan (nod) dan pengiraan semula jarak terpendek bagi setiap nod.
Proses pengiraan diteruskan sehingga jarak terpendek ke nod destinasi (akhir) dikira.
Ciri-ciri utamanya ialah jika jarak terpendek bagi sesuatu nod telah ditemui, barulah
nod tersebut dikeluarkan dari pengiraan. Algoritma ini menggunakan dua jenis teknik
perlabelan iaitu perlabelan sementara (temporary) dan perlabelan kekal (permanent).
Rajah 3.6 menunjukkan contoh jaringan rangkaian yang digunakan bagi pengiraan
algoritma.
Rajah 3.6: Contoh rangkaian bagi pengiraan algoritma Cyclic
1)
Pengiraan dimulakan dengan nod 1, nod pertama mesti dilabelkan sebagai
kekal [0, - ]
2)
Nod yang berhubung dengan nod 1 ialah nod 2 dan nod 3. Pengiraan
dijalankan pada kedua-dua nod tersebut.
Nod 2
Nod 3
[0+100, 1 ]
[0+30, 1 ]
[100,1]
[30, 1 ]
Min {100,30} = 30,
Nod 3 mempunyai jarak terpendek d=30.
Nod 3 dilabelkan kekal (permanent) dan nod 2 dilabelkan sebagai sementara
(temporary).
3)
Nod terakhir dilabelkan kekal (nod 3). Nod yang berhubung dengan nod 3
ialah nod 4 dan nod 5.
Nod 4
Nod 5
[30+10, 3]
[30+60, 3]
[40, 3]
[90, 3]
Nod yang dilabelkan sebagai sementara dipertimbangkan bersama-sama nod
4 dan nod 5.
Nod 2 [100,1], nod 4 [40,3], nod 5 [90,3]
Min {100, 40, 90}.
Nod 4 mempunyai jarak (d) yang terpendek. Oleh itu nod 4 dilabelkan kekal
(nod 5 dilabelkan sementara).
4)
Nod yang berhubung dengan nod 4 ialah nod 2 dan 5.
Nod 2
Nod 5
[40+15. 4]
[40+50,4]
[55, 4]
[90, 4]
Nod 2 mempunyai jarak (d) yang terpendek. Gantikan label nod 2, dengan
label kekal.
5)
Hanya tinggal nod 5. Labelkan kekal. Kiraan tamat dan hasil pengiraan
adalah seperti pada Rajah 3.7.
[55,4]*
[100,1]
[40,3]*
[0,-]*
6
[90,3]*
[90,4]*
[30,1]*
Rajah 3.7: Hasil pengiraan algoritma Cyclic
3.3.2
Analisa Rangkaian (Network Analysis)
Terdapat perbezaan implementasi algoritma Dijkstra dalam bidang Analisa
Rangkaian. Namun begitu, asas pengiraan bagi algoritma Dijkstra untuk kedua-dua
bidang (Teknik Penyelidikan Operasi dan Analisia Rangkaian) adalah sama.
Perbezaannya adalah dari segi pendekatan yang digunakan.
Kajian di dalam tesis ini membuat pengkhususan terhadap analisa rangkaian
di dalam persekitaran 3D. Prosidur dan pengiraan bagi algoritma Dijkstra untuk
tujuan kajian tesis ini akan berdasarkan pengimplementasian algoritma Dijkstra di
dalam bidang analisa rangkaian ini.
Rajah 3.8 merupakan contoh rangkaian dan seterusnya adalah kaedah
penyelesaian algoritma Dijkstra bagi mencari laluan yang terpendek daripada nod
sumber (Nod 1) ke nod destinasi (Nod 5).
Rajah 3.8: Contoh rangkaian bagi pengiraan algoritma Dijkstra
Terdapat Iteration bagi prosidur yang dibuat. Bagi setiap prosidur pula
mengandungi kaedah Step 1 dan Step 2. Teknik perlabelan bagi nod sebagai
Temporary dan juga Permanent adalah sama seperti perbincangan sebelum ini.
Berikut ialah contoh pengiraan bagi rangkaian pada Rajah 3.8.
Iteration 1
Step 1
P = {1}
T = {2, 3, 4, 5}
L (1) = 0
L (2) = 100
L (3) = 30
* label kekal
L (4) = ∞
L (5) = ∞
P mewakili label Permanent dan L (n) di bawah simbol P adalah jarak bagi
nod n yang telah dilabelkan sebagai Permanent. T mewakili label Temporary dan L
(n) di bawah label T adalah jarak bagi nod n (temporary) dengan nod yang
Permanent. L (3) mempunyai nilai jarak yang terkecil, ia dipilih dan dilabelkan
sebagai kekal. Simbol infiniti (∞) digunakan untuk menandakan bahawa nod tersebut
tidak bersambung dengan nod 1.
Step 2
P = {1, 3}
T = {2, 4, 5}
L (1) = 0
L (2) = min {100, L (3) + ∞}
L (3) = 30
= min {100, ∞}
= 100
L (4) = min {∞, L (3) + d3→4 }
= min {∞, 30 + 10}
= min {∞, 40}
= 40
* label kekal
L (5) = min {∞, L (3) + d3→5 }
= min {∞, 30 + 60}
= 90
Nod 3 dimasukkan di dalam pengelasan P. Nod 2, nod 4 dan nod 5 yang
dibawah pengelasan T dibandingkan jaraknya dengan Nod 3. Jarak pada Step 1 juga
dibandingkan bersama dengan jarak tersebut untuk mencari jarak yang minima. Nod
4 dipilih kerana nod tersebut mempunyai nilai jarak yang terkecil. Seterusnya
pengiraan di dalam Iteration 2.
Iteration 2
Step 1
P = {1, 3, 4}
T = {2, 5}
L (1) = 0
L (2) = min {100, L (4) + d4→2}
L (3) = 30
= min {100, 40 + 15}
L (4) = 40
= 55
* label kekal
L (5) = min {90, L (4) + d4→5}
= min {90, 90 }
= 90
Step 2
P = {1, 3, 4, 2}
T = {5}
L (1) = 0
L (5) = min {90, L (2) + d2→5}
L (3) = 30
= min {90, 55 + ∞}
L (4) = 40
= 90
*label kekal
L (2) = 55
Apabila nod yang dilabelkan kekal ialah nod destinasi (Nod 5) maka
pengiraan bagi algoritma Dijkstra akan dihentikan. Oleh itu, laluan yang terpendek
bagi laluan dari Nod 1 ke Nod 5 ialah:
P = {1→ 3→4→2→5}
Daripada maklumat ini, kesemua nod yang telah dilabelkan sebagai
Permanent (P) dimasukkan ke dalam rajah pepohon yang dipanggil Spanning Tree.
Spanning Tree bagi permasalahan yang diberikan ialah seperti berikut (Rajah 3.9):
15
2
4
50
1
10
30
5
3
Rajah 3.9: Spanning Tree
3.4
Perincian Prosidur Algoritma Dijkstra
Topik ini membincangkan mengenai cara kerja algoritma ini dengan lebih
terperinci dengan berdasarkan contoh rangkaian pada Rajah 3.10.
38
15
26
2
20
1
5
4
40
47
25
45
3
18
7
6
Rajah 3.10: Contoh rangkaian yang mengandungi 7 nod dan juga 9 arka
Bulatan yang terdapat nombor di dalamnya mewakili nod (vertices) di dalam
rangkaian. Anak panah pula merupakan arah laluan (perhubungan antara nod) dan
nombor yang terdapat pada atas anak panah tersebut merupakan jarak antara nod
(pemberat). Karekteristik bagi algoritma Dijkstra ialah ia membenarkan rangkaian
yang digunakan untuk mempunyai gelung (loop/cycle). Sesetengah algoritma
pencarian laluan yang terbaik atau optima tidak membenarkan rangkaian mempunyai
gelung. Contoh rangkaian yang diberikan di dalam Rajah 3.10 mempunyai tujuh nod,
sembilan arah (arcs) dan juga jarak masing-masing. Rangkaian ini juga mengandungi
gelung. Algoritma Dijkstra menggunakan dua teknik perlabelan iaitu teknik
perlabelan temporary dan permanent. Ia menggunakan format [n, d] yang mana d
mewakili jarak dan n mewakili nod selepas (predecessor node).
Bagi Rajah 3.10, andaikan pengiraan dibuat bagi mencari laluan yang
terpendek daripada nod 1 ke nod 6, ini bermakna nod sumber ialah nod 1 dan nod
destinasi ialah nod 6. sebelum pengiraan ini dimulakan, algoritma ini akan
meletakkan atau pun melabelkan kesemua nod sebagai sementara (Temporary). Oleh
itu bagi permulaan pengiraan, nod 1 akan dijadikan nod permulaan (nod sumber) dan
secara automatik akan dilabelkan sebagai kekal (Permanent) dan ditanda (label)
sebagai [-, 0]. Pengiraan bagi jarak (d) adalah 0 dan tiada nilai bagi nod sebelum (n)
oleh kerana ia merupakan nod yang pertama. Selepas nod sumber atau pun nod 1
dilabelkan sebagai permanent, pengiraan diteruskan dengan mencari nod yang
berhubung dengan nod 1. Di dalam situasi ini, nod selepas nod 1 ialah nod 2 dan nod
3. pemilihan seterusnya dibuat antara nod 2 dan nod 3 dengan memilih nod yang
mempunyai jarak terpendek antara nod 1 dan nod tersebut. Jarak (d) dikira daripada
proses penambahan nilai d bagi nod 1 dan juga jarak (yang terdapat pada anak
panah) antara nod terlibat. Bagi nod 2 (d = 0 + 15 = 15) dan nod 3 (d = 0 + 40 = 40).
Oleh itu bagi kes ini, jarak yang terpendek ialah jarak antara nod 1 dan nod 2 (d =
15). Nod 2 akan dilabelkan sebagai permanent [1, 15] dan nod 3 akan masih
dilabelkan sebagai temporary.
Seterusnya, nod yang akan diambil untuk dilakukan pengiraan ialah nod yang
terakhir sekali dilabelkan sebagai permanent (nod 2). Langkah yang sama juga
dijalankan, mencari nod selepas (berhubung) nod 2, bagi contoh yang diberikan
maka tiada nod selepas daripada nod 2 dan dengan itu pengiraan akan dibuat pada
nod yang dilabelkan sebagai temporary dan mempuyai nilai d yang terpendek. Maka
dengan ini nod tersebut ialah nod 3 dengan d = 40. Oleh kerana tiada nod lagi yang
boleh dibandingkan dengan nod 3 untuk mencari jalan yang terpendek dari segi
jaraknya, maka nod 3 akan dilabelkan sebagai permanent [1, 40]. Langkah
seterusnya adalah seperti sebelum ini, mula dengan nod yang terakhir dilabelkan
dengan permanent (nod 3) dan mencari nod selepas nod tersebut. Nod 3 dihubungkan
dengan nod 4 dan 5. Dengan itu jarak antara nod tersebut dikira. Jarak untuk ke nod
4 ialah 40 + 20 = 60 dan jarak untuk ke nod 5 ialah 40 + 47 = 87 (perhatikan bahawa
nilai 40 diambil daripada nilai jarak antara nod 1 dan nod 3). Nilai yang kecil
menunjukkan jarak yang pendek antara nod-nod tersebut, oleh itu nod 4 akan
dilabelkan sebagai permanent [3, 60] dan nod 5 akan dibiarkan sebagai temporary.
Algoritma ini diteruskan dengan mencari nod selepas nod 4 iaitu nod 5. Nilai
d dikira (d = 60 + 26 = 86). Nilai d ini dibandingkan dengan nod lain yang dilabelkan
sebagai temporary. Nilai d yang dibandingkan di sini ialah nilai d antara nod 3 ke
nod 5 dan nilai d nod 4 dan nod 5. Nilai d (3→5) = 87 dan d (4→5) = 86. Nilai 86
adalah lebih kecil (terpendek), maka nod 5 akan dilabelkan sebagai permanent [4,
86]. Setakat ini nod yang masih dilabelkan sebagai temporary ialah nod 6 dan 7.
Pengiraan masih lagi diteruskan, nod selepas nod 5 ialah nod 6 dan nod 7. Nilai d
ialah d (5 – 6) = 131 dan d (5 – 7) = 111. Maka dengan ini nod 7 dilabelkan sebagai
permanent [5, 111] dan nod 6 masih dilabelkan sebagai temporary. Nod yang
terakhir sekali dilabelkan sebagai permanent, nod 7, nilai d bagi nod selepasnya (nod
6) dikira dan dibandingkan dengan nod yang dilabelkan sebagai temporary yang
mempunyai nilai d. Oleh itu, nilai d (7→6) = 129, dibandingkan dengan d (5→6) =
131 dan nilai d yang terpendek ialah nilai jarak antara nod 7 dan nod 6. Akhir sekali
nod 6 akan dilabelkan sebagai permanent [7, 129].
Maka dalam permasalahan ini, pengiraan algoritma dihentikan dan spanning
tree dihasilkan. Spanning tree adalah rangkaian yang tidak mempunyai gelung.
Daripada contoh rangkaian yang digunakan (Rajah 3.10), pengiraan menghasilkan
sebuah spanning tree yang tidak mempunyai gelung bagi rangkaian tersebut. Rajah
3.11 menunjukkan hasil akhir pengiraan di dalam bentuk spanning tree.
[1, 15]
[3, 87]
[4, 86]
[3, 60]
26
15
2
20
1
5
4
47
25
40
[0, -]
3
[1, 40]
[1, 40]
[5, 131]
[7, 129]
18
7
[5, 111]
6
* Italic mewakili label temporary
* Bold mewakili label permanent
Rajah 3.11: Hasil akhir pengiraan algoritma Dijkstra dalam bentuk Spanning Tree
Gambarajah Spanning Tree di dalam kes ini menunjukkan jarak yang
terpendek antara nod 1 dengan kesemua nod yang lain. Oleh itu, penyelesaian dalam
mencari laluan yang terpendek daripada nod 1 ke nod 6 ialah laluan nod 1→nod
3→nod 4→nod 5→nod 7→nod 6.
3.5
Pengimplementasian Algoritma Dijkstra Di Dalam Persekitaran 3D
Kriteria pertama bagi data jaringan yang hendak digunakan di dalam
algoritma Dijkstra ialah kesemua nilai titik/nod (points) bagi rangkaian yang hendak
digunakan perlulah bernilai positif. Pengiraan algoritma tidak boleh dilakukan pada
nod yang mempunyai x, y atau z yang bernilai negatif. “If the length function is
nonnegative, Dijkstra’s algorithms scan each node exactly once” (Cherkassy et al.,
1991). Bagi membolehkan algoritma ini diguna pakai di dalam GIS, nilai kesemua
titik (koordinat) perlu diletakkan di dalam nilai yang positif terlebih dahulu.
Sesetengah data spatial GIS bernilai negative kerana ianya bergantung pada projeksi
peta. Oleh itu, sebelum melakukan pengimplementasian algoritma ini, data spatial
GIS (rangkaian 3D) perlu disetkan nilai ke nilai yang positif. Ini dapat dilakukan
dengan menganjakkan nilai origin bagi data spatial tersebut kepada nilai origin yang
baru untuk menjadikan nilai x, y dan z bagi kesemua titik menjadi nilai yang positif.
Perbezaan nilai x, y dan z antara origin asal dengan origin baru (anjakkan) iaitu ∂x,
∂y dan ∂z dikira supaya hasil akhir pengiraan algoritma Dijkstra boleh ditambah atau
tolak dengan nilai perbezaan ini. Maka hasil akhir nanti akan memaparkan nilai
koordinat yang sebenar.
Algoritma Dijkstra membenarkan data rangkaian yang digunakan mempunyai
gelung (cyclic/loop). Sesetengah algoritma lain tidak membenarkan data rangkaian
yang digunakan mempunyai gelung. Ini memberikan kelebihan kepada penggunaan
algoritma Dijkstra kerana data GIS memang wujud rangkaian yang mempunyai
gelung.
Algoritma Dijkstra memerlukan maklumat nama nod atau pun nombor bagi
setiap nod. Nama atau pun nombor tersebut adalah ID kepada nod tersebut.
Maklumat lain yang diperlukan adalah jarak antara nod-nod yang ada. Selain itu,
maklumat yang penting dalam pengiraan algoritma Dijkstra ialah maklumat nod
sebelum (predecessor) dan nod selepas (successor) bagi setiap nod. Ini adalah
maklumat asas bagi keperluan algoritma Dijkstra.
Dari aspek GIS, ID yang diperlukan boleh dihasilkan semasa proses
mengekstrak koordinat pada rangkaian 3D tersebut. Dengan meletakkan ID bagi
setiap maklumat x, y dan z, maka salah satu keperluan atau pun kehendak algoritma
Dijkstra telah dipenuhi. Berdasarkan daripada struktur data jaringan yang dibina
dengan menggunakan perisian Computer Aided Design (CAD), ID bagi setiap nod
boleh dimasukkan berdasarkan koordinat x, y dan z yang telah disimpan.
Sebelum melakukan pengiraan jarak antara nod-nod yang ada, maklumat nod
sebelum dan nod selepas merupakan kriteria kedua bagi algoritma Dijkstra. Ini
kerana pengiraan jarak hanya perlu dilakukan terhadap nod-nod yang berhubung
sahaja dan bukannya jarak antara satu nod dengan kesemua nod yang ada di dalam
rangkaian. Sebagai contoh, jika nod 1 berhubung dengan nod 2, maka pengiraan
jarak antara nod hanya dilakukan antara nod 1 dan nod 2 dan bukannya dengan
kesemua nod yang ada. Oleh itu, maklumat nod sebelum (predecessor) dan nod
selepas (successor) bagi setiap nod adalah penting. Maklumat tersebut perlu
disediakan supaya aplikasi dapat memahami nod-nod tersebut sebelum melakukan
pengiraan jarak.
Bagi mendapatkan maklumat predecessor dan successor, data rangkaian yang
digunakan perlu dikaji. Sebagai contoh, data rangkaian yang dibina menggunakan
perisian aplikasi CAD mempunyai format tersendiri untuk disimpan dalam data
rangkaian tersebut. Data tersebut disimpan dengan menggunakan cara yang teratur
dan menggunakan teknik baris (sequential). Ini bermakna garisan rangkaian yang
berhubung disimpan dalam sequence yang teratur. Sebagai contoh, jika garisan A
bermula dengan nod 1 dan diakhiri dengan nod 5, maka data CAD yang disimpan
mempunyai sequence untuk menyatakan garisan A adalah terdiri daripada nod 1, nod
2, nod 3 dan seterusnya sehingga nod 5. Oleh itu, kajian perlu dilakukan untuk
melihat bagaimana data tersebut di simpan, data yang patut digunakan dan data yang
tidak diperlukan sebelum melakukan analisis algoritma Dijkstra. Dengan cara ini,
penentuan bagi nod mana yang bersambung atau pun tidak dapat ditentukan dengan
mudah dan cepat. Dengan itu, maklumat nod sebelum dan nod selepas dapat
digunakan untuk pengiraan jarak antara nod pada proses yang seterusnya.
Bagi pengiraan jarak antara nod yang berhubungan, agak mudah untuk dikira
kerana proses pengekstrakkan koordinat daripada data rangkaian telah dilakukan
terlebih dahulu. Tambahan pula maklumat nod sebelum dan nod selepas telah
diketahui. Dengan menggunakan formula matematik pengiraan jarak berdasarkan 3
paksi (x, y dan z), pengiraaan jarak tersebut dapat dilakukan.
Rumus matematik yang digunakan di sini ialah Theorem Pythagoras. Bagi
kes ini, ia membabitkan koordinat 3D. Maka formula matematik tersebut boleh
diterbitkan daripada situasi seperti yang ditunjukkan pada Rajah 3.12.
Nod B
(x2 , y2, z2 )
D
∂Z
h
z
∂Y
Nod A
y
∂X
(x1 , y1, z1 )
x
Rajah 3.12: Perbezaan kedudukan nod A (x 1, y1, z1) dan nod B (x2 , y2, z 2)
Delta (∂
) x, y dan z bagi nod A dan B dikira dengan mengira perbezaan nilai
koordinat antara nod tersebut. Sebagai contoh:
∂X = (x2 – x1 ) ;
∂Y = (y2 – y1) ;
∂Z = (z2 – z 1)
Kemudian jarak (D) yang hendak dicari ialah:
D = √(h2 + ∂Z2) …………………. Persamaan 1
Nilai h dapat dikira dengan langkah berikut:
h = √(∂X2 + ∂
Y2) ………………..Persamaan 2
Dengan menggabungkan persamaan 1 dan persamaan 2, persamaan yang dapat
dihasilkan ialah untuk mencari nilai jarak (D) antara dua nod ialah:
D = √[(∂X2 + ∂Y2) + ∂
Z 2]
Atau
D = √[(x2 – x1)2 + (y2 – y1)2 + (z2 – z1)2 ]
Setelah kesemua maklumat seperti ID setiap nod, maklumat nod sebelum
(predecessor) dan nod selepas (successor) bagi setiap nod di dalam rangkaian dan
jarak antara nod diperolehi, maka pengiraan dalam algoritma Dijkstra dapat
dijalankan sepertimana pengimplementasiannya terhadap data rangkaian 2D.
Kelebihannya ialah, keperluan yang diperlukan oleh algoritma Dijkstra ada di dalam
data yang diguna pakai oleh GIS.
BAB 4
REKA BENTUK SISTEM NAVIGASI
4.1
Pembangunan Analisis Rangkaian 3 Dimensi
Berdasarkan kajian-kajian yang terdahulu, implementasi analisis rangkaian
digunakan dalam sistem yang dibangunkan khusus untuk situasi permasalahan
tertentu. Ini bertujuan supaya analisis tersebut dapat diguna pakai untuk melihat
keberkesannya seperti pencarian laluan yang optimum. Bagi kajian ini, untuk
mewujudkan satu analisis rangkaian 3D, analisis tersebut perlu digunakan di dalam
satu sistem. Merujuk kepada metodologi kajian, hasil akhir yang dijangkakan ialah
pemberian maklumat kepada pengguna mengenai laluan yang terbaik (shortest path)
dalam persekitaran 3D. Oleh itu, satu aplikasi ringkas dibangunkan bagi tujuan untuk
memaparkan hasil analisa rangkaian yang dibina. Aplikasi ini digunakan hanya untuk
memaparkan hasil pengiraan analisis rangkaian yang dibangunkan dalam kajian ini.
Pembangunan analisis rangkaian bagi aplikasi yang dibina melalui tiga fasa
utama. Fasa-fasa tersebut ialah fasa Permulaan, fasa Pembangunan, dan juga Fasa
Implementasi. Setiap pembangunan sistem maklumat perlu melalui fasa-fasa yang
terlibat untuk menghasilkan satu sistem maklumat yang terbaik (Alter, 2002). Rajah
4.1 menunjukkan carta alir fasa-fasa yang dinyatakan:
Fasa Permulaan
Penyataan masalah dan bagaimana
ia dapat membantu
Perubahan tujuan, skop
dan jadual pembangunan
Fasa Pembangunan
Pengubahsuaian dilakukan
sebelum implementasi
Prosidur dan program yang
dijalankan di komputer
Fasa Implementasi
Rajah 4.1: Carta alir menunjukkan hasil bagi setiap dua fasa yang pertama bagi
sesebuah sistem maklumat. Teks yang ditunjukkan dalam Italics merujuk kepada
pengembalian ke fasa yang sebelumnya hanya jika perlu sahaja (Sumber: Alter,
2002).
4.2
Fasa Permulaan
Fasa Permulaan secara ringkasnya di dalam kajian ini adalah untuk
menetapkan tujuan dan objektif termasuk matlamat analisis yang hendak
dibangunkan. Tujuan utama aplikasi yang bakal dibangunkan adalah untuk
membenarkan analisis rangkaian terhadap rangkaian 3 dimensi yang dikira,
dipaparkan bersama-sama objek spatial 3 dimensi serta tekstur sebenar bagi objek
spatial tersebut. Kajian yang terperinci mengenai algoritma Dijkstra yang digunakan
pada analisa rangkaian tersebut adalah perlu dan penting. Kajian mengenai algoritma
bagi analisis rangkaian di dalam kajian ini telah diterangkan di dalam Bab 3 iaitu bab
Konsep Algoritma Dijkstra.
4.3
Fasa Pembangunan
Fasa Pembangunan merupakan fasa untuk mengkonfigurasi perkakasan,
perisian dan juga sumber-sumber lain yang berkaitan untuk membina analisis yang
dirancang. Fasa ini bermula dengan menentukan secara tepat bagaimana aplikasi
akan beroperasi. Jika perkakasan dan perisian yang diperlukan tiada, maka perhatian
perlu diberikan terhadap pembelian perkakasan, perisian dan juga sumber-sumber
yang berkaitan sebelum memulakan proses pembinaan analisis tersebut. Matlamat
utama fasa ini secara umumnya adalah untuk memastikan bahawa sistem kerja dan
analisis
yang
dibuat
benar-benar
memenuhi
kehendak
pengguna
dalam
menyelesaikan permasalahan yang ada. Namun begitu, secara khususnya matlamat
fasa ini adalah untuk memaparkan maklumat hasil daripada pengiraan algoritma
Dijkstra secara grafikal di dalam persekitaran objek spatial 3D. Rajah 4.2
menunjukkan aktiviti-aktiviti di dalam Fasa Pembangunan. Penerangan bagi setiap
aktiviti yang ada akan dibuat selanjutnya.
FASA
PERMULAAN
Spesifikasi
Fungsi
FASA PEMBANGUNAN
Kajian
Keperluan
Spesifikasi luaran untuk
menerangkan kepada pengguna
bagaimana aplikasi berfungsi
Reka bentuk
Dalaman
Spesifikasi
dalaman bagi
struktur teknikal
aplikasi
Perkakasan
Komputer
Model
Bangunan 3D
Pengaturcaraan
Debugged
programs
Jaringan
Rangkaian 3D
Perkakasan
berfungsi
Data spatial dan
bukan spatial sedia
untuk digunakan
Pengujian
Sistem yang
berfungsi mengikut
spesifikasi yang
ditetapkan
FASA IMPLEMENTASI
Rajah 4.2: Fasa Pembangunan dan aktiviti-aktiviti yang berkaitan dengannya
4.3.1
Kajian Keperluan
Langkah pertama di dalam fasa pembangunan ialah kajian keperluan. Aktiviti
tersebut menghasilkan satu deskripsi bagaimana aplikasi tersebut akan berfungsi
berdasarkan pengguna (user –oriented).
Analisis kepenggunaan ringkas dibuat untuk mengetahui bagaimana
pengguna melakukan navigasi di dalam sesebuah bangunan secara umum dan
navigasi di dalam bangunan kawasan kajian secara khasnya. Pada lazimnya, navigasi
yang dilakukan di dalam sesebuah bangunan adalah berdasarkan daripada lokasi
semasa ke lokasi destinasi atau pun lokasi yang hendak dituju di dalam sesebuah
bangunan tersebut. Bagi kawasan bangunan kajian, Fakulti Kejuruteraan dan Sains
Geoinformasi (FKSG) terbahagi kepada beberapa blok iaitu blok C02, C03, C04,
C05 dan C06. Bilangan (penamaan) aras bagi setiap blok pula adalah berbeza.
Sebagai contoh, aras 2 bagi blok C03 adalah bersamaan dengan aras aras 3 blok C05.
Ini berlaku akibat kedudukan bangunan yang unik dan berada di atas kawasan
bercerun menyebabkan binaan bangunan agak berbeza di antara blok-blok yang
terlibat. Secara amnya boleh dirumuskan bahawa bangunan kawasan kajian
mempunyai empat aras kesemuanya.
Secara kesimpulannya, pengguna akan memilih nama staf/bilik/makmal/bilik
kuliah sebagai kata kunci untuk ke lokasi yang hendak dituju di dalam bangunan
tersebut sebelum melakukan navigasi. Selain itu, pengguna menggunakan nombor
blok dan aras yang hendak dituju sebagai kata kunci. Terdapat pengguna yang
menggunakan nombor rujukan bilik atau pun pejabat. Akan tetapi penggunaan
nombor ini agak terhad dan juga terdapat limitasi-limitasi tertentu. Pengguna lebih
gemar menggunakan nama lokasi yang hendak dituju. Namun begitu, di dalam
situasi pengguna ini, pengalaman mengenai bangunan FKSG adalah perlu sebelum
melakukan sebarang navigasi. Ini kerana dengan adanya pengalaman atau pun tunjuk
arah, navigasi di dalam bangunan FKSG dapat dilakukan dengan efisyen dan juga
tanpa membuang masa atau pun membazirkan tenaga untuk ke lokasi yang hendak
dituju. Pengguna perlu mempunyai sedikit maklumat atau pun informasi mengenai
lokasi yang hendak dituju di dalam bangunan sebelum melakukan navigasi.
Maklumat yang perlu dan selalunya digunakan pengguna dapat dikategorikan
sebagai:
Nama: Nama bagi staf, nama bilik, nama makmal atau pun nama bilik kuliah
Nombor: Nombor rujukan yang ada pada setiap bilik
Aras dan Blok: Aras dan blok yang hendak dituju.
Bagi menghasilkan analisis dalam kajian, maklumat utama yang diperlukan
pengguna perlu ada di dalam aplikasi bagi memudahkan pengguna untuk melakukan
navigasi. Oleh itu, maklumat tersebut (Nama, Nombor, Aras dan Blok) perlu
dimasukkan di dalam aplikasi tersebut untuk membenarkan pengguna menentukan
lokasi yang hendak dituju di dalam bangunan kawasan kajian. Spesifikasi luaran
yang dibuat ialah pengguna perlu memasukkan nilai-nilai atau pun maklumat lokasi
semasa dan lokasi destinasi (setiap kali pengguna menggunakan aplikasi). Ini
bertujuan supaya aplikasi dapat melakukan pengiraan analisa rangkaian dan
memaparkannya secara grafikal 3D kepada pengguna aplikasi. Dengan menggunakan
analisis dalam aplikasi ini, pengguna tidak perlu lagi mempunyai pengalaman
navigasi terdahulu mengenai bangunan FKSG sebelum melakukan navigasi.
4.3.2
Reka Bentuk Dalaman
Keunikan reka bentuk aplikasi yang dibuat ialah ia membenarkan pengguna
memasukkan data spatial dan bukan spatial yang dimiliki oleh pengguna. Pengguna
aplikasi mampu untuk mengubah data yang hendak digunakan dengan melakukan
pengubahsuaian pada pangkalan data aplikasi (menu khas untuk pengguna aplikasi).
Dengan ini pengguna boleh menggunakan sebarang data spatial (persekitaran 3D)
dan bukan spatial (jaringan rangkaian 3D) bagi kawasan yang berbeza tidak kira
samada kawasan berskala kecil atau besar. Rajah 4.3 merupakan carta alir ringkas
aplikasi.
Model 3D
Rangkaian 3D
Input
Aplikasi Utama
Proses
Paparan Laluan Terpendek di
dalam Persekitaran 3D
Output
Rajah 4.3: Carta alir ringkas aplikasi yang direka bentuk
Hasil daripada pengiraan algoritma hanya berbentuk numerical sahaja. Oleh
itu, untuk memaparkan hasil kiraan di dalam persekitaran 3D, maka satu sistem
navigasi perlu dibangunkan mengikut kehendak pengguna bagi memaparkan hasil
kajian secara teratur. Ini kerana paparan secara grafikal adalah lebih mudah untuk
difahami berbanding dengan maklumat numerical sahaja. Aplikasi di dalam kajian
ini terdiri daripada beberapa komponen yang saling berhubungkait dalam paparan
hasil kiraan algoritma. Rajah 4.4 merupakan peringkat reka bentuk paparan antara
muka. Berikut adalah lakaran kasar mengenai antara muka yang bakal dibina.
A
C
B
Rajah 4.4: Lakaran kasar paparan antara muka bagi navigasi
Bagi A, ia merupakan paparan Header utama bagi aplikasi. Manakala bagi B
pula ialah ruangan paparan utama bagi aplikasi, setiap fungsi-fungsi yang dibina
akan dipaparkan di paparan utama. C merupakan hotspot bagi pengguna untuk
memilih fungsi-fungsi yang disediakan. Fungsi-fungsi yang terdapat pada bahagian
C (hotspot) ialah:
a) Menu Utama
b) Paparan Base Plan
c) Paparan Screenshot
d) Navigasi 3D
e) Pangkalan Data
f) Menu navigasi
g) Pengiraan algoritma
h) Maklumat kajian
i) Keluar
Menu Utama:
Pengguna boleh menggunakan fungsi ini untuk kembali ke menu utama
aplikasi.
Paparan Base Plan:
Paparan ini akan menunjukkan pelan asas (plan view) bagi FKSG bagi tujuan
identifikasi pengguna mengenai lokasi semasa atau pun lokasi destinasi di
dalam bangunan. Bagi pengguna baru, maklumat ini adalah amat
berguna/penting.
Paparan Screenshot:
Pengguna boleh menggunakan fungsi ini untuk melihat beberapa grafik dan
animasi bagi model bangunan kajian tanpa melakukan navigasi di dalam
bangunan tersebut.
Navigasi 3D:
Fungsi ini membenarkan pengguna untuk melakukan navigasi di dalam
bangunan persekitaran 3D termasuk penggunaan tekstur bangunan yang
sebenar tanpa melakukan pengiraan jarak terpendek antara dua lokasi di
dalam model bangunan.
Pangkalan Data:
Fungsi ini boleh digunakan pengguna aplikasi untuk setkan data rangkaian
dan juga model 3D yang bakal digunakan. Pengguna tidak digalakkan untuk
menggunakan fungsi ini akan tetapi boleh menggunakannya jika ingin
menggunakan set data lain. Jika tiada perubahan yang dibuat, data rangkaian
3D dan model bangunan yang digunakan adalah data default.
Menu Navigasi:
Fungsi ini perlu digunakan sebelum melakukan pengiraan algoritma Dijkstra.
Pengguna perlu setkan lokasi semasa dan juga lokasi destinasi berdasarkan
nama bilik, nama staff atau nombor bilik yang hendak dituju. Selepas itu
pengguna boleh melakukan pengiraan dengan menggunakan fungsi Pengiraan
Algoritma. Di dalam fungsi ini terdapat sub fungsi lain iaitu Pencarian
Lanjutan bagi pengguna yang ingin mencari lokasi yang hendak dituju.
Pencarian Lanjutan:
Fungsi ini digunakan untuk mencari maklumat non-spatial bagi
objek-objek 3D di dalam bangunan. Ia bakal digunakan jika pengguna
tidak pasti nama atau pun nombor bilik yang hendak dituju.
Pengiraan Algoritma:
Fungsi ini hanya akan aktif apabila pengguna telah pun setkan lokasi semasa
dan lokasi destinasi pada fungsi Menu Navigasi. Jika tidak, fungsi ini tidak
akan diaktifkan. Dengan menggunakan fungsi ini, pengiraan bagi algoritma
Dijkstra akan dijalankan. Hasilnya akan dipaparkan melalui satu menu
statistik pengiraan (numerical) dan kemudian pengguna boleh memilih
samada untuk melihat laluan terpendek ke lokasi destinasi (grafikal) atupun
tidak. Jika pengguna ingin dan memilih untuk melihat hasil secara grafik,
pengguna akan dan boleh melakukan navigasi di dalam persekitaran 3D
bangunan serta dapat melihat tekstur sebenar bangunan di samping dapat
melihat laluan terpendek yang dikira sebelum ini secara grafikal. Simulasi
yang dibuat adalah berdasarkan pergerakan simulasi manusia.
Maklumat Kajian:
Fungsi ini hanya untuk memaparkan serba sedikit mengenai maklumat kajian,
apa kegunaan aplikasi dan mengapa ianya dibangunkan.
Keluar:
Keluar daripada aplikasi.
4.3.3
Perkakasan Komputer
Bagi membolehkan perisian-perisian yang bakal digunakan berfungsi dengan
baik, segala komponen (perkaksan) penting bagi pembangunan aplikasi perlu
disediakan di dalam sistem komputer supaya proses reka bentuk dan pembangunan
aplikasi dapat dilakukan dengan sebaik-baiknya. Bagi sesetengah pembangunan
sistem maklumat yang lain, aktiviti ini dianggap tidak penting kerana perkakasan
tersebut sudah sedia ada dan hanya mengguna pakai sistem atau pun perkakasan
komputer tersebut. Sesetengah pembangunan sistem maklumat yang lain perlu
memperincikan setiap maklumat perkakasan yang hendak digunakan untuk melihat
kos, keberkesanan penggunaan, dan juga untuk perancangan jangka masa panjang.
Bagi kajian yang dijalankan ini, perkakasan komputer (spesifikasi sistem) yang
dibekalkan di dalam kajian ini ialah:
Spesifikasi sistem:
Intel Pentium 4 2.4GHz,
1 GB RAM,
NVIDIA GeForce2 MX/ MX400 ,
Microsoft Windows XP Professional, Version 2002, Service pack 2.
4.3.4
Model Bangunan 3D
Aplikasi yang hendak digunakan memerlukan data-data (spatial dan bukan
spatial) untuk diproses oleh aplikasi supaya ianya boleh dijadikan maklumat. Bagi
sesebuah sistem maklumat contohnya GIS, ia memerlukan data spatial dan bukan
spatial sebelum melakukan analisis. Dapat dikelaskan di sini bahawa data spatial
bagi gunapakai aplikasi kajian ialah model tiga dimensi bangunan FKSG itu sendiri
(termasuk data rangkaian 3D yang terdapat di dalam bangunan kajian) dan bagi data
bukan spatial pula adalah maklumat rekod-rekod bagi setiap entiti spatial yang
terdapat di dalam bangunan kajian. Maklumat-maklumat yang diambil kira di dalam
kajian ini ialah berdasarkan analisis kepenggunaan yang dilakukan sebelum ini.
Maklumat tersebut ialah maklumat mengenai nama staf, nama bilik atau makmal,
nombor bilik, aras bangunan dan juga nombor blok yang terdapat di dalam bangunan
FKSG.
4.3.4.1
Pendigitan Pelan Lantai
Bagi menghasilkan model bangunan FKSG mengikut ukuran dan nisbah yang
sebenar, pelan lantai (floor plan) sebenar bangunan FKSG digunakan untuk
menghasilkan model 3D yang lebih realistik. Pelan lantai yang digunakan (Lampiran
A) diperolehi daripada Pejabat Harta Bina UTM. Ianya terdiri daripada beberapa
pelan. Kesemua pelan lantai tersebut adalah dalam nisbah skala 1:16. Oleh itu,
beberapa perkara perlu dilakukan untuk menjadikan model yang bakal dihasilkan
mengikut ukuran sebenar bangunan FKSG dan di antaranya ialah proses
mencantumkan pelan lantai yang sedia ada, proses penskalaan dan sebagainya. Oleh
itu, perisian aplikasi Computer Aided Design - CAD (AutoCAD 3D Map 2005)
digunakan untuk proses pendigitan pelan lantai tersebut.
Proses ini dimulakan dengan melakukan pengimbasan terhadap pelan lantai
yang telah tersedia dalam bentuk hardcopy. Proses pengimbasan dibuat dengan
menggunakan mesin pengimbas bersaiz A0 memandangkan pelan lantai tersebut
bersaiz A3. Imej pelan lantai yang diimbas disimpan di dalam cakera keras dalam
format TIFF (*.tiff).
Di dalam perisian CAD, imej yang diimbas tersebut dimasukkan di dalam
paparan kerja untuk didigit. Ianya boleh dilakukan dengan cara seperti Rajah 4.5
berikut:
Rajah 4.5: Imej yang diimbas dimasukkan sebagai rujukan bagi proses pendigitan.
Oleh kerana setiap aras di dalam bangunan mempunyai tiga pelan/imej, maka
imej-imej bagi setiap aras perlu dicantumkan terlebih dahulu sebelum melakukan
proses pendigitan. Setelah imej pertama dimasukkan, imej kedua pula dimasukkan
dengan menggunakan cara yang sama. Setelah selesai, proses untuk mencantumkan
kedua-dua imej tersebut (imej pertama dan kedua) perlu dilakukan supaya pelan
lantai bagi aras tersebut kelihatan seperti satu pelan lantai sahaja dan bukan lagi
terdiri daripada tiga pelan lantai yang berasingan. Proses mencantumkan imej
tersebut boleh dilakukan dengan menggunakan arahan Align (Rajah 4.6). Seterusnya,
imej yang ketiga juga dimasukkan ke dalam paparan kerja dan dicantumkan
sepertimana proses yang dilakukan terhadap imej yang kedua. Hasil akhir ialah satu
pelan lantai bagi satu aras yang berkenaan (Rajah 4.7).
Rajah 4.6: Proses mencantumkan imej menggunakan arahan Align
Rajah 4.7: Ketiga-tiga imej pelan lantai yang dicantumkan menjadi satu pelan bagi
satu aras
Terdapat pelbagai kaedah untuk melakukan proses pendigitan. Akan tetapi
setelah beberapa kajian dilakukan, kaedah yang dipilih untuk digunakan di dalam
kajian ini adalah yang terbaik mengikut situasi kegunaan aplikasi. Ianya terbaik dari
segi untuk mengurangkan jumlah vertices yang terdapat di dalam model bangunan
3D yang bakal dibentuk. Ini penting pada prestasi aplikasi semasa fasa
pengimplementasian. Jumlah vertices yang banyak akan mengurangkan kadar
prestasi aplikasi. Akan tetapi pengurangan vertices yang dilakukan tidak bermaksud
mengurangkan LOD bagi bangunan 3D kawasan kajian, ianya cuma mengurangkan
jumlah vertices yang tidak penting bagi tujuan paparan model 3D yang terlibat.
Sebagai contoh, bagi permukaan sesebuah dinding, jika dinding empat segi tepat
yang dibina berasaskan daripada 2 segitiga, maka koordinat yang perlu disimpan
adalah 3 pasang koordinat dan ini secara tidak langsung menambahkan lagi
penggunaan ruang penstoran komputer dan pada akhirnya menjejaskan prestasi
aplikasi. Maka dengan mengurangkan jumlah vertices pada model (menjadi 2 pasang
koordinat sahaja), ia tidak akan menjejaskan LOD dan menjimatkan ruangan
penstoran komputer.
Pendigitan boleh dilakukan terus dengan berpandukan kepada pelan lantai
yang telah dicantumkan sebelum ini. Pendigitan yang dilakukan adalah untuk
menghasilkan satu kumpulan poligon dan bukannya satu kumpulan garisan. Jika
dirujuk kepada Rajah 4.8, pendigitan dilakukan dengan mengambil kira ketebalan
dinding bangunan. Ini kerana proses seterusnya dalam perisian permodelan 3D
memerlukan maklumat ketebalan dinding. Pendigitan dinding bilik perlulah
dipastikan tertutup dan menjadi/membentuk satu poligon bagi memudahkan proses
penampalan tekstur bangunan pada model.
Rajah 4.8: Proses pendigitan pelan lantai (ketebalan dinding)
Bagi memudahkan proses permodelan 3D, pendigitan dibahagikan kepada
dua bahagian iaitu pendigitan ruang-ruang (bilik-bilik) dan pendigitan lantai bagi
setiap aras (Rajah 4.9). Pengasingan fail pendigitan tersebut adalah untuk
memudahkan pemprosesan model 3D semasa menggunakan perisian permodelan 3D
kerana setiap bahagian tersebut mempunyai ketinggian yang berbeza.
Rajah 4.9: Hasil pendigitan entiti ruang bilik dan lantai bagi satu aras
Bagi mempastikan hasil pendigitan adalah bersih/bebas daripada kesilapan
seperti overshoot dan undershoot, pendigitan berulang, dan yang paling penting ialah
untuk mempastikan bahawa hasil yang didigit berada dalam bentuk poligon, maka
arahan di dalam CAD boleh digunakan. Pilihan pada menu Map > Tools > Drawing
Cleanup. Ikuti arahan yang diberikan dan pilih jenis kesalahan apa yang perlu
diubahsuai atau diperbetulkan dan perisian akan melakukan pemprosesan secara
automatik dan akan memberitahu statistik kesilapan yang dilakukan dan juga berapa
banyak objek yang diubahsuai kepada pengguna.
Rajah 4.10: Pembetulan kesalahan bagi keseluruhan hasil pendigitan dengan
menggunakan arahan Drawing Cleanup
Proses Georeferencing perlu dilakukan bagi pelan lantai yang telah didigit,
yang mana proses ini adalah untuk meletakkan pelan lantai digital tersebut pada nilai
kedudukan koordinat sebenar mengikut projeksi peta. Nilai koordinat sebenar yang
digunakan di dalam kajian ini adalah berdasarkan kajian penyelidik GIS yang
terdahulu. Nilai koordinat yang diperolehi dan digunakan adalah berdasarkan kepada
projeksi Rectified Skew Orthomorphic (RSO).
Bagi melakukan proses ini, tiga kaedah lazim dilakukan terhadap data pelan
lantai digital tersebut. Tiga kaedah tersebut ialah Move (differential), Scaling dan
Rotation. Bagi kaedah move ianya adalah untuk mencari nilai perbezaan (differential)
bagi paksi rujukan yang digunakan iaitu paksi x, paksi y dan paksi z. Setelah dikenal
pasti perbezaan nilai x, y dan z antara kedudukan sebenar bangunan dengan
kedudukan data digital pelan lantai, maka data tersebut boleh dianjakkan (Rajah
4.11) ke kedudukan yang hampir sama dengan kedudukan bangunan yang sebenar. Ia
masih lagi tidak tepat dengan kedudukan yang sebenar kerana masih lagi terdapat
herotan dan juga penskalaan yang tidak tepat.
Rajah 4.11: Proses penganjakkan dilakukan bagi data digital pelan
Bagi proses penskalaan pula (Rajah 4.12), nisbah antara data pelan digital
dengan bangunan sebenar dicari. Oleh kerana pelan lantai yang ada berada pada
nisbah 1:16, maka pelan yang didigit diskalakan/didarab mengikut nisbah tersebut
dan seterusnya disemak dengan data bangunan sebenar kajian GIS yang terdahulu
untuk melihat ketepatannya.
Rajah 4.12: Proses penskalaan data digital pelan
Seterusnya adalah proses rotation (Rajah 4.13). Proses ini perlu dilakukan
jika pelan lantai digital tersebut terdapat herotan apabila dibandingkan dengan
kedudukan sebenar bangunan. Proses ini dapat dilakukan dengan mencari sudut
perbezaan antara kedudukan model (pelan lantai digital) dengan kedudukan
bangunan yang sebenar. Dengan berpandukan kepada sudut perbezaan yang dikira
tersebut, kedudukan pelan lantai digital tersebut boleh dibetulkan herotannya.
Rajah 4.13: Proses pembetulan herotan pada pelan lantai digital
Setelah dilakukan pembetulan (Move,
Scaling dan Rotation) yang
dibincangkan sebelum ini selesai dilakukan, maka dengan itu pelan lantai yang
didigit tersebut telah sedia untuk dilakukan proses permodelan 3D dengan
menggunakan perisian permodelan 3D. Proses tersebut akan dibincangkan dengan
lebih lanjut pada topik yang seterusnya. Kini pelan lantai tersebut telah berada pada
rujukan sebenar mengikut projeksi peta yang diguna pakai.
4.3.4.2
Reka Bentuk Model Bangunan 3D
Model bangunan FKSG yang dibentuk adalah berdasarkan daripada
pelan lantai yang didigit. Pelan lantai yang telah didigit boleh digunakan di
dalam reka bentuk bangunan 3D menggunakan perisian permodelan 3D. Di
dalam kajian ini perisian yang digunakan ialah Autodesk 3D Studio Max 6.
Pelan lantai yang telah dibentuk sebelum ini dengan menggunakan
perisian CAD boleh diimport masuk ke dalam perisian permodelan 3D yang
digunakan. Ia boleh dilakukan dengan mengklik File > Import. Menu import
fail akan dipaparkan (Rajah 4.14). Pilih jenis fail yang hendak diimport dan
seterusnya pilih nama fail yang ingin digunakan.
Rajah 4.14: Menu Select File to Import
Setelah nama dan jenis fail telah dipilih (klik Open), satu menu Import
Options akan dipaparkan seperti Rajah 4.15.
Rajah 4.15: Import Options (Geometry Tab)
Pastikan uncheck textbox pada Scale untuk mempastikan objek yang akan
diimport tidak akan diskalakan semula kerana pelan lantai yang didigit telah melalui
proses penskalaan semasa proses georeferencing.
Pilih layer yang ingin diimport masuk ke dalam ruangan kerja permodelan
(Rajah 4.16). Layer yang tidak berkenaan boleh diabaikan supaya tidak diimport
bersama-sama. Biarkan option yang lain seperti nilai default (Rajah 4.17) dan klik
OK.
Rajah 4.16: Import Options (Layers Tab)
Rajah 4.17: Import Options (Spline Rendering Tab)
Setelah pelan lantai yang telah didigit dimasukkan ke dalam ruangan kerja, ia
mesti ditukarkan ke format yang membenarkan proses pengeditan dijalankan.
Caranya ialah dengan mengklik pelan lantai di dalam ruangan kerja untuk
memilihnya, dan seterusnya klik kanan pada pelan tersebut dan seterusnya pilih
Transform > Convert > Convert to Editable Poly (Rajah 4.18).
Rajah 4.18: Menu transform
Sekarang pada kotak properties sebelah kanan ruangan kerja terdapat
beberapa pilihan yang boleh dibuat untuk mengedit pelan lantai tersebut.
Rajah 4.19: Properties box (Selection)
Terdapat beberapa pilihan (Selection) jika dilihat pada Rajah 4.19 sebelum
ini. Pilihan yang boleh dibuat ialah Vertex, Edge, Border, Polygon dan Element.
Pilihan Vertex akan membenarkan pengguna untuk memilih vertex yang terdapat di
dalam model yang aktif. Begitu juga dengan pilihan edge dan border. Manakala bagi
pilihan polygon, pilihan yang dibenarkan ialah seluruh permukaan poligon yang
dipilih. Contohnya jika pengguna klik pada satu permukaan pada objek maka seluruh
permukaan tersebut akan dipilih. Manakala bagi pilihan element (Rajah 4.20),
apabila pengguna klik pada seseuatu objek, seluruh objek tersebut akan dipilih.
Pilihan element akan sering digunakan di dalam proses reka bentuk kajian ini.
Rajah 4.20: Penggunaan element bagi reka bentuk model
Klik pada element dan seterusnya klik pula pada bahagian dinding
(ketebalan) bangunan. Bahagian (poligon) dinding bagi keseluruhan bangunan akan
ditonjolkan (highlight) dengan warna merah (Rajah 4.20). Element yang diwarnakan
dengan warna merah menunjukkan pengguna telah membuat pemilihan bahagian
poligon yang hendak diubahsuai. Kemudiannya, klik fungsi extrude pada pilihan Edit
Polygons di sebelah kanan ruangan kerja. Fungsi ini akan membina ketinggian pada
dinding yang telah dipilih. Masukkan nilai ketinggian dinding bangunan pada
Extrusion height (Rajah 4.21). Klik OK dan seterusnya dinding bangunan akan
dihasilkan.
Rajah 4.21: Fungsi Extrude bagi membentuk dinding bangunan
Bagi mendapatkan ukuran ketinggian model bangunan (contohnya
seperti ketinggian dinding, lantai, koridor, tingkap pintu dan sebagainya), pada
kebiasaannya keratan rentas bagi pelan bangunan dapat memberikan
maklumat tersebut. Akan tetapi pelan tersebut tidak dapat diperolehi. Maka
dengan ini kerja pengukuran (asas) telah dilakukan bagi mendapatkan dimensi
bangunan yang sebenar. Berikut merupakan beberapa dimensi yang telah
diukur mengikut ukuran sebenar bangunan:
Dimensi objek di dalam bangunan:
Ketinggian aras bangunan: 3.9 m,
- Ketebalan lantai bangunan: 0.3 m,
- Ketinggian ruang bilik: 3.6 m,
Tingkap/Jendela:
-
Lebar: 0.97 m
-
Tinggi: 0.94 m
Pintu:
-
Lebar: 0.92 m
-
Tinggi: 2.14 m
-
Lebar (2 pintu) : 1.47 m.
Ketinggian koridor: 0.95 m.
Ukuran seperti pintu, tingkap dan lain-lain adalah berbeza bagi sesetengah
tempat/bilik. Akan tetapi nilai yang digunakan adalah nilai ukuran dimensi yang
biasa/purata bagi hampir kesemua objek tersebut. Pembinaan objek spatial 3D yang
akan direka bentuk adalah berdasarkan kepada nilai dimensi yang dinyatakan
sebelum ini.
Fungsi extrude yang digunakan untuk mereka bentuk dinding dibuat
berdasarkan ketinggian ruang bilik iaitu 3.6m. Nilai 3.9m tidak digunakan kerana
baki nilai 0.3m akan digunakan (mewakili) pada data lantai. Rajah 4.22 merupakan
hasil dinding bangunan yang dihasilkan dengan menggunakan fungsi extrude.
Rajah 4.22: Dinding bangunan dihasilkan menggunakan fungsi Extrude
Proses yang sama juga diaplikasikan terhadap dinding-dinding bangunan
yang lain yang masih lagi tidak dibentuk. Bagi lantai, nilai Extrusion height yang
dimasukkan ialah 0.3m. Rajah 4.23 menunjukkan dinding dan lantai bangunan yang
telah siap dibentuk. Bagi aras-aras yang lain, proses yang sama juga boleh
diadaptasikan/digunakan dan seterusnya model 3D bagi aras-aras tersebut boleh
disimpan dan boleh diteruskan dengan proses reka bentuk yang selanjutnya.
Rajah 4.23: Dinding bangunan dan lantai yang telah siap dibentuk
4.3.4.3
Reka Bentuk Model Objek 3D
Terdapat beberapa objek spatial yang lain yang perlu dibina bagi
melengkapkan lagi model bangunan yang dibina. Antara objek-objek yang hendak
dibina ialah seperti:
i) tangga,
ii) koridor,
iii) bumbung,
iv) pondok wakaf dan bangku kayu
Setiap objek tersebut diterangkan dengan lebih terperinci pada bahagian
seterusnya. Penerangan tersebut merangkumi proses reka bentuk objek-objek spatial.
Perbincangan setiap proses ini adalah seperti berikut:
i) Tangga
Proses menghasilkan model tangga di dalam perisian permodelan 3D yang
digunakan di dalam kajian ini adalah agak mudah. Ini kerana terdapat fungsi yang
khusus disediakan bagi menghasilkan tangga berdasarkan kemahuan pengguna.
Fungsi tersebut boleh digunakan dengan klik pada tab Create > Geometry dan pilih
Stairs pada pilihan yang disediakan seperti yang ditunjukkan pada Rajah 4.24:
Rajah 4.24: Pilihan Stairs untuk mereka bentuk tangga
Terdapat beberapa pilihan bagi jenis tangga yang hendak dibina. Pilihan
yang disediakan ialah L Type Stair, Spiral Stair, Straight Stair dan U Type Stair.
Bagi kawasan bangunan kajian, tangga yang hendak dibina adalah tangga jenis U
Type Stair.
Klik pada pilihan tangga jenis U Type Stair dan seterusnya lukiskan pada
ruangan kerja (Rajah 4.25). Tetapkan dimensi tangga yang sesuai (panjang, lebar dan
tinggi). Beberapa modifikasi boleh dilakukan selanjutnya dengan menggunakan
menu properties.
Rajah 4.25: Reka bentuk tangga menggunakan fungsi reka bentuk U Type Stair yang
tersedia di dalam perisian Autodesk 3D Studio Max
Modifikasi pada model 3D tangga tersebut boleh dibuat dengan
mengubah parameter bagi tangga tersebut. Pada nilai parameter (Rajah 4.26),
pastikan Type adalah jenis Closed, Generate Geometry pula tandakan pada checkbox
Handrail (left, right) untuk membuat handrail, dan bagi Layout pilih left kerana
tangga yang terdapat di dalam kawasan kajian adalah daripada jenis tersebut. Bagi
nilai-nilai pada Railings, nilai-nilai yang ada hanya perlu diubah jika pengguna ingin
mendapatkan permukaan yang lebih terperinci (detailed) sahaja. Sebarang objek
tambahan yang hendak ditambah pada model tangga boleh dilakukan secara manual
dengan menggunakan fungsi-fungsi yang disediakan (Rajah 4.27).
Rajah 4.26: Nilai parameter yang boleh diubah bagi menghasilkan sebuah tangga
mengikut jenis tangga yang dikehendaki pengguna
Rajah 4.27: Tangga yang telah siap direka bentuk
ii) Koridor
Rajah 4.28: Koridor yang telah siap direka bentuk
Tiada fungsi khusus yang boleh digunakan untuk membina koridor
yang boleh dimasukkan di dalam model bangunan. Proses untuk membina model 3D
bagi koridor berlainan dengan proses membina model 3D tangga. Pada kebiasaanya
model 3D objek spatial seperti ini direka berdasarkan kreativiti pengguna (Rajah
4.28). Koridor ini direka berdasarkan daripada kotak empat segi dan seterusnya
dilukis beberapa objek dan seterusnya dijadikan 3D dengan melakukan beberapa
operasi seperti operasi Boolean terutamanya. Seterusnya fail (3D) ini disimpan
sebagai fail *.max dan seterusnya boleh digunakan bersama dengan model bangunan
FKSG bagi proses selanjutnya nanti.
iii) Bumbung
Bumbung bangunan FKSG mempunyai keunikan yang tersendiri kerana mempunyai
beberapa ukiran yang melambangkan seni reka bentuk bangunan FKSG. Bumbung
yang hendak dibina adalah perlu berdasarkan kepada pelan lantai aras yang paling
atas untuk mendapatkan ketepatan dimensi dan bagi ukiran pula ianya dilukis dengan
menggunakan perisian yang sama. Hasil daripada lukisan mewakili ukiran pada
bahagian bumbung setelah dijadikan ianya berbentuk 3D adalah seperti Rajah 4.29.
Rajah 4.29: Hasil reka bentuk ukiran yang terdapat pada bumbung bangunan FKSG
Seterusnya bahagian atas dan bawah bumbung FKSG dibina dengan
menyatukan beberapa objek geometri asas (Rajah 4.30) untuk menghasilkan
bumbung yang akan dimasukkan ke dalam model bangunan 3D yang sebenar bagi
proses reka bentuk yang seterusnya.
Rajah 4.30: Hasil reka bentuk ukiran yang terdapat pada bumbung bangunan FKSG
serta gabungan beberapa objek geometri yang lain bagi membentuk model bumbung
untuk digunakan dengan model bangunan yang sebenar
Akhir sekali, bagi membina bumbung untuk keseluruhan bangunan
FKSG, pelan lantai bagi aras yang paling atas digunakan bersama-sama dengan
model bumbung untuk meletakkan bumbung pada tempat dan kedudukan (skala)
yang betul. Proses reka bentuk perlu dilakukan dengan teliti (secara manual) kerana
kedudukan bangunan kajian adalah unik yang berada di atas bukit/tanah tinggi. Hasil
akhir adalah satu model bumbung yang lengkap bagi keseluruhan bangunan kajian
dan seterusnya ianya boleh digunakan bersama-sama dengan model bangunan yang
sebenar (Rajah 4.31).
Rajah 4.31: Hasil keseluruhan reka bentuk ukiran dan bumbung bangunan FKSG
iv) Pondok Wakaf
Rajah 4.32: Pondok wakaf
Rajah 4.33: Bangku kayu di Dataran Harmonis (C06)
Di samping koridor, tangga dan juga bumbung bangunan, pondok wakaf
juga merupakan di antara objek model spatial 3D yang boleh diletakkan bersamasama dengan model bangunan sebenar bagi menghasilkan suatu persekitaran 3D
yang lebih realistik. Pondok wakaf (Rajah 4.32) dan bangku kayu (Rajah 4.33) direka
bentuk dengan teliti mengikut skala bagi setiap entiti spatial tersebut di dunia yang
nyata. Kedua-dua hasil ini kemudiannya disimpan di dalam fail yang berasingan
supaya ianya boleh digunakan bersama-sama dengan bangunan FKSG untuk proses
reka bentuk yang selanjutnya nanti.
4.3.4.4
Tekstur Model Bangunan dan Objek-objek 3D
Tekstur yang digunakan di dalam kajian ini adalah tekstur sebenar bagi objek
spatial di dunia yang nyata. Ini adalah berdasarkan tujuan kajian untuk menghasilkan
analisa rangkaian 3 dimensi di dalam persekitaran 3D. Persekitaran 3D yang
dimaksudkan adalah bukan sahaja terdiri daripada objek 3D akan tetapi termasuk
tekstur sebenar objek tersebut untuk menjadikan persekitaran 3D tersebut seakanakan realistik sepertimana yang terdapat pada dunia yang sebenar.
Tekstur-tekstur sebenar di ambil dengan menggunakan kamera digital, setiap
objek spatial yang penting di dalam model bangunan diambil untuk digunakan
bersama-sama model. Seterusnya gambar tersebut akan dilakukan penyuntingan
dengan menggunakan perisian grafik untuk memperbetulkan sebarang herotan pada
gambar, membetulkan tint pada gambar tersebut, menseragamkan warna akibat kesan
daripada cuaca persekitaran dan lain-lain. Kesemua proses ini dibuat untuk
menghasilkan tekstur yang kelihatan seakan-akan pengguna melihat permukaan
bangunan kajian yang sebenar (Rajah 4.34).
Terdapat pelbagai cara untuk meletakkan tekstur pada model 3D bangunan.
Kaedah-kaedah tersebut pada konsep asasnya ialah setiap permukaan yang telah
dipilih dan dilekatkan tekstur padanya, maklumat bagi setiap permukaan termasuk
koordinat pemetaan tekstur pada model tersebut akan disimpan di dalam fail model
yang digunakan. Beberapa sub kajian telah dijalankan di dalam kajian ini bagi
mendapatkan satu kaedah yang terbaik dalam penggunaan tekstur. Satu langkah
terbaik dari segi penjimatan masa kiraan komputasi dan storan komputer ialah
dengan mencipta satu set tekstur bagi keseluruhan permukaan dinding. Dengan cara
ini ia dapat mengurangkan penggunaan storan komputer termasuklah kiraan
komputasi semasa melakukan proses permodelan.
Pada kebiasaannya cara yang dilakukan untuk menampal tekstur pada model
adalah berdasarkan permukaan poligon yang dipecah-pecahkan mengikut permukaan
dinding. Sebagai contoh, sesebuah permukaan dinding mempunyai 8 set poligon
yang kecil. Kelapan-lapan poligon tersebut diletakkan tekstur satu per satu.
Contohnya tekstur pintu pada poligon pertama, tekstur tingkap pada poligon kedua
dan seterusnya. Kaedah tersebut boleh digunakan, akan tetapi ia menggunakan
ruangan storan komputer yang agak besar dan agak lambat untuk proses pengiraan
komputasi. Cara yang terbaik iaitu dengan mencipta keseluruhan set tekstur bagi satu
permukaan dinding adalah dengan cara membuat satu imej tekstur yang disunting
dengan menggunakan perisian grafik bagi keseluruhan dinding. Imej tekstur tersebut
mengandungi pintu, tingkap dan lain-lain padanya. Ini menjimatkan ruangan storan
komputer dan meningkatkan prestasi pengiraan komputer. Contoh, bagi sebuah
permukaan dinding (yang mempunyai 8 set poligon kecil) hanya ditampal satu imej
tekstur sahaja bagi permukaan dinding tersebut. Ini dapat menjimatkan masa semasa
proses permodelan ini. Contoh bagi tekstur yang telah disunting bagi keseluruhan set
dinding dapat dilihat pada Lampiran B. Tekstur seterusnya digunakan bersama-sama
dengan model bangunan menggunakan fungsi yang telah disediakan bersama dengan
perisian dan koordinat pemetaan bagi setiap tekstur diambil kira bagi menghasilkan
pemetaan tekstur yang sempurna.
Rajah 4.34: Beberapa tekstur sebenar bagi objek spatial 3D yang telah disunting
untuk memperbetulkan herotan, warna, dan sebagainya bagi kegunaan permodelan
model 3D bangunan kajian
4.3.5
Jaringan Rangkaian 3D
Pendigitan laluan ini boleh dilakukan di dalam CAD. Walaubagaimana pun,
kaedah pendigitan laluan tersebut ada sedikit perbezaan dengan pendigitan laluan
bagi jaringan 2D. Arahan yang digunakan untuk mendigit jaringan 3D ialah arahan
3D polyline (3DPOLY). Setelah beberapa penelitian dibuat di dalam kajian ini,
terdapat beberapa syarat yang ditetapkan semasa melakukan pendigitan rangkaian
ini. Ini bertujuan untuk mengelakkan kesilapan pengiraan shortest route pada hasil
akhir analisis nanti.
Syarat-syarat tersebut ialah pendigitan yang dilakukan mestilah menggunakan
arahan 3DPOLY yang terdapat di dalam perisian CAD. Ini kerana, pengaturcaraan
yang dibuat untuk membaca fail CAD ini adalah berdasarkan arahan 3DPOLY ini.
Arahan lain boleh digunakan akan tetapi pengaturcaraan perlu diubah berdasarkan
jenis data yang hendak dibaca dan ditapis nanti. Seterusnya, jika terdapat persilangan
laluan bagi pendigitan yang dilakukan, persilangan yang dibenarkan ialah
persilangan yang tidak melebihi 2 laluan/garis (5 nod termasuk nod persilangan). Ini
kerana jaringan yang direka bentuk ini adalah berpandukan daripada corak atau pun
patern graf. Ini bagi mengelakkan pertindihan laluan yang banyak dan akhirnya
menghasilkan laluan yang tidak praktikal bagi kegunaan pengguna. Syarat yang
paling penting sekali ialah jika terdapat laluan yang bertindih dan laluan itu juga
mempunyai ketinggian (z) yang sama, pendigitan harus dilakukan pada titik
persilangan antara laluan yang pertama dengan laluan yang kedua. Aplikasi tidak
akan menghadapi sebarang masalah jika syarat ini tidak dipenuhi akan tetapi hasil
pengiraan bagi analisis akan terdapat ralat. Ini kerana jika pendigitan tidak dibuat
pada titik persilangan laluan, ia menunjukkan laluan tersebut seolah-olah seperti
sebuah flyover yang melalui di bahagian atas laluan yang pertama tadi. Oleh itu,
laluan yang hendak didigit perlulah dirancang dengan teliti untuk mengelakkan
sebarang permasalahan seperti yang dinyatakan berlaku. Ini kerana pendigitan
rangkaian 3D mementingkan elemen ketinggian dalam prosesnya.
Proses pendigitan boleh dilakukan dengan menggunakan model bangunan
bagi setiap aras yang telah siap dibina. Model aras bangunan tersebut boleh diimport
masuk ke dalam perisian CAD (Rajah 4.35).
Rajah 4.35: Contoh model aras bangunan yang dibuka di dalam CAD
Pendigitan boleh dilakukan terus ke dalam model bangunan ini dengan
menggunakan arahan 3DPOLY. Setelah selesai proses pendigitan, simpan fail ini di
dalam format AutoCAD 2000 DXF (*.dxf) untuk proses yang selanjutnya. Rajah
4.36 merupakan contoh hasil pendigitan laluan bagi aras 1 bangunan kajian.
Rajah 4.36: Rangkaian 3D bagi aras 1 yang diwarnakan dengan warna ungu yang
ditunjukkan secara pandangan Planimetri (atas) dan pandangan Perspektif (bawah)
4.3.6
Pengaturcaraan
Rajah 4.37 merupakan carta alir untuk menunjukkan sub-sub aktiviti yang
terdapat di dalam aktiviti pengaturcaraan.
Reka bentuk
Dalaman
Pengaturcaraan
Converter
Topology
Attribute
Aplikasi
Utama
Pengujian
Rajah 4.37: Carta alir sub-sub aktiviti dalam aktiviti pengaturcaraan
Daripada carta alir
yang ditunjukkan terdapat beberapa sub-sub aktiviti
seperti converter, topology, attribute dan aplikasi utama. Sub aktiviti converter
bermaksud menukarkan format bagi data rangkaian 3D yang didigit kepada satu
format yang baru iaitu format MWraw Database Interchange (*.Mwraw). Seterusnya
sub aktiviti topology ialah untuk membina maklumat topologi pada data rangkaian
format MWraw Database Interchange. Setelah selesai, pangkalan data tersebut telah
sedia untuk dimasukkan maklumat atribut atau pun maklumat bukan spatial di
dalamnya. Proses ini dilakukan di dalam sub aktiviti atribut. Dengan berpandukan
kepada ketiga-tiga sub aktiviti ini, maka satu sistem navigasi utama atau pun aplikasi
utama kajian boleh dibangunkan. Ini bertujuan supaya aplikasi utama tersebut direka
bersesuaian dengan jenis data yang hendak dibaca/digunakan. Aplikasi utama perlu
menggunakan data model bangunan 3D dan juga data rangkaian yang telah
dimasukkan atribut untuk menjalankan analisis rangkaian 3D dengan menggunakan
algoritma Dijkstra. Setiap sub-sub aktiviti ini akan diterangkan pada sub-sub topik
yang seterusnya. Bagi setiap pengaturcaraan yang dibuat bagi setiap sub aktiviti ia
dinamakan dengan; Converter, Topology, Attribute dan Aplikasi Utama.
4.3.6.1
Converter
Tujuan utama pengaturcaraan ini dibuat adalah untuk membaca fail data
rangkaian 3D yang telah didigit. Data rangkaian yang didigit mempunyai maklumatmaklumat seperti koordinat titik awal dan titik akhir garisan, warna garisan,
ketebalan garisan, dan lain-lain lagi. Apa yang diperlukan oleh algoritma Dijkstra
daripada data rangkaian ini ialah koordinat (x, y dan z). Dengan berpandukan
daripada koordinat ini pelbagai maklumat lain boleh dibentuk bagi mencapai
matlamat kajian ini.
0
SECTION
2
HEADER
9
$ACADVER
1
$DWGCODEPAGE
3
ANSI_1252
9
$INSBASE
10
0.0
20
0.0
30
0.0
9
$EXTMIN
10
0.0
…….
…….
…….
…….
…….
…….
AcDbXrecord
280
1
9B
330
A2
0
ENDSEC
0
EOF
Rajah 4.38: Contoh bentuk data rangkaian yang disimpan di dalam
komputer (AutoCAD Drawing)
Oleh itu, hanya maklumat yang penting sahaja yang perlu diekstrak daripada
data asal ini. Converter ini merupakan satu pengaturcaraan yang dibuat untuk
membaca fail rangkaian 3D digital yang disimpan dan menukarkan ia kepada format
MWraw Database Interchange (*.Mwraw). Data yang disimpan (Rajah 4.38) dikaji
untuk melihat susun atur datanya. Setelah semuanya dikenal pasti dan diteliti, maka
carta alir (Lampiran C) dan pengaturcaraan (Lampiran D) dibuat untuk mengekstrak
maklumat yang berkaitan (koordinat x, y dan z) sahaja.
4.3.6.2
Topology
Topologi merupakan perkara yang penting di dalam sesebuah GIS. Topologi
menentukan kedudukan objek spatial secara relatif di dalam GIS. Carta alir
(Lampiran E) dan pengaturcaraan (Lampiran F) yang dibuat dalam kajian ini pada
asasnya adalah untuk membina topologi bagi data MWraw Database Interchange
(*.Mwraw). Topologi yang dibina disini adalah untuk menentukan perhubungan
antara garisan-garisan (rangkaian). Sebagai contoh, adakah garisan yang pertama
bersambung dengan garisan yang ke 100? Persoalan ini akan dijawab dengan
menggunakan Topology. Nod yang bertindihan akan dibuang dan hanya satu sahaja
yang disimpan. Sebagai contoh (Rajah 4.39), garisan 1 terdiri daripada nod A dan
nod B sebagai nod awal dan nod akhir masing-masing. Manakala garisan 2 pula ialah
nod B dan nod C. Nod bertindihan yang dibuang ialah nod B. Oleh itu daripada A ke
C adalah dengan cara A > B > C dan bukan lagi A > B > B > C. Ini akan
menjimatkan ruangan storan data dan juga menjimatkan masa bagi data retrieval.
Topologi bagi melihat perhubungan antara nod-nod yang berhubung juga dibina di
dalam pengaturcaraan ini.
Garisan 2
B
C
Garisan 1
A
Rajah 4.39: Contoh rangkaian (asas)
Setelah data MWraw dibina topologinya, maka data rangkaian baru yang
mengandungi topologi akan disimpan dalam format MW Database (*.MW).
4.3.6.3
Attribute
Sub aktiviti pengaturcaraan ini khusus kepada untuk membaca dan
memasukkan maklumat bukan spatial di dalam MW Database. Maklumat bukan
spatial yang boleh dimasukkan ialah maklumat nama staf/blik/makmal/dewan kuliah,
nombor bilik, aras dan juga blok yang berkenaan (rujuk Lampiran G). Maklumat ini
dimasukkan ke dalam pangkalan data kerana semasa proses Kajian Keperluan,
maklumat ini merupakan antara maklumat yang perlu ada dalam aplikasi bagi
pengguna melakukan navigasi di dalam bangunan kajian. Antara muka bagi
pengaturcaraan ini ditunjukkan dan diterangkan di dalam bab yang seterusnya.
Pangkalan data MW yang telah dimasukkan atribut disimpan di dalam format
*.MW (Rajah 4.40). Seterusnya pangkalan data MW ini digunakan untuk analisis
rangkaian 3D.
1.
2.
3.
4.
5. - File Header
6. - ID
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18. – Sub Header
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31. – Empty Slot
32.
Header MW File
Empty slot
Coordinates
Topology 1
Topology 2
Attribute information
EOF
Rajah 4.40: Format Pangkalan Data MW
4.3.6.4
Aplikasi Utama
Bagi pengaturcaraan aplikasi utama kajian, ia direka bentuk berdasarkan
antara muka pada Rajah 4.4. Pengaturcaraan ini dibuat menggunakan bahasa
pengaturcaraan bagi enjin grafik kajian yang berasaskan Microsoft Visual Basic.
Setiap fungsi diperincikan dan diteliti. Gambaran bagi aplikasi ini diterang dan
ditunjukkan pada bab lima. Carta alir pengiraan laluan terpendek dan pengaturcaraan
bagi aplikasi utama dilampirkan pada Lampiran I dan Lampiran J.
4.3.7
Pengujian
Aktiviti ini adalah untuk menguji kesemua pengaturcaraan yang telah dibuat.
Program yang telah di debug akan dilihat jika terdapat kesalahan major atau minor di
dalamnya. Setelah terbukti tiada lagi kesalahan muncul, maka aplikasi telahpun sedia
untuk ke fasa operasi aplikasi yang dibina.
4.3
Rumusan
Analisa rangkaian di dalam GIS (2D network) memerlukan kedua-dua
maklumat spatial seperti jaringan rangkaian jalan raya dan lot sebelum melakukan
analisis laluan optima. Jika syarat yang ditetapkan oleh perisian untuk melakukan
analisis tersebut dipenuhi, maka analisis boleh dilakukan tanpa sebarang masalah.
Data lot digunakan untuk menggambarkan keadaan sebenar muka bumi yang terdiri
daripada beberapa binaan bangunan atau pun lot tanah untuk menunjukkan pemilikan
individu semasa. Seterusnya data jaringan jalanraya yang ditunjukkan di dalam
gambarajah pula digunakan untuk melakukan analisis rangkaian untuk mencari jalan
yang terpendek dan sebagainya.
Begitu juga situasinya untuk mengaplikasikan analisis rangkaian di dalam
kajian ini. Analisis rangkaian 3D yang dibina memerlukan data jaringan rangkaian
3D di samping maklumat objek spatial 3D yang lain sebelum melakukan operasi
analisis. Objek spatial 3D yang digunakan di dalam kajian ini ialah model 3D
bangunan. Manakala jaringan rangkaian perlu dibina di dalam model bangunan
tersebut untuk menunjukkan jalan-jalan yang dibenarkan atau boleh dilalui oleh
manusia. Bagi sesetengah kajian yang dilakukan oleh penyelidik GIS, laluan atau
pun path (jaringan rangkaian) yang dibina dilakukan secara automatik (Karas et. al.,
2006). Menurut Zlatanova (2002), proses pembinaan objek spatial 3D untuk GIS
yang dilakukan secara automatik daripada proses projeksi data 2D akan
menyebabkan beberapa kehilangan maklumat dan pada akhirnya akan menyukar
pengguna GIS untuk melakukan analisis dan interpretasi. Sebagai contoh kesalahan
yang paling ketara dalam membina laluan (path) secara automatik ialah laluan
tersebut ada yang melalui atau pun merempuh dinding untuk ke koridor luar.
Sepatutnya laluan yang teratur adalah melalui pintu yang ada untuk ke koridor dan
sebagainya. Merempuh dinding sememangnya adalah laluan yang terpendek akan
tetapi ianya tidak praktikal untuk diaplikasikan di dunia yang sebenar. Dengan itu,
kajian di dalam tesis ini membina laluan (path) tersebut dengan merujuk kepada
kajian yang dilakukan oleh Meijers et. al. (2005) yang membina satu struktur laluan
yang teratur dengan berkonsepkan kepada graf. Dengan ini tidak timbul kesalahan
seperti laluan rangkaian yang merempuh dinding atau melalui tingkap dan
sebagainya.
Di dalam bab ini telah diterangkan secara terperinci mengenai aktiviti-aktiviti
dan sub-sub aktiviti yang terlibat. Lampiran-lampiran yang disertakan di dalam
kajian ini juga memberikan serba sedikit gambaran proses semasa fasa pembangunan
aplikasi. Gambaran mengenai reka bentuk fizikal aplikasi dan pengaturcaraan yang
dibuat akan diterangkan pada bab yang seterusnya.
BAB 5
KEPUTUSAN DAN ANALISIS KAJIAN
5.1
Pendahuluan Bab
Bab analisis dan keputusan kajian tertumpu kepada penerangan mengenai
hasil kajian iaitu hasil daripada analisis rangkaian terhadap set data rangkaian 3D
bagi kawasan kajian iaitu bangunan FKSG. Terdapat beberapa langkah-langkah yang
perlu dilakukan sebelum melakukan analisis tersebut. Sebagaimana yang diterangkan
pada bab sebelum ini, terdapat beberapa aktiviti yang terlibat di dalam fasa
pembangunan. Aktiviti yang ditekankan dalam bab ini adalah hasil aktiviti
pengaturcaraan program seperti Converter, Topology, Attribute dan akhir sekali
aplikasi utama yang dibangunkan bagi menjalankan analisis rangkaian 3D. Oleh itu,
bab ini menunjukkan langkah-langkah menggunakan program tersebut dan juga hasil
bagi setiap aktiviti-aktiviti tersebut.
Rajah 5.1 menunjukkan kedudukan bagi program yang dibina dan juga
kefungsiannya. Carta tersebut juga merupakan langkah-langkah di dalam penyediaan
data bagi kegunaan aplikasi utama. Setiap program dan langkah-langkah
menggunakannya akan diterangkan di dalam sub topik yang selanjutnya.
Model Bangunan 3D
Jaringan Rangkaian 3D
Format *.3Dstate
atau *.wld
Format *.MW
DATA SPATIAL
3D Shortest Route
Statistik Pengiraan Algoritma Dijkstra
APLIKASI UTAMA
Navigasi 3D
HASIL ANALISIS
Rajah 5.1: Carta alir bagi kedudukan kefungsian program-program yang dibina dan
juga aplikasi utama
5.2
Jaringan Rangkaian 3 Dimensi
Daripada Rajah 5.1, dapat dilihat bahawa format jaringan rangkaian yang
diperlukan di dalam aplikasi utama kajian ini hendaklah di dalam format MW
Database Interchange (*.MW). Format pangkalan data MW dihasilkan dengan
menggunakan program yang dibina (Rujuk Bab 4: Reka Bentuk Sistem Navigasi).
Program-program yang dinyatakan ialah Converter, Topology dan juga Attribute.
5.3
Antara Muka Converter
Pengaturcaraan bagi program Converter secara ringkasnya digunakan untuk
membaca fail data rangkaian 3D yang telah didigit dan menyunting maklumat yang
terdapat di dalam data tersebut untuk mengambil maklumat yang berkenaan sahaja.
Maklumat tersebut merupakan maklumat yang diperlukan bagi algoritma Dijkstra.
Seterusnya program Converter ini akan menukarkan format data rangkaian yang
didigit menggunakan perisian CAD kepada format MWraw Database Interchange
(*.Mwraw). Data ini dikelaskan sebagai data mentah kerana topologi dan juga
penyemakan data bertindih secara terperinci masih lagi belum dilakukan. Rajah 5.2
menunjukkan antara muka bagi program ini.
Rajah 5.2: Antara Muka bagi program Converter
Pada antara muka yang ditunjukkan terdapat 3 menu yang disediakan untuk
kemudahan pengguna. Menu-menu tersebut ialah menu File, menu Tools dan menu
Help. Manakala di bahagian bawah menu pula merupakan paparan utama bagi data
rangkaian CAD yang dibaca dan juga paparan hasil bagi proses penukaran format
kepada *.Mwraw Database Interchange (*.Mwraw).
5.3.1
Menu File
Terdapat tiga sub menu pada menu File ini. Tiga sub menu tersebut ialah
fungsi Load, Save As dan juga Exit Converter. Load digunakan bagi membuka
tetingkap untuk mencari dan membuka fail jaringan rangkaian 3D yang didigit
menggunakan perisian CAD. Rajah 5.3 menunjukkan proses tersebut.
Rajah 5.3: Fungsi Load yang digunakan untuk mencari dan membuka fail jaringan
rangkaian 3D
Rajah 5.4: Contoh struktur fail jaringan rangkaian 3D yang telah dibuka di dalam
program
Rajah 5.4 pula menunjukkan fail jaringan rangkaian yang telah didigit dibuka
di dalam program dan dipaparkan di paparan utama. Manakala bagi fungsi Save As
(Rajah 5.5) pula ianya hanya boleh digunakan apabila data yang telah dibuka telah
dilakukan analisis terhadapnya (penukaran format). Fungsi ini bertujuan untuk
mencipta satu fail baru berformat *.MWraw bagi rangkaian 3D yang telah dibuka.
Shortcut key bagi fungsi ini ialah Ctrl+S.
Rajah 5.5: Fungsi Save As
Akhir sekali ialah fungsi Exit Converter. Fungsi ini digunakan untuk keluar
daripada program ini. Fungsi ini juga boleh digunakan dengan menekan kekunci
Ctrl+E sebagai shortcut keys bagi fungsi tersebut.
5.3.2
Menu Tools
Di bawah menu Tools terdapat beberapa sub menu atau fungsi. Fungsi
tersebut ialah Analysis dan juga Clear Data View (Rajah 5.6). Bagi fungsi Analysis,
terdapat dua sub fungsi yang boleh digunakan. Fungsi tersebut ialah View Cordinates
dan juga Build MWraw File (Rujuk Rajah 5.7).
Rajah 5.6: Menu Tools
Rajah 5.7: Analisis yang boleh dilakukan
Bagi fungsi View Coordinates, ianya digunakan untuk menganalisis data
rangkaian 3D (filtering) dengan mencari maklumat koordinat bagi nod-nod yang
terdapat di dalam rangkaian tersebut dan seterusnya setiap set koordinat tersebut
diletakkan ID masing-masing (Rajah 5.8). Bagi fungsi Build MWraw file pula, ia
menukarkan format data yang didigit kepada format MWraw Database Interchange
dan maklumat tersebut seterusnya dipaparkan pada paparan utama bagi program ini
(Rajah 5.9).
Clear Data View (shortcut key F3) pula adalah untuk memadamkan fail yang
dipaparkan pada paparan utama. Setelah fungsi ini dijalankan, analisis tidak dapat
dilakukan kerana set data tiada dalam program. Analisis hanya boleh dilakukan jika
set data rangkaian dimuatkan semula dengan menggunakan fungsi yang terdapat
pada menu File.
Rajah 5.8: View Coordinates
Rajah 5.9: Build MWraw file
5.3.3
Menu Help
Menu ini hanya mempunyai fungsi About (Rajah 5.10). Fungsi ini akan
memaparkan maklumat mengenai program ini, kenapa ianya dibina dan seterusnya
maklumat fungsi program.
Rajah 5.10: Fungsi About memaparkan maklumat berkaitan
dengan tujuan Converter dibina
5.4
Antara Muka Topology
Bagi Topology, pengaturcaraan yang dibuat pada asasnya adalah untuk
membina topologi bagi data MWraw Database Interchange (*.Mwraw) yang telah
dibina. Topologi tersebut adalah untuk menentukan perhubungan antara garisangarisan di dalam jaringan rangkaian 3D tersebut. Dengan membina topologi terhadap
set data jaringan, persoalan seperti adakah garisan yang ke 3 bersambung dengan
garisan yang ke 88 dapat diselesaikan. Nod-nod yang mempunyai maklumat
bertindih akan dibuang dan hanya satu nod sahaja yang disimpan. Nod persilangan
akan ditetapkan dan pengiraan panjang garisan dilakukan dan disimpan. Setelah data
MWraw Database Interchange dibina topologinya, maka data rangkaian baru yang
mengandungi topologi akan disimpan dalam format MW Database (*.MW). Rajah
5.11 merupakan paparan antara muka bagi program Topology.
Rajah 5.11: Antara Muka Topology
Bagi program ini, terdapat tiga menu yang disediakan. Menu-menu tersebut
ialah menu File, menu Tools dan juga menu Help. Terdapat butang arahan Generate
pada bahagian kanan bawah antara muka program. Butang ini boleh digunakan jika
segala proses pembinaan topologi hendak dilakukan secara automatik dan bukannya
satu persatu. Namun begitu pembinaan topologi bagi data rangkaian 3D (*.MWraw)
boleh juga dilakukan secara manual dengan menggunakan arahan-arahan yang
terdapat pada menu-menu yang tertentu. Penerangan selanjutnya adalah mengenai
fungsi-fungsi yang terdapat pada menu-menu yang disediakan.
5.4.1
Menu File
Bagi menu menu File terdapat tiga sub menu iaitu Load, Save As dan juga
Close. Bagi fungsi Load, ianya digunakan untuk membuka tetingkap baru bagi
mencari dan membuka fail Mwraw Database Interchange.
Rajah 5.12: Fungsi-fungsi yang terdapat pada menu File
Namun begitu, program akan melakukan pertanyaan kepada pengguna sama
ada untuk melakukan pembinaan topologi secara automatik atau pun tidak (Rajah
5.13).
Rajah 5.13: Tetingkap pertanyaan bagi automasi pembinaan topologi
Jika pengguna program memilih Yes, maka program akan dijalankan secara
automatik sebagaimana butang arahan Generate. Akan tetapi, pengguna masih boleh
melakukan proses tersebut dengan cara manual dengan memilih No.
Proses secara manual adalah pengguna perlu memilih fail MWraw Database
Interchange, melakukan fungsi pembinaan topologi dan akhir sekali menyimpan
maklumat MWraw Database Interchange yang dibina topologinya ke dalam format
yang baru iaitu format MW Database (.*MW).
Tetingkap Open MWraw File akan dipaparkan untuk memilih fail MWraw
yang akan digunakan bagi pembinaan topologi. Rajah 5.14 menunjukkan tetingkap
Open MWraw File. Setelah fail MWraw telah dipilih, maka pembinaan topologi
boleh dilakukan.
Rajah 5.14: Tetingkap Open MWraw File
Selain daripada fungsi Load, terdapat juga fungsi Save As dan juga Close.
Fungsi Save As hanya akan boleh digunakan apabila set data telah dilakukan
pembinaan topologi (Rajah 5.15). Shortcut key bagi fungsi Save As ialah Ctrl+S.
Fungsi terakhir ialah fungsi Close (Ctrl+E). Fungsi ini digunakan untuk keluar
daripada program Topology ini.
Rajah 5.15: Tetingkap Save As fail MW Database (*.MW)
5.4.2
Menu Tools
Bagi menu Tools, terdapat 2 fungsi (sub-menu) di bawahnya (Rajah 5.16).
Dua fungsi tersebut ialah fungsi Build MW Database Topology dan juga Clear Data
View. Selepas data MWraw Database Interchange telah dimasukkan ke dalam
program, maka fungsi Build MW Database Topology akan diaktifkan. Ini bertujuan
untuk membenarkan set data tersebut dilakukan pembinaan topologi terhadapnya.
Apabila fungsi Build MW Database Topology diklik, ia akan mengambil masa
seketika bagi melakukan pembinaan topologi tersebut. Apabila selesai, satu tetingkap
informasi akan dipaparkan seperti Rajah 5.17 untuk menyatakan MW Database telah
siap dibina topologinya. Selepas selesai, fungsi Save As di bawah menu File akan
diaktifkan (Rujuk sub topik 5.4.1) untuk menyimpan fail MW Database.
Rajah 5.16: Menu Tools dan Sub Menu Tools
Rajah 5.17: Tetingkap MW Database file
5.4.3
Menu Help
Menu ini mempunyai sub menu About (Ctrl+A) yang boleh digunakan untuk
memaparkan maklumat mengenai program ini, kenapa ianya dibina dan seterusnya
maklumat fungsi program (Rajah 5.18).
Rajah 5.18: Tetingkap About bagi program Topology
5.5
Antara Muka Attribute
Pengaturcaraan seterusnya iaitu pengaturcaraan bagi program Attribute
digunakan untuk membaca fail data rangkaian 3D MW Database yang telah dibina
topologinya. Program ini digunakan untuk melihat maklumat nod-nod dan juga
koordinat yang terdapat di dalam set rangkaian tersebut. Program ini juga digunakan
untuk memasukkan maklumat atribut ke dalam pangkalan data tersebut. Maklumat
atribut dimasukkan berdasarkan ID dan koordinat nod yang berkenaan. Maklumat
atribut bagi nod-nod akan dipaparkan. Maklumat atribut yang boleh dimasukkan
adalah maklumat Blok, Aras, Nombor Bilik dan juga Nama Bilik/Staff bagi nod yang
berkenaan. Rajah 5.19 merupakan paparan antara muka program ini tanpa sebarang
set data dimasukkan ke dalam program.
Rajah 5.19: Antara Muka program Attribute
Bagi program ini, terdapat empat menu yang dibina untuk kegunaan program.
Menu-menu tersebut ialah menu File, menu Edit, menu Find, dan menu Help. Menumenu tersebut mempunyai kegunaan-kegunaan yang tertentu. Terdapat sub-menu
bagi setiap menu tersebut dan ianya dikelaskan mengikut menu yang ada.
Perbincangan mengenai fungsi sub-menu tersebut akan dilakukan pada topik yang
seterusnya.
Paparan antara muka program ini pada Rajah 5.19 menunjukkan terdapat 8
maklumat yang boleh dipaparkan di dalam text box bersebelahan dengan nama
maklumat yang dinyatakan. Maklumat yang dipaparkan oleh program ini ialah
maklumat Nodes ID, X-Coordinate, Y-Coordinate, Z-Coordinate, Block Number,
Floor Level, Room Number, dan Room Staff/Name. Nodes ID memaparkan ID bagi
nod yang terdapat di dalam rangkaian 3D yang digunakan. ID ini dihasilkan oleh
program Converter semasa menukarkan set data CAD kepada MWraw Database
Interchange. X, Y dan Z Coordinates merupakan maklumat koordinat bagi nod yang
memiliki ID tersebut. Seterusnya maklumat atribut yang terdapat di dalam pangkalan
data akan dipaparkan menerusi text box Floor Level, Room Number, Room
Staff/Name. Kesemua ini adalah maklumat atribut bagi ID dan set koordinat nod
tersebut.
5.5.1
Menu File
Menu File ini dibina untuk mengelaskan dua fungsi ini menjadi sub
menunya. Sub menu tersebut ialah fungsi Load dan juga fungsi Exit MW File
Reader. Rajah 5.20 menunjukkan sub-menu di bawah menu File.
Rajah 5.20: Sub-menu bagi menu File
Bagi fungsi Load, ianya digunakan untuk membuka set data MW Database ke
dalam program. Bagi kegunaan Data Browsing, pengguna program boleh membuka
set data (*.MW) ke dalam program dan kesemua set nod yang terdapat di dalam set
data akan dipaparkan satu persatu. Manakala bagi fungsi Exit MW File Reader pula
digunakan untuk keluar daripada program ini. Shortcut key bagi fungsi ini ialah
Ctrl+E. Rajah 5.21 merupakan tetingkap Open yang dipaparkan selepas
menggunakan fungsi Load.
Rajah 5.21: Fungsi Load
5.5.2
Menu Edit
Terdapat empat sub menu di bawah menu Edit. Keempat-empat ini
mempunyai fungsi yang tertentu. Sub-menu tersebut ialah fungsi Start Editing, Insert
Attribute, Stop Editing dan juga Clear Data View. Keempat-empat fungsi ini tidak
akan diaktifkan apabila tiada data dimasukkan ke dalam program. Apabila set data
dimasukkan ke dalam program, fungsi Start Editing dan Clear Data View akan
diaktifkan untuk menunjukkan proses mengedit boleh dilakukan. Rajah 5.22
menunjukkan fungsi-fungsi yang diaktifkan apabila set data telah dimasukkan ke
dalam program dengan menggunakan fungsi Load pada menu File.
Rajah 5.22: Sub-menu pada menu Edit
Fungsi Start Editing digunakan untuk memulakan proses pengeditan iaitu
proses memasukkan maklumat atribut ke dalam program. Apabila fungsi ini diklik,
maka fungsi Insert Attribute dan juga Stop Editing yang sebelum ini tidak diaktifkan,
diaktifkan bagi kegunaan di dalam proses pengeditan data. Manakala bagi fungsi
Start Editing yang sudah diklik, ianya pula tidak diaktifkan menandakan bahawa
mod program berada di dalam mod pengeditan. Fungsi Start Editing dibina adalah
untuk langkah-langkah keselamatan supaya pengguna tidak mengubahsuai data yang
ada secara tidak sengaja. Proses memasukkan maklumat atribut hanya boleh
dilakukan jika fungsi Start Editing digunakan. Gambarajah 5.23 menunjukkan fungsi
Start Editing diklik dan hasilnya fungsi Insert Attribute dan Stop Editing diaktifkan.
Rajah 5.23: Fungsi Start Editing tidak diaktifkan
Fungsi Insert Attribute digunakan untuk memasukkan maklumat atribut bagi
nod yang berkenaan. Sebagai contohnya, maklumat yang dipaparkan pada text box
Nodes ID ialah nod 867, dan terdapat maklumat atribut bagi nod tersebut yang perlu
dimasukkan, maka fungsi Insert Attribut digunakan untuk memasukkan maklumat
atribut nod tersebut. Sebagaimana yang dinyatakan sebelum ini, maklumat atribut
yang boleh dimasukkan ke dalam pangkalan data ialah maklumat atribut mengenai
nama blok, maklumat aras, nombor bilik dan juga nama bilik atau staff. Oleh itu bagi
memudahkan proses memasukkan maklumat atribut, tetingkap kemasukan data bagi
setiap maklumat atribut yang dinyatakan dibina untuk mengelakkan daripada
berlakunya kesilapan kemasukan maklumat ke dalam MW Database.
Empat tetingkap dibina bagi proses ini. Apabila fungsi Insert Attribute diklik
atau pun dengan menggunakan shortcut key F9, tetingkap yang pertama (Step 1)
adalah tetingkap untuk memasukkan nilai atau pun maklumat nama blok. Rajah 5.24
menunjukkan maklumat nama blok yang dimasukkan ke dalam pangkalan data.
Rajah 5.24: Tetingkap Insert Attribute – Step 1 digunakan untuk memasukkan
maklumat nama blok
Setelah selesai memasukkan maklumat tersebut, tetingkap kedua akan
dipaparkan. Ini adalah untuk memasukkan nilai atau pun maklumat aras bagi ID nod
yang berkenaan. Ini merupakan Step 2 bagi proses kemasukan atribut. Rajah 5.25
pula menunjukkan gambarajah tetingkap tersebut.
Rajah 5.25: Tetingkap Insert Attribute – Step 2 digunakan untuk memasukkan
maklumat aras
Seterusnya, langkah ketiga ialah proses memasukkan nilai atau maklumat
nombor bilik. Tetingkap seperti sebelumnya akan dipaparkan untuk proses
kemasukan maklumat nombor bilik (Rajah 5.26).
Rajah 5.26: Tetingkap Insert Attribute – Step 3 digunakan untuk memasukkan
maklumat nombor bilik
Akhir sekali ialah proses memasukkan maklumat nama bilik atau nama staff.
Proses yang sama juga diaplikasikan seperti sebelum ini (Rajah 5.27).
Rajah 5.27: Tetingkap Insert Attribute – Step 4 digunakan untuk memasukkan
maklumat nama bilik
Maklumat yang telah siap dimasukkan akan dipaparkan pada text box di
dalam program. Rajah 5.28 menunjukkan contoh nod yang tidak dimasukkan
maklumat atribut dan seterusnya Rajah 5.29 pula menujukkan contoh nod yang
dimasukkan nilai atribut kepadanya.
Rajah 5.28: Contoh nod yang tiada atau pun tidak dimasukkan maklumat atribut
Rajah 5.29: Contoh nod telah dimasukkan maklumat atribut
Maklumat-maklumat atribut yang telah dimasukkan menggunakan fungsi
Insert Attribute dipaparkan di dalam program. Akan tetapi, maklumat ini hanya akan
dipaparkan secara sementara sahaja. Jika program ini ditutup tanpa maklumat ini
disimpan terlebih dahulu, maka maklumat atribut tersebut akan dipadamkan. Ini
kerana bagi mengelakkan sebarang kesilapan berlaku semasa proses memasukkan
maklumat atribut tersebut. Jika maklumat atribut yang dimasukkan disimpan terlebih
dahulu sebelum program ditutup, maka maklumat atribut tersebut akan disimpan
secara kekal. Untuk menyimpan maklumat tersebut, fungsi Stop Editing perlulah
digunakan. Apabila fungsi ini digunakan, satu tetingkap informasi dipaparkan untuk
bertanyakan pada pengguna sama ada pengguna mahu menyimpan (Save) maklumatmaklumat yang telah dimasukkan semasa mod pengeditan diaktifkan (Rajah 5.30).
Jika pengguna memilih Yes, maka maklumat tersebut akan disimpan (Rajah 5.31).
Jika No dipilih, maka maklumat yang dimasukkan akan dipadamkan oleh program.
Rajah 5.30: Tetingkap Save As dipaparkan apabila fungsi Stop Editing diklik
Rajah 5.31: Tetingkap ini dipaparkan untuk menyimpan maklumat atribut yang telah
dimasukkan
Akhir sekali ialah fungsi Clear Data View. Ianya digunakan untuk
mengosongkan program daripada sebarang set data yang telah dimasukkan semasa
menggunakan fungsi Load pada menu File. Fungsi ini juga boleh diaktifkan dengan
menggunakan shortcut key F3.
5.5.3
Menu Find
Di bawah menu ini terdapat satu sub-menu iaitu Search Phrase. Fungsi ini
dibuat bagi memudahkan proses untuk mencari maklumat-maklumat koordinat yang
terdapat di dalam pangkalan data yang digunakan. Rajah 5.32 merupakan sub-menu
yang terdapat di bawah menu Find.
Rajah 5.32: Sub-menu Search Phrase di bawah menu Find
Apabila fungsi ini digunakan, satu tetingkap Find akan dipaparkan. Tetingkap
ini memerlukan pengguna program untuk memasukkan maklumat koordinat yang
hendak dicari. Selepas itu program akan memaparkan nod yang mempunyai nilai
koordinat yang berkenaan. Rajah 5.33 menunjukkan tetingkap Find yang dipaparkan
oleh program.
Rajah 5.33: Tetingkap Find
Pengguna boleh memasukkan nilai dan seterusnya menggunakan butang
arahan Search untuk mencari maklumat koordinat tersebut. Rajah 5.34 merupakan
hasil daripada pencarian yang dilakukan oleh fungsi Find ini.
Rajah 5.34: Hasil pencarian menggunakan fungsi Find
5.5.4
Menu Help
Menu yang terakhir ini hanya mempunyai sub menu About (shortcut key
Ctrl+A) yang digunakan untuk memaparkan maklumat mengenai program ini,
kenapa ianya dibina dan seterusnya maklumat fungsi program (Rajah 5.35).
Rajah 5.35: Fungsi sub menu About pada menu Help
Pada bahagian kanan bawah program, terdapat empat butang arahan untuk
navigasi data di dalam program. Di dalam satu set data MW Database, ianya terdiri
daripada sejumlah set rekod (nod) yang dipaparkan oleh program satu per satu. Oleh
itu, butang arahan bagi navigasi data ini dibina untuk melakukan navigasi data
seperti untuk melihat rekod seterusnya, rekod sebelum, rekod yang terakhir dan juga
rekod yang pertama. Rajah 5.36 menunjukkan butang arahan navigasi data tersebut.
A
B
C
D
Rajah 5.36: Butang arahan untuk navigasi data
Bagi A, butang arahan ini digunakan untuk kembali kepada rekod yang
pertama yang terdapat di dalam MW Database. Apabila program sedang
memaparkan rekod yang pertama, butang arahan ini tidak akan diaktifkan. Ini
menunjukkan bahawa rekod yang sedang dipaparkan adalah rekod yang pertama di
dalam set data tersebut. Butang arahan B digunakan untuk melihat set rekod sebelum
set rekod semasa yang dipaparkan oleh program. Jika rekod yang dipaparkan oleh
program adalah rekod yang pertama, penggunaan butang arahan B ini akan
menyebabkan rekod yang akan dipaparkan seterusnya adalah rekod yang terakhir.
Bagi butang arahan C pula, ianya digunakan untuk melihat set rekod yang seterusnya
di dalam pangkalan data. Jika rekod yang dipaparkan oleh program adalah rekod
yang terakhir, penggunaan butang arahan C ini akan menyebabkan rekod yang akan
dipaparkan seterusnya adalah rekod yang pertama kembali. Akhir sekali ialah butang
arahan D. Butang arahan tersebut adalah untuk melihat set rekod yang terakhir yang
terdapat di dalam MW Database. Apabila rekod semasa yang dipaparkan oleh
program adalah rekod yang terakhir, maka butang arahan ini tidak akan diaktifkan.
Ini adalah bertujuan untuk menunjukkan bahawa rekod semasa yang dipaparkan oleh
program adalah rekod yang terakhir yang terdapat di dalam pangkalan data.
5.6
Paparan dan Penukaran Format bagi Model 3D Bangunan FKSG
Model bangunan yang telah direka bentuk sebelum ini (Rujuk Bab 4), dibina
di dalam fail yang berasingan bagi setiap aras. Oleh itu, bagi hasil akhir iaitu model
3D lengkap bagi bangunan Fakulti Kejuruteraan Dan Sains Geoinformasi (FKSG),
maka setiap fail tersebut perlulah digabungkan (Merge) menjadi satu fail yang
mengandungi kesemua aras dan kesemua elemen seperti permukaan tanah dan objek
spatial yang lain untuk membentuk satu model 3D bangunan yang lengkap dan
realistik.
Daripada Rajah 5.1, dapat dilihat bahawa model 3D bagi bangunan FKSG
perlulah berada di dalam format World (*.wld) atau pun 3DState (*.3Dstate).
Aplikasi utama yang dibangunkan di dalam kajian ini menggunakan enjin 3D State.
Enjin 3D State memerlukan model yang digunakan berformat World atau pun
3DState. Format ini boleh dihasilkan dengan menggunakan converter yang
disediakan bersama-sama dengan SDK enjin 3D State tersebut. Beberapa langkah
dan syarat perlu dipatuhi untuk melakukan proses ini dengan menggunakan
converter tersebut. Rajah 5.37 menunjukkan model 3D bangunan FKSG yang telah
digabungkan untuk membentuk satu bangunan FKSG yang lengkap. Rajah tersebut
ditunjukkan berdasarkan pandangan mengikut blok-blok yang terdapat di dalam
bangunan FKSG.
Pandangan atas
Blok C02
Blok C03
Blok C04
Blok C05
Blok C06
Rajah 5.37: Paparan imej model 3D FKSG mengikut blok-blok
5.7
Aplikasi Utama
Aplikasi utama ini merupakan aplikasi yang dibangunkan khusus untuk
menjalankan analisis rangkaian 3D terhadap set data rangkaian 3D dan memaparkan
laluan yang terpendek iaitu hasil daripada analisis tersebut di dalam persekitaran
objek spatial 3D dengan menggunakan tekstur yang sebenar bagi model 3D tersebut.
Algoritma yang digunakan bagi pengiraan laluan yang terpendek ialah algoritma
Dijkstra. Aplikasi ini juga bukan sahaja memaparkan laluan terpendek di dalam
persekitaran 3D akan tetapi ia juga membenarkan pengguna aplikasi untuk
melakukan navigasi di dalam persekitaran 3D tersebut dengan meniru simulasi
pergerakan manusia di dunia yang sebenar.
Bagi permulaan aplikasi, splash screen akan dipaparkan terlebih dahulu. Ini
bertujuan untuk memberitahu kepada pengguna bahawa aplikasi dalam proses
loading. Di bahagian kanan bawah paparan tersebut menunjukkan status peratusan
proses loading tersebut. Apabila ianya mencecah 100 peratus, maka aplikasi akan
dipaparkan secara automatik dan splash screen tersebut akan dipadamkan.
Maklumat-maklumat lain yang terdapat pada paparan ini merupakan maklumat asas
bagi aplikasi. Rajah 5.38 menunjukkan paparan antara muka splash screen tersebut.
Rajah 5.38: Paparan splash screen pada permulaan aplikasi
Setelah proses load bagi paparan splash screen selesai, paparan utama
aplikasi akan dipaparkan. Antara muka bagi paparan ini adalah seperti Rajah 5.39.
Rajah 5.39: Antara muka utama aplikasi
Aplikasi ini direka bentuk berdasarkan reka bentuk awal yang diterangkan di
dalam Bab 4 (Rajah 4.4). Ia terdiri daripada header, ruangan paparan utama dan juga
butang fungsi atau pun hotspots di bahagian kiri aplikasi.
Maklumat yang terdapat pada header ialah maklumat mengenai nama
bangunan kawasan kajian iaitu bangunan FKSG. Logo Universiti Teknologi
Malaysia (UTM) dimasukkan di dalam header ini sebagai menunjukkan bahawa
FKSG terletak di dalam kawasan UTM. Bagi paparan utama aplikasi, diletakkan
nama aplikasi di tengah-tengah paparan untuk memberitahu kepada pengguna nama
aplikasi tersebut. Bagi hotspot pula, terdapat 9 fungsi yang dibina. Akan tetapi salah
satu fungsi tersebut tidak dipaparkan di dalam Rajah 5.39. Ini adalah kerana fungsi
tersebut hanya akan diaktifkan (dipaparkan) apabila fungsi lain yang berkaitan
digunakan. Fungsi-fungsi yang dibina ialah Home, FKSG Base Plan, 3D Screenshot,
3D Navigation, Database, Shortest Path, Calculate, About dan Log Out. Penerangan
lanjut mengenai kesembilan fungsi ini akan dilakukan selanjutnya.
Fungsi yang pertama iaitu fungsi Home, digunakan untuk memaparkan
kembali nama aplikasi ini sahaja di paparan utama aplikasi. Ini bermakna jika
terdapat paparan lain yang dipaparkan pada paparan utama, maka paparan selain
daripada nama aplikasi akan dipadamkan dan hanya paparan nama aplikasi sahaja
yang akan ditunjukkan. Hasil daripada penggunaan fungsi ini ialah seperti yang
ditunjukkan pada Rajah 5.39.
Bagi setiap fungsi hotspot ini, apabila ianya digunakan (diklik), maka tulisan
bagi setiap hotspot yang digunakan tersebut akan bertukar kepada warna merah. Ini
adalah untuk menunjukkan kepada pengguna aplikasi bahawa pengguna telah
menggunakan fungsi tersebut. Fungsi tersebut masih lagi boleh digunakan cuma
warna tulisan sahaja yang ditukarkan kepada warna merah. Rajah berikut merupakan
fungsi Home yang telah diklik oleh pengguna dan warna tulisannya telah berubah.
Rajah 5.40: Fungsi yang diklik akan bertukar warna tulisannya
Fungsi yang kedua ialah fungsi FKSG Base Plan. Fungsi ini dibina bertujuan
untuk menunjukkan paparan bangunan FKSG secara keseluruhan bagi memudahkan
pengguna aplikasi untuk mengetahui kedudukan mereka di dalam bangunan. Apabila
fungsi ini digunakan, satu paparan baru ditunjukkan kepada pengguna. Paparan ini
menunjukkan imej pandangan daripada atas (Planiteric View) bagi bangunan FKSG.
Setiap blok-blok yang ada akan ditandakan nama blok masing-masing (Rajah 5.41).
Rajah 5.41: Paparan bagi fungsi FKSG Base Plan
Paparan pada Rajah 5.41, pengguna boleh melihat gambar model 3D bagi
setiap model tersebut. Pengguna hanya perlu menggerakkan cursor ke nama-nama
blok tersebut. Tulisan bagi nama blok yang ditunjukkan oleh cursor akan dipaparkan
imej model 3D bagi blok tersebut di dalam paparan tersebut (Rajah 5.42).
Rajah 5.42: Cursor diarahkan ke tulisan C02 dan imej model 3D blok C02
dipaparkan
Setelah selesai menggunakan fungsi FKSG Base Plan, butang arahan OK
yang terdapat pada paparan digunakan untuk keluar daripada paparan ini. Ia akan
kembali kepada antara muka utama aplikasi.
Fungsi yang ketiga ialah fungsi 3D Screenshot. Fungsi ini bertujuan untuk
memberikan beberapa snapshots bagi model bangunan 3D yang dibina. Pengguna
boleh melihat beberapa imej-imej daripada proses penyediaan model bangunan 3D
sehingga model bangunan 3D yang lengkap. Rajah 5.43 menunjukkan paparan yang
dikeluarkan apabila fungsi 3D Screenshot digunakan.
Rajah 5.43: Paparan imej snapshot model 3D bagi fungsi 3D Screenshot
Terdapat 11 imej yang disediakan. Pengguna boleh menggunakan butang
navigasi yang terdapat di bahagian bawah paparan untuk melakukan navigasi bagi
melihat imej-imej yang disediakan (rujuk Rajah 5.44). Butang A digunakan untuk
melihat imej pertama yang disediakan (11 imej). Manakala butang B pula digunakan
untuk melihat imej yang seterusnya dan butang C untuk melihat imej yang
sebelumnya. Akhir sekali ialah butang D untuk melihat imej yang terakhir yang
disediakan di dalam paparan ini.
A
B
C
D
Rajah 5.44: Butang navigasi bagi melihat imej-imej snapshot
Terdapat satu butang arahan yang diletakkan di dalam paparan ini. Butang
tersebut ialah butang Flythrough (Rajah 5.45). Ia berfungsi untuk memberikan satu
flythrough di dalam bangunan kawasan kajian (FKSG). Apabila butang arahan ini
digunakan satu paparan fail video bagi flythough tersebut akan dimainkan secara
automatik.
Rajah 5.45: Butang arahan Flythrough
Pada paparan bagi memainkan fail video flythrough, terdapat beberapa fungsi
multimedia yang asas disediakan di sebelah kiri paparan. Ianya boleh dilakukan
untuk melihat video tersebut atau melakukan ulangan dan sebagainya. Rajah 5.46
menunjukkan paparan Flythrough termasuk fungsi multimedia yang dinyatakan
sebelum ini.
Rajah 5.46: Paparan fungsi arahan Flythrough
Untuk kembali kepada paparan utama aplikasi, butang arahan OK dan Cancel
boleh digunakan untuk menutup paparan yang dibuka sebelum ini.
Fungsi hotspot yang keempat ialah fungsi 3D Navigation. Fungsi ini
bertujuan untuk membenarkan pengguna melakukan navigasi di dalam persekitaran
3D bangunan FKSG tanpa melakukan analisis rangkaian 3D. Apabila fungsi ini
diklik, maka paparan navigasi 3D akan dipaparkan dan pengguna boleh melakukan
navigasi dengan menggunakan anak panah yang terdapat pada papan kekunci. Fungsi
ini hampir menyamai dengan fungsi Calculate. Akan tetapi fungsi Calculate
melibatkan pengiraan analisis rangkaian 3D. Bagi tujuan navigasi pula ianya sama
dengan fungsi 3D Navigation cuma fungsi Calculate akan memaparkan laluan yang
terpendek untuk ke lokasi destinasi secara grafik. Rajah 5.47 merupakan paparan
antara muka bagi fungsi 3D Navigation. Penerangan secara terperinci mengenai
navigasi ini akan dilakukan pada penerangan fungsi Calculate.
Rajah 5.47: Paparan antara muka 3D Navigation
Fungsi seterusnya ialah fungsi Database. Jika dirujuk pada Rajah 5.1,
aplikasi yang dibangunkan ini memerlukan dua set data spatial iaitu model bangunan
3D dan juga maklumat rangkaian 3D. Oleh itu, fungsi Database ini bertujuan untuk
mengsetkan pangkalan data yang hendak digunakan. Terdapat dua set data yang
perlu disetkan di dalam fungsi ini. Dua set tersebut ialah maklumat pangkalan data
rangkaian 3D (*.MW) dan juga model 3D (*.3dstate atau *.wld). Rajah 5.48
menunjukkan paparan fungsi tersebut.
Rajah 5.48: Konfigurasi pangkalan data bagi kegunaan aplikasi
Daripada Rajah 5.48, konfigurasi yang boleh dilakukan ialah konfigurasi
terhadap MW Database (3D network data) dan juga Environment Setting (3D model
environment). Ini bermakna set data boleh ditukar kepada set data yang lain selain
daripada data yang default. Bagi tujuan tersebut, pengguna boleh menggunakan
arahan Open yang terdapat di sebelah kanan program. Rajah 5.49 menunjukkan
arahan Open tersebut. Pengguna perlu mencari fail yang berkenaan/berkaitan untuk
dimasukkan ke dalam aplikasi. Rajah 5.50 pula menunjukkan tetingkap Open File
yang dipaparkan selepas arahan Open digunakan.
Rajah 5.49: Arahan Open digunakan untuk mencari fail rangkaian atau model 3D
Rajah 5.50: Tetingkap Open File dipaparkan untuk mencari fail rangkaian 3D dan
model spatial 3D
Setiap konfigurasi tersebut perlulah disimpan (save setting) terlebih dahulu.
Jika konfigurasi tersebut tidak disimpan, maka konfigurasi yang lama akan
digunakan dan konfigurasi baru tidak akan dimasukkan ke dalam aplikasi. Setiap kali
data baru disetkan di dalam paparan Database ini, maka arahan simpan (save setting)
akan dipaparkan (Rajah 5.51). Jika tidak, arahan tersebut tidak akan diaktifkan. Ini
bertujuan untuk memberitahu kepada pengguna aplikasi bahawa terdapat perubahan
set data dalam paparan Database dibandingkan dengan data default sebelumnya.
Rajah 5.51: Arahan Save Setting diaktifkan selepas data yang baru disetkan di dalam
paparan Database ini
Satu tetingkap informasi akan dipaparkan selepas pengguna mengklik arahan
Save Setting tersebut (Rajah 5.52). Ini untuk memberitahu kepada pengguna aplikasi
bahawa set data yang baru telah dimasukkan/digunakan di dalam aplikasi.
Seterusnya, setelah selesai, pengguna boleh kembali kepada paparan utama aplikasi
dengan mengklik butang OK pada bahagian kanan bawah paparan Database.
Rajah 5.52: Tetingkap informasi untuk menyatakan set data yang baru telah
dimasukkan ke dalam aplikasi utama
Hotspot yang keenam ialah fungsi Shortest Path. Fungsi ini berkait rapat
dengan fungsi yang ketujuh iaitu fungsi Calculate. Apabila fungsi Shortest Path
digunakan, maka dengan secara automatiknya fungsi Calculate akan diaktifkan. Ini
adalah kerana fungsi Shortest Path adalah untuk mengsetkan elemen-elemen
kedudukan lokasi semasa dengan lokasi destinasi sebelum melakukan kiraan analisis
rangkaian 3D. Apabila elemen-elemen tersebut telah disetkan, maka pengiraan bagi
analisis boleh dilakukan dengan menggunakan fungsi Calculate.
Rajah 5.53: Fungsi Shortest Path
Rajah 5.53 menunjukkan paparan yang dikeluarkan apabila fungsi Shortest
Path digunakan. Terdapat dua medan yang perlu diisi oleh pengguna sebelum
analisis dapat dijalankan. Medan tersebut ialah nama bilik atau nama staff bagi
kedudukan semasa pengguna dengan lokasi destinasi yang hendak dituju pengguna.
Pengguna hanya perlu memilih daripada Drop down list yang terdapat pada keduadua medan tersebut. Drop down list tersebut mengandungi nama-nama staff/bilik
yang terdapat di dalam bangunan kawasan kajian. Nama-nama yang dimasukkan ke
dalam drop down list tersebut adalah maklumat daripada pangkalan data MW yang
dimasukkan ke dalam aplikasi. Set data yang berbeza akan memaparkan nama-nama
yang berbeza bagi senarai drop down list tersebut. Rajah 5.54 menunjukkan senarai
nama-nama yang terdapat di dalam drop down list bagi medan-medan tersebut.
Rajah 5.54: Sebahagian nama-nama yang terdapat di dalam drop down list
Bagi pengguna yang kurang pasti mengenai kedudukan yang ingin dicarinya,
fungsi Search yang disediakan boleh digunakan sebagai pencarian lanjutan (Advance
Search). Fungsi ini digunakan untuk filtering maklumat atribut yang ada di dalam
pangkalan data berdasarkan maklumat blok, aras bangunan, nombor bilik dan juga
nama staff atau bilik. Rajah 5.55 menunjukkan paparan pencarian lanjutan yang
dibincangkan ini.
Rajah 5.55: Fungsi Search untuk mencari maklumat atribut secara filtering
Terdapat empat medan yang ada paparan tersebut. Medan yang dimaksudkan
ialah medan nama blok, aras, nombor bilik dan juga nama staff/bilik. Jika
diperhatikan, drop down list bagi medan aras, nombor bilik dan juga nama bilik
adalah kosong. Akan tetapi berbeza pula bagi medan nama blok. Ini adalah kerana
pengguna perlu memasukkan nama blok terlebih dahulu dan kemudiannya medanmedan yang lain akan ditapis (filter) berdasarkan medan nama blok. Sebagai contoh,
nama blok yang dimasukkan ialah C05, maka aras yang akan dipaparkan pada medan
aras adalah berdasarkan atribut yang melibatkan blok C05 sahaja. Rajah 5.26
menunjukkan situasi tersebut.
Rajah 5.56: Aras yang ditapis berdasarkan nama blok
Begitu juga bagi nombor bilik. Maklumat pada medan aras perlulah terlebih
dahulu disetkan supaya maklumat nombor bilik yang akan dipaparkan hanya
berdasarkan atribut yang terdapat pada blok dan aras yang berkenaan sahaja (Rajah
5.57).
Rajah 5.57: Nombor bilik yang ditapis berdasarkan nama blok dan aras
Setelah ketiga-tiga medan tersebut dipenuhi, maka nama bilik atau staf yang
akan dipaparkan di dalam drop down list adalah nama yang memenuhi ketiga-tiga
syarat medan nama blok, aras dan juga nombor bilik. Sebagai contoh, nama bilik
yang memenuhi syarat nama blok = C05, aras = 4 dan nombor bilik = 405-05 adalah
Bilik Seminar Geomatik 2 (Rajah 5.58).
Rajah 5.58: Nama bilik yang ditapis berdasarkan nama blok, aras dan nombor bilik
Setelah kesemua medan bagi nama blok, aras, nombor bilik dan nama
bilik/staff diisi, maka perkara seterusnya ialah untuk menggunakan maklumat
tersebut pada fungsi Shortest Path (medan lokasi semasa atau medan lokasi
destinasi). Pada paparan fungsi Search ini telah dibina satu fungsi yang tidak
memerlukan pengguna aplikasi menghafal nama staff yang terdapat pada paparan
Search dan mengisikan maklumat tersebut pada paparan Shortest Path (medan lokasi
semasa atau medan lokasi destinasi). Fungsi tersebut adalah fungsi Acquire (Rajah
5.59). Dengan menggunakan fungsi ini, maklumat-maklumat tersebut (yang terdapat
pada pada paparan Search) akan dimasukkan ke dalam medan nama bilik/staff bagi
medan lokasi semasa atau medan lokasi destinasi pada paparan Shortest Path.
Rajah 5.59: Fungsi Acquire pada paparan Search
Rajah 5.60 menunjukkan maklumat yang terdapat pada paparan Search
dipindahkan ke medan di dalam paparan Shortest Path.
Rajah 5.60: Fungsi Acquire yang memindahkan maklumat pada paparan Search ke
medan nama staff/bilik paparan Shortest Path
Sebelum ini ada dinyatakan bahawa fungsi Calculate hanya akan diaktifkan
jika fungsi Shortest Path digunakan. Untuk menggunakan fungsi Calculate, syarat
utama yang mesti dipatuhi ialah maklumat lokasi destinasi dan maklumat lokasi
semasa mestilah diisi terlebih dahulu sebelum pengiraan analisis rangkaian 3D
dilakukan. Jika tidak tetingkap amaran akan dikeluarkan oleh aplikasi untuk memberi
amaran bahawa syarat yang dikehendaki tidak dipenuhi. Rajah 5.61 menunjukkan
amaran tersebut.
Rajah 5.61: Amaran yang dipaparkan kerana syarat utama bagi fungsi Calculate
tidak dipenuhi
Maklumat-maklumat ini diperlukan oleh analisis dan algoritma yang bakal
dijalankan untuk menentukan lokasi semasa dan destinasi yang dituju supaya jalan
yang terpendek untuk ke lokasi destinasi boleh dikira.
Setelah maklumat-maklumat utama tersebut dipenuhi, maka fungsi Calculate
boleh dijalankan dengan sempurna. Pengiraan bagi analisis rangkaian 3D akan
mengambil masa sedikit. Setelah selesai satu paparan statistik pengiraan analisis
rangkaian 3D dipaparkan.
Rajah 5.62: Paparan statistik pengiraan algoritma Dijkstra
Daripada Rajah 5.62, statistik ini memaparkan beberapa maklumat mengenai
analisis rangkaian 3D tersebut. Maklumat tersebut ialah seperti Status, Date, Time
Executed, Processing Stopped, Nodes Calculated, Nodes Used, Distance (Shortest),
informasi lokasi semasa dan juga informasi lokasi destinasi. Status merupakan
maklumat mengenai status pengiraan yang dijalankan sama ada berjaya atau pun
tidak berjaya yang bermaksud tiada jalan yang menghubungkan antara lokasi semasa
dengan lokasi destinasi yang hendak dituju. Bagi data rangkaian yang tidak lengkap
(corrupted) maka status yang dipaparkan ialah stopped (dihentikan). Ini
menunjukkan bahawa data yang digunakan tidak lengkap dan analisis (algoritma
Dijsktra) tidak dapat dijalankan. Date merupakan maklumat tarikh analisis tersebut
dijalankan. Time Executed dan Processing Stopped merupakan maklumat masa
pengiraan dimulakan dan masa pengiraan ditamatkan. Ini adalah bertujuan untuk
melihat sela masa yang diambil untuk menjalankan analisis tersebut. Sela masa ini
adalah bergantung kepada jumlah nod yang terdapat di dalam pangkalan data 3D
iaitu MW Database.
Nodes Calculated pula memaparkan maklumat mengenai jumlah nod (nod)
yang dikira oleh algoritma Dijkstra semasa melakukan analisis. Tidak semua nod
yang dikira oleh algoritma Dijkstra akan dipilih sebagai nod yang berada di laluan
yang terpendek. Hanya beberapa nod sahaja daripada jumlah nod yang dikira akan
termasuk di dalam laluan yang terpendek tersebut. Nodes Used merupakan maklumat
mengenai jumlah nod-nod yang terpilih yang berada di dalam laluan terpendek
tersebut. Jumlah Nodes Used adalah mesti kurang atau sama dengan jumlah Nodes
Calculated dan tidak boleh lebih. Maklumat Distance (Shortest) pula memaparkan
maklumat mengenai jarak antara lokasi semasa dengan lokasi destinasi yang
ditetapkan oleh pengguna. Nilai jarak tersebut adalah dalam nilai piawaian meter.
Di bahagian bawah paparan statistik ini terdapat maklumat mengenai lokasi
semasa dan lokasi destinasi yang telah ditetapkan oleh pengguna aplikasi. Maklumatmaklumat yang dipaparkan adalah maklumat seperti set koordinat bagi lokasi
tersebut (x, y dan z), nama bilik/staff, nombor bilik, aras dan juga nama blok bagi
setiap lokasi (semasa dan destinasi). Ini bertujuan untuk memaparkan kepada
pengguna aplikasi sama ada pengiraan yang dilakukan adalah betul dan memenuhi
kehendak pengguna tersebut.
Jika diperhatikan pada Rajah 5.62, di bahagian kanan atas paparan statistik
tersebut terdapat 3 paksi dilukiskan bersebelahan dengan maklumat statistik
pengiraan analisis. Paksi tersebut adalah paksi x, y dan z. Ia sebenarnya merupakan
sebuah graf yang akan melukiskan kesemua jaringan rangkaian 3D yang terdapat
dalam MW Database yang digunakan. Jaringan rangkaian 3D yang dilukiskan di
dalam graf tersebut diwarnakan dengan warna kuning. Akan tetapi di dalam graf itu
juga dilukiskan rangkaian atau pun laluan yang terpendek yang dipilih oleh algoritma
ketika melakukan analisis rangkaian 3D tersebut. Jaringan yang terpilih ini
diwarnakan dengan warna merah. Ini adalah bertujuan untuk memberikan warna
yang menonjol daripada warna keseluruhan rangkaian yang terdapat di dalam MW
Database (yang diwarnakan dengan warna kuning). Paparan yang lengkap mengenai
statistik ini akan ditunjukkan selanjutnya pada topik keputusan analisis yang
dijalankan.
Terdapat dua arahan di bahagian kanan (bawah) paparan statistik tersebut.
Arahan tersebut ialah arahan Navigation dan arahan Cancel (rujuk Rajah 5.63).
Arahan Navigate digunakan untuk pengguna melakukan navigasi di dalam
persekitaran 3D. Ia mempunyai persamaan dengan fungsi hotspot 3D Navigation.
Perbezaannya ialah, arahan Navigate ini akan membenarkan pengguna melakukan
navigasi berserta dengan maklumat laluan yang terpendek daripada lokasi semasa ke
lokasi destinasi. Pengguna akan disetkan di lokasi semasa dan seterusnya laluan yang
terpendek tersebut akan dipaparkan dengan simbol anak panah yang terdapat pada
permukaan lantai dan anak panah tersebut akan menunjukkan arah ke lokasi
destinasi. Pengguna hanya perlu mengikut anak panah tersebut untuk ke lokasi
destinasi (rujuk Rajah 5.64). Arahan Cancel pula digunakan untuk kembali kepada
paparan utama aplikasi utama.
Rajah 5.63: Arahan Navigate dan Cancel
Apabila navigasi 3D diaktifkan tidak kiralah sama ada menggunakan fungsi
hotspot 3D Navigation atau pun arahan Navigate ini, dengan secara automatik fungsi
hotspot bagi fungsi Database tidak akan diaktifkan. Ini adalah kerana persekitaran
bangunan/model 3D telah dimuatkan ke dalam aplikasi. Maka pangkalan data yang
telah dikonfigurasikan tidak boleh diubahsuai untuk mengelakkan daripada
berlakunya kesilapan (program crash).
Pada paparan antara muka navigasi 3D, terdapat beberapa maklumat yang
dipaparkan pada sebelah kanan antara muka tersebut (Rajah 5.64). Maklumatmaklumat tersebut adalah mengenai koordinat lokasi semasa (ketika melakukan
navigasi) yang terdiri daripada koordinat x, y dan z. Maklumat status bagi navigasi
juga turut dipaparkan untuk menunjukkan sama ada pengguna sedang bergerak ke
hadapan atau ke belakang dan ke kiri atau ke kanan. Maklumat-maklumat lain ialah
maklumat lokasi semasa (asal) dan maklumat lokasi yang hendak dituju (destinasi)
Rajah 5.64: Paparan Navigasi 3D
Hotspot About merupakan salah satu fungsi yang dibina untuk menerangkan
mengenai tujuan dan mengapa aplikasi utama ini dibina. Tiada analisis yang dapat
dilakukan di dalam fungsi ini. Hanya satu paparan baru akan ditunjukkan bagi
memaparkan maklumat yang dinyatakan sebelum ini. Rajah 5.65 menunjukkan
paparan tersebut.
Rajah 5.65: Paparan bagi fungsi About
Hotspot yang terakhir ialah fungsi Log Out. Fungsi ini digunakan untuk
keluar daripada aplikasi ini. Aplikasi akan ditutup dan segala memori sementara
yang disetkan di dalam memori sementara komputer akan dikosongkan.
5.8
Analisis Rangkaian 3D
Hasil pengiraan bagi analisis rangkaian yang menggunakan algoritma
Dijkstra adalah dalam bentuk format nombor-nombor sahaja. Bagi pengguna yang
tidak tahu langkah kerja pengiraan algoritma Dijkstra, agak sukar untuk memahami
keputusan analisis yang berada di dalam format nombor-nombor tersebut. Bagi
memudahkan pengguna memahami hasil analisis tersebut, persembahan secara grafik
bagi hasil analisis adalah yang terbaik. Justeru itu, hasil analisis rangkaian 3D di
dalam kajian ini dipersembahkan secara grafik 3D. Jika dirujuk daripada Rajah 5.1,
hasil analisis terdiri daripada statistik pengiraan algoritma Dijkstra dan juga navigasi
di dalam persekitaran objek spatial 3D. Langkah kerja bagi memaparkan kedua-dua
maklumat ini telah diterangkan di dalam sub topik 5.7. Penerangan yang dibuat
selanjutnya di dalam topik ini pula adalah mengenai contoh atau pun gunapakai
aplikasi utama kajian dengan menggunakan set data spatial 3D yang ada dan
seterusnya dijalankan analisis rangkaian 3D. Keputusan dan hasil akan diterangkan
bersama-sama dengan langkah kerja yang dibuat.
Langkah pertama sebelum melakukan analisis rangkaian ialah aplikasi utama
perlulah terlebih dahulu diloadkan ke dalam komputer. Setelah selesai, pastikan set
data bagi pangkalan data jaringan rangkaian 3D (MW Database) dan juga
persekitaran model spatial 3D (*.3dstate) dikonfigurasi dengan betul. Ianya boleh
dilakukan dengan menggunakan fungsi hotspot Database (Rajah 5.66).
Rajah 5.66: Konfigurasi set data yang digunakan adalah penting sebelum melakukan
analisis rangkaian 3D
Setelah pangkalan data yang hendak digunakan telah dikonfigurasi dengan
betul, maka analisis rangkaian 3D boleh dijalankan. Dengan menggunakan fungsi
hotspot Shortest Path, beberapa medan maklumat perlu diisi sebagai syarat wajib
sebelum melakukan analisis.
Medan yang perlu diisi tersebut ialah medan nama bilik/staff bagi lokasi
semasa dan juga lokasi destinasi yang hendak dituju. Sebagai contoh, lokasi semasa
pengguna ialah di bilik Satellite Navigation Research Group (SNAG). Lokasi yang
hendak dituju atau pun lokasi destinasi pula ialah bilik Hydro I and Hydro II Lecture
Room. Maka medan-medan yang terdapat pada paparan Shortest Path perlulah diisi
dengan maklumat-maklumat tersebut (rujuk Rajah 5.67).
Rajah 5.67: Lokasi semasa disetkan Satellite Navigation Research Group (SNAG)
dan lokasi destinasi disetkan Hydro I and Hydro II Lecture Room sebelum
melakukan pengiraan analisis rangkaian 3D
Setelah selesai, hotspot Calculate digunakan bagi menjalankan pengiraan
laluan yang terpendek. Satu paparan mengenai statistik pengiraan algoritma Dijkstra
akan ditunjukkan (Rajah 5.68).
Rajah 5.68: Statistik pengiraan algoritma Dijkstra hasil daripada pengiraan laluan
yang terpendek daripada bilik Satellite Navigation Research Group (SNAG) ke lokasi
destinasi iaitu bilik Hydro I and Hydro II Lecture Room
Daripada Rajah 5.68, didapati bahawa status pengiraan tersebut adalah
berjaya (Success). Ia mengambil masa pengiraan selama 3 saat. Jumlah nod (nod)
yang dikira sepanjang pengiraan ialah sebanyak 396 nod dan jumlah nod yang berada
pada laluan yang terpendek ialah 47 nod. Ini bermakna 47 nod yang dipilih akan
membentuk laluan (rangkaian) yang terpendek untuk ke lokasi destinasi daripada
lokasi semasa. Seterusnya rangkaian yang terpilih tersebut memberikan jarak sejauh
168.1286 meter.
Rajah 5.69: Paparan graf hasil pengiraan algoritma Dijkstra
Graf pada Rajah 5.69 menunjukkan laluan yang terpendek di dalam rangkaian
ditandakan dengan warna merah. Manakala jaringan (laluan) yang tidak dikelaskan
di dalam laluan yang terpendek diwarnakan dengan warna kuning. Di bahagian
bawah paparan terdapat maklumat mengenai lokasi semasa dan juga lokasi destinasi.
Lokasi semasa berada pada blok C06 aras 4 dan lokasi destinasi berada pada blok
C04 aras 1.
Untuk melakukan navigasi di dalam persekitaran 3D arahan Navigate
digunakan. Aplikasi memerlukan sedikit masa untuk menjalankan enjin grafik 3D
yang digunakan di dalam kajian ini. Setelah selesai, antara muka navigasi 3D akan
dipaparkan seperti Rajah 5.70 berikut:
Rajah 5.70: Lokasi awal disetkan di lokasi semasa yang ditetapkan pengguna pada
permulaan analisis iaitu di bilik Satellite Navigation Research Group (SNAG)
Lokasi awal yang dipaparkan ialah lokasi semasa yang ditetapkan oleh
pengguna aplikasi semasa permulaan analisis iaitu di bilik Satellite Navigation
Research Group (SNAG). Seterusnya, laluan jalan yang terpendek (rangkaian)
tersebut ditunjukkan oleh anak panah yang mengarah ke lokasi destinasi. Anak panah
tersebut sebenarnya berada pada laluan yang terpendek yang dikira oleh algoritma
Dijkstra. Anak panah tersebut dilukis oleh aplikasi sehingga ia sampai lokasi
destinasi. Apabila tiba ke lokasi destinasi, ianya ditandakan dengan tanda OK untuk
menandakan bahawa pengguna telah tiba ke lokasi destinasi yang dituju (Rajah
5.71).
Rajah 5.71: Lokasi destinasi (Hydro I and Hydro II Lecture Room) akan ditandakan
dengan OK bagi menunjukkan pengguna telah tiba ke lokasi destinasi
Arahan untuk melakukan navigasi di dalam persekitaran 3D ialah dengan
menggunakan anak panah yang terdapat pada papan kekunci (Rajah 5.72).
A
B
C
D
Rajah 5.72: Anak panah yang terdapat pada papan kekunci
Navigasi di dalam paparan ini mengikut simulasi pergerakan manusia
(pejalan kaki). Oleh itu, navigasi yang dilakukan di dalam paparan ini adalah seperti
berjalan kaki di dalam bangunan FKSG. Oleh itu, kekunci kiri (A) pada Rajah 5.72
digunakan untuk pusing ke kiri. Bagi kekunci atas dan bawah (B dan C) pula, ianya
digunakan untuk bergerak ke hadapan dan ke belakang masing-masing. Akhir sekali
kekunci kanan (D) digunakan untuk pusing ke kanan. Keempat-empat anak panah
pada papan kekunci komputer ini perlu digunakan untuk melakukan navigasi di
dalam persekitaran objek spatial 3D iaitu bangunan FKSG.
Bagi navigasi pengguna (pergerakan ke hadapan dan ke belakang), aplikasi
akan memainkan bunyi pergerakan kaki yang berbunyi seolah-olah seperti manusia
sedang berjalan di dalam bangunan. Apabila pengguna melanggar dinding atau pun
objek besar yang menghalang laluan navigasi, fail bunyi seperti bunyi manusia
melanggar dinding akan dimainkan. Bunyi-bunyi dimasukkan ke dalam aplikasi
adalah bertujuan untuk menjadikan proses navigasi 3D yang dilakukan menjadi lebih
realistik di samping menggunakan tekstur yang sebenar bagi model bangunan 3D
FKSG.
Terdapat beberapa fungsi lain yang ditambah di dalam navigasi 3D ini. Di
antaranya ialah pengguna boleh mendongak dan tunduk untuk melihat keadaan
sekeliling semasa melakukan navigasi. Ini boleh dilakukan dengan menggunakan
kekunci A dan kekunci Z yang terdapat pada papan kekunci komputer. Kekunci A
digunakan untuk mendongak, manakala kekunci Z digunakan untuk tunduk. Selain
itu kekunci F3 pada papan kekunci komputer boleh digunakan untuk paparan Help.
Satu tetingkap informasi akan dibuka dan beberapa maklumat asas mengenai
navigasi 3D ini akan ditunjukkan (Rajah 5.73).
Rajah 5.73: Tetingkap informasi mengenai maklumat asas navigasi
Terdapat satu fungsi yang dibina bagi membantu pengguna untuk melakukan
navigasi. Fungsi tersebut ialah fungsi yang memaparkan peta 2D pada paparan
navigasi. Ini adalah bertujuan untuk memberikan pengguna satu pandangan atas
(plan view) semasa melakukan navigasi (rujuk Rajah 5.74).
Rajah 5.74: Peta 2D menunjukkan pandangan plan (Plan View)
Jika dilihat pada peta 2D tersebut terdapat 2 bulatan kecil yang berwarna
merah dan hijau. Bulatan yang berwarna merah adalah kedudukan semasa pengguna
pada ketika itu. Bulatan merah ini akan sentiasa bergerak mengikut lokasi koordinat
pengguna bergerak. Manakala bulatan hijau pula menandakan lokasi tersebut adalah
lokasi yang hendak dituju atau pun lokasi destinasi. Namun begitu, ini merupakan
paparan peta 2D yang mempunyai limitasi-limitasi yang tertentu dan bukannya peta
3D. Ianya bertujuan untuk memudahkan pergerakan atau pun navigasi pengguna.
Fungsi paparan peta 2D ini boleh diaktifkan dengan menggunakan kekunci M pada
papan
kekunci
komputer.
Manakala
kekunci
P
digunakan
untuk
tidak
mengaktifkannya.
Setelah selesai menggunakan/melakukan navigasi di dalam persekitaran 3D,
maka untuk ke paparan utama aplikasi, kekunci Escape (Esc) digunakan untuk
menutup paparan navigasi 3D tersebut.
5.9
Rumusan
Penulisan di dalam bab ini menekankan kepada proses dan langkah kerja
dalam menggunakan program-program yang dibina serta aplikasi utama dalam
menjalankan analisis rangakain 3D terhadap set data rangakaian 3D. Setiap langkah
diterangkan dengan teratur dan hasil serta keputusan kajian ditunjukkan. Contoh
yang bersesuian diambil dan digunakan bagi melakukan analisis tersebut. Rumusan
yang boleh dibuat ialah algoritma Dijkstra yang dicipta dan diimplementasikan
terhadap graf rangkaian 2D boleh diimplementasikan terhadap set data rangkaian 3D
yang mempunyai maklumat atau pun elemen ketiga iaitu elemen ketinggian (height z). Setiap maklumat asas bagi keperluan algoritma perlu disediakan sebelum
menjalankan algoritma tersebut. Penerangan selanjutnya mengenai kesimpulan
kajian dan cadangan bagi kajian lanjutan akan dilakukan pada bab yang seterusnya.
BAB 6
KESIMPULAN DAN CADANGAN
6.1
Pendahuluan Bab
Di dalam bab ini, perbincangan secara keseluruhan mengenai kajian ini akan
dibincangkan. Pengulasan oleh penulis mengenai permasalahan yang berlaku semasa
kajian dijalankan akan dilakukan di samping memberikan cadangan-cadangan yang
berkaitan dengan kajian ini bagi kajian lanjutan supaya dapat menambahkan lagi
bahan-bahan bertulis serta mempelbagaikan lagi bidang-bidang yang berkaitan
dengan GIS 3D secara umumnya dan analisis rangkaian 3D secara khususnya.
6.2
Kesimpulan dan Ulasan
Pembangunan analisis rangkaian 3D yang dibangunkan di dalam kajian ini
menunjukkan perkaitan antara algoritma Dijkstra dan juga bidang GIS itu sendiri.
Pengimplementasian algoritma Dijkstra dicipta berdasarkan permasalahan graf
matematik 2D. Bidang GIS sememangnya menggunakan algoritma ini di dalam
pengiraan laluan yang terpendek bagi data spatial 2D. Hubung kait di antara
algoritma tersebut dengan bidang GIS adalah keperluan algoritma tersebut. Terdapat
hubungan timbal balik yang memenuhi keperluan GIS dan juga algoritma Dijkstra.
Sebagai mana yang dibincangkan di dalam bab-bab yang lepas, kriteria yang
diperlukan oleh algoritma tersebut memang terdapat pada data-data yang digunakan
oleh GIS. Setelah kajian dilakukan, kini algoritma tersebut terbukti berkemampuan
untuk diimplementasikan ke dalam rangkaian 3D. Percubaan ke atas data rangkaian
3D merupakan kajian awal bagi melihat kemampuan algoritma tersebut. Maka
dengan secara tidak langsung, analisis bagi algoritma tersebut dapat dijalankan
dengan jayanya.
Hasil pengiraan bagi analisis laluan terpendek adalah dalam bentuk nombornombor pengiraan sahaja. Bagi menghasilkan keputusan yang mudah difahami dan
jelas untuk diinterpretasikan, maka persembahan secara grafik perlu dilakukan.
Justeru itu, navigasi di dalam persekitaran 3D serta paparan laluan yang terpendek
(hasil daripada analisis) dibina bagi kemudahan pengguna. Dengan mengadaptasikan
simulasi pergerakan manusia, pengguna boleh melakukan navigasi di dalam
persekitaran 3D aplikasi seperti seolah-olah pengguna sedang berjalan di dalam
dunia realiti yang sebenar. Penggunaan tekstur sebenar bagi bangunan kawasan
kajian menambahkan lagi keadaan yang lebih realistik semasa melakukan navigasi
3D.
Analisis rangkaian 3D ini boleh digunakan dalam pelbagai bidang dan situasi.
Analisis ini berguna bagi tujuan perancangan, pengurusan malah juga penting bagi
tujuan pembinaan (construction). Pendekatan di dalam kajian ini juga amat berguna
kepada agensi-agensi yang memerlukan proses navigasi yang kompleks bagi tujuan
misi kecemasan dan keselamatan, evacuations dan lain-lain yang menjurus kepada
bidang pengurusan bencana. Di antara bidang-bidang lain yang berpotensi
menggunakan analisis ini adalah seperti:
a. Perancangan explorasi dan juga pembangunan,
b. Reka bentuk saliran paip,
c. Operasi menggerudi dan fasiliti,
d. Rawatan dan pengurusan sisa kumbahan,
e. Keboleh gunaan dan keselamatan saliran paip,
f. Kecemasan (tumpahan minyak)
g. Pengurusan bencana (pelan tindak)
h. Keselamatan dan juga kesihatan.
Secara kesimpulannya, kajian-kajian ke arah GIS 3D masih lagi dijalankan
oleh penyelidik-penyelidik lain. Pelbagai perkara perlu dikaji sebelum analisis GIS
3D ini boleh diaplikasikan terhadap situasi permasalahan sebenar. Pelbagai isu
seperti pembangunan pangkalan data 3D, topologi objek 3D, visualisasi 3D dan
analisis 3D perlu diberikan penekanan sebelum diimplementasikan di dalam sistem
sebenar. Kajian bagi tesis ini lebih menjurus ke arah membina struktur asas bagi
mencari penyelesaian yang terbaik untuk melakukan analisis rangkaian 3D. Struktur
ini boleh ditambah baik dengan kajian-kajian lanjutan dengan melihat aspek-aspek
potensi, keberkesanan dan juga pengoptimaan analisis.
6.3
Masalah yang Dihadapi
Masalah-masalah yang dinyatakan di dalam penulisan ini adalah bertujuan
untuk berkongsi maklumat dengan penyelidik-penyelidik GIS pada masa akan datang
yang mungkin akan melakukan kajian lanjutan atau pun kajian yang berkaitan supaya
masalah-masalah yang dinyatakan ini dapat diatasi dan dapat mengoptimakan lagi
prestasi bagi kajian yang dilakukan. Masalah-masalah yang dihadapi adalah seperti
berikut:
i)
Enjin 3D yang digunakan di dalam kajian ini memerlukan sejenis fail yang
dinamakan fail BSP dihasilkan pada permulaan navigasi 3D bagi setiap set
data yang digunakan buat pertama kalinya. Proses menghasilkan fail ini
memakan masa lama bagi pemprosesannya dan ia bergantung kepada saiz fail
tersebut. Oleh itu penulis terpaksa menunggu setiap proses tersebut selesai
sebelum ke proses-proses yang lain.
ii)
Proses permodelan objek 3D memerlukan penelitian yang terperinci.
Maklumat-maklumat berkaitan dengan model adalah perlu bagi mendapatkan
keputusan yang tepat. Model bangunan kajian didigit daripada pelan lantai
bangunan. Namun begitu, maklumat ketinggian secara terperinci tiada.
Seharusnya pelan lantai bangunan perlu disertakan bersama dengan pelan
keratan rentas bangunan tersebut bagi proses penjanaan model 3D. Maklumat
ketinggian bangunan secara terperinci adalah penting kerana reka bentuk
bangunan moden kini semakin kompleks dan unik.
iii)
Proses melakukan permodelan 3D juga memerlukan komponen-komponen
komputer yang khusus. Perkakasan yang tidak mencapai spesifikasi juga
merupakan masalah utama di dalam kajian ini. Proses reka bentuk
permodelan objek spatial dan juga navigasi 3D memerlukan spesifikasi
komputer yang baik. Walaupun perkakasan yang disediakan berprestasi
sederhana, namun begitu ia masih lagi tidak mencukupi. Proses bagi
menghasilkan model-model spatial 3D memerlukan kuasa pemprosesan
komputer yang tinggi.
Walau bagaimana pun, masalah-masalah tersebut tidak mematahkan
semangat penulis untuk meneruskan kajian di dalam bidang yang agak mencabar ini
dan dengan secara tidak langsung ianya telah meningkatkan lagi pengetahuan dan
pemahaman penulis mengenai pembangunan sesebuah analisis rangkaian 3D. Ini
memberikan beberapa kelebihan terhadap penulis dalam bidang 3D Modelling, 3D
Simulation, 3D Game Engine, Virtual Reality termasuklah langkah-langkah untuk
membangunkan aplikasi analisis rangkaian 3D bagi kegunaan di dalam negara ini
secara umumnya dan kepada bidang GIS secara khususnya.
6.4
Cadangan
Daripada hasil kajian yang diperolehi, didapati terdapat beberapa aspek lain
yang boleh ditambah agar analisis rangkaian 3D ini dapat diperbaiki di masa akan
datang. Berikut merupakan cadangan-cadangan yang boleh diguna pakai untuk
kajian lanjutan atau pun kajian-kajian di masa hadapan.
6.4.1
Algoritma Kajian
Bagi analisis rangkaian, terdapat beberapa algoritma lain yang memberikan
output yang sama seperti algoritma ini. Akan tetapi algoritma tersebut digunakan
berdasarkan tujuan yang tertentu. Sebagai contoh terdapat algoritma yang bukan
sahaja digunakan untuk mencari laluan yang terpendek, tetapi juga menggunakan
faktor pengiraan lain di dalam pengiraannya. Faktor seperti kapasiti laluan; di dunia
realiti, navigasi di jalan raya sebenarnya mempunyai beberapa kriteria/syarat yang
ditetapkan. Sebagai contoh, ada jalan raya yang tidak membenarkan kenderaan
melebihi 5 tan melaluinya. Mencari laluan yang terpendek untuk ke destinasi bukan
sahaja diperlukan di sini, malah faktor kapasiti laluan juga perlu diambil kira.
Terdapat beberapa algoritma yang boleh digunakan bagi situasi ini dan mungkin
boleh diimplmentasikan di dalam bidang GIS 3D. Mungkin dengan situasi yang
berbeza, algoritma lain boleh diimplementasikan. Cadangan bagi kajian lanjutan
ialah penggunaan algoritma lain bagi pengiraan analisis rangkaian 3D dan seterusnya
analisis perbandingan boleh dibuat berdasarkan dari segi masa komputasi dan jumlah
nod di dalam set data bagi algoritma yang berbeza. Aplikasi utama di dalam kajian
ini membenarkan penggunaan data yang besar dan pelbagai. Maka penggunaan
sebarang data 3D di dalam aplikasi utama kajian boleh dilakukan. Oleh itu,
perbandingan dengan penggunaan algoritma lain adalah tidak mustahil.
6.4.2
Enjin Grafik 3D
Di dalam kajian ini, enjin grafik 3D State digunakan bagi navigasi 3D. Akan
tetapi terdapat beberapa enjin grafik 3D lain boleh digunakan. Seterusnya analisis
boleh dibuat bagi melihat prestasi enjin grafik tersebut bagi tujuan navigasi 3D.
Namun begitu penggunaan enjin yang berbeza sahaja tidak mencukupi,
penggabungan dengan beberapa kriteria kajian yang lain diperlukan bagi
menghasilkan kepentingan kajian yang cemerlang di dalam bidang GIS 3D.
6.4.3
Integrasi Analisis Rangkaian 3D dengan Perisian-perisian GIS
Di
antara
kajian
lanjutan
yang
boleh
dilakukan
ialah
dengan
mengintegrasikan fungsi yang terdapat pada perisian GIS semasa dengan analisis
rangkaian 3D. Integrasi ini akan menghasilkan satu fungsi tambahan pada perisian
GIS tersebut dan dengan secara tidak langsung analisis rangkaian 3D tersebut boleh
menggunakan pangkalan data perisian GIS tersebut. Ini akan memberikan lebih
kefungsian pada perisian GIS tersebut. Setakat ini, hanya beberapa fungsi sahaja
yang membenarkan analisis 3D dilakukan di dalam perisian GIS semasa. Namun
begitu, fungsi-fungsi tersebut kebanyakannya adalah untuk tujuan perancangan dan
juga visualisasi sahaja.
Selain itu, pendekatan kajian boleh diubah suai dengan menggunakan format
data yang berbeza. Carta alir aplikasi utama yang dibina mengandungi Input, Process
dan juga Output. Sebagai contoh, jenis data yang digunakan pada fasa input boleh
mengambil kira format data GIS yang tersedia. Contohnya seperti format data
daripada perisian komersial GIS (shapefile, coverage, mif). Topologi rangkaian bagi
setiap format data tersebut boleh dikaji struktur format dan diimplementasikan
bersama analisis rangkaian 3D.
6.4.4
Paparan Navigasi 3D Pada Alat-alat Mudah Alih
Kajian-kajian sampingan boleh dilakukan bagi analisis ini. Paparan hasil
analisis dan juga navigasi 3D dalam sistem pemaparan yang lebih kecil seperti PDA
(Personal Digital Assistance) dilihat lebih praktikal. Pengguna boleh menggunakan
PDA semasa melakukan navigasi. Penentuan koordinat boleh digunakan dengan
berdasarkan teknologi Global Positioning System (GPS) atau pun WiFi yang
semakin meluas. Penggunaan penentuan koordinat seperti ini dan juga alat PDA
yang berfungsi untuk menjalankan analisis rangkaian 3D akan menghasilkan satu
sistem navigasi yang lebih baik di masa akan datang memandangkan senario
sekarang iaitu peralihan pengguna GIS daripada desktop GIS kepada pengguna GIS
Mobile.
RUJUKAN DAN BIBLIOGRAFI
Alias Abdul Rahman (2004). Perbincangan peribadi. Tidak diterbitkan, Jabatan
Geoinformatik, Fakulti Kejuruteraan & Sains Geoinformasi, Universiti Teknologi
Malaysia.
Alias Abdul Rahman (2005). Tutorial workshop. Tidak diterbitkan, International
Symposium & Exhibition on Geoinformation 2005, ISG 2005.
Africawala, A., Castillo, J. dan Schubert, J. (2004). GIS Management and
Implementation. GISC/POEC 6383: 30 Oktober 2004. Dallas, 1-15 .
Ahuja, R., Mehlron, K., Orlin, J. dan Tarjan, R. (1990). Faster Algorithms for the
Shortest Path Problem. Journal of the ACM (JACM). 37 (2). 213 – 223.
Alter, S. (2002). Information System Foundation of E-Business. (4th ed). Pearson
Education International: Prentice Hall.
ESRI (2005). Manual Perisian ArcGIS 9. Earth Science Research Institute, Redlands
California: ESRI.
Balstrom, T. (2001). Identifying Least Cost Routes in Mountainous Terrain. Tidak
diterbitkan. Earth Science Research Institute, Redlands California.
Billen, R. dan Zlatanova, S. (2003). 3D Spatial relationships model: A usefull
concept for 3D Cadastre?. Paul Longley. Computers, Environment and Urban
Systems. 411-425(15). Amsterdam, The Netherlands: Elsevier.
Carlsson, C. dan Hagsand, O. (1993). DIVE - A Multi-User Virtual Reality System.
Virtual Reality Annual International Symposium. 18-22 September 1993. Seattle,
WA, USA: 394-400.
Chen, X., Meaker, J. W. dan Zhan, F. B. (2005). Agent-Based Modeling and
Analysis of Hurricane Evacuation Procedures for the Florida Keys. Natural
hazards. 38 (3). 321-338. Springer.
Cherkassy, B., Goldberg, A. dan Radzik, T. (1994). Shortest Paths Algorithms:
Theory and Experimental Evaluation. Symposium on Discrete Algorithms. 1994.
Arlington, Virginia, United States. 516 - 525.
Coors, V. (2001). 3D-GIS in networking Environments. Paul Longley. Computers,
Environment and Urban Systems. 345-357(13). Amsterdam, The Netherlands:
Elsevier.
Cruz-Neira, C., Sandin, D. J. dan DeFanti, T. (1993). Surround-Screen ProjectionBased Virtual Reality: The Design and Implementation of the CAVE.
International Conference on Computer Graphics and Interactive Techniques.
1993. New York, 135 – 142.
Dial, R. dan Alan (1969). Algorithms Shortest path Forest with Topological
Ordering. Communications of the ACM. November 1969. New York, 632 – 633.
Dijkstra, E.W. (1959). A note on two problems in connection with graphs. Dijkstra,
E.W. Numerische mathematik (269-271). Amsterdam, The Netherlands: ET AS
Dijkstra’s Algorithm (2005) - Lecture Note.
http://www.ms.unimelb.edu.au/~moshe/620-261/dijkstra/dijkstra.html
Eklund, P., Kirkby, S. dan Pollitt, S. (1993). A Dynamic Multi-source Dijkstra’s
Algorithm for Vehicle Routing. Intelligent Information Systems, Australian and
New Zealand Conference. 18-20 November 1993. Adelaide, SA, Australia, 329333.
Garvey, M., Jackson, M. dan Roberts, M. (2000). An Obeject Oriented GIS.
Proceeding of Net.Object Days 2000. Oktober 9-12 2000. Erfurt, Germany, 604613.
Gilliéron, P. dan Merminod, B. (2003). Personal Navigation System for Indoor
Applications. 11th IAIN World Congress. 21-24 Oktober 2003. Berlin, Germany,
1-15.
Gilliéron, P., Büchel, D., Spassov, I. dan Merminod, B. (2004). Indoor Navigation
Performance Analysis. GNSS 2004. 17-19 Mei 2004. Rotterdam, The Netherlands,
1-9.
Haron, H., Alwee, R. dan Sallehuddin, R. (2004). Teknik Penyelidikan Operasi.
Jabatan pemodelan & Pengkomputeran Industri. Tidak diterbitkan, Fakulti Sains
Komputer dan Sistem Maklumat, UTM Skudai, Johor.
Johnson, D. (1973). A Note on Dijkstra's Shortest Path Algorithm. Journal of the
ACM. 20 (3), 385-388.
Karas, I., Batuk, F., Akay, A., Baz, I. (2006). Automatically Extracting 3D Models
and Network Analysis for Indoors. 1st. International Workshop on 3D
Geoinformation 2006. 7-8 Ogos 2006. Kuala Lumpur, Malaysia, 1-10.
Kerlow, I. (2004). The Art of 3D Computer Animation. San Francisco, USA: John
Wiley & Sons, Inc.
Kirkby, S.D., Pollitt, S. E. P. dan Eklund, P. W (1996). Implementing a Shortest Path
Algorithm in a 3D GIS Environment. Adelaide, Australia: Taylor and Francis.
Kwan, M. P. dan Lee, J. (2003). Emergency response after 9/11: the potential of realtime 3D GIS for quick emergency response in micro-spatial environments.
International Journal of Geographical Information Science. 19(10), 1039-1056.
Lee, J. (2002). A Spatial Access Oriented Implementation of a Topological Data
Model for 3D Urban Entities. Geoinformatica. 8 (3), 237 – 264.
Lee, J. (2005). 3D GIS in Support of Disaster Management in Urban Areas. 101st
AAG Annual Conference. 5-9 April 2005. Denver, 1-10.
Meijers, M., Zlatanova, S. dan Pfeifer, N. (2005). 3D Geo-information indoors:
structuring for evacuation. Proceedings of the First International Workshop on
Next Generation 3D City Models. 2005. Bonn, Germany, 11-16.
Nebiker, S. (2003). Support for Visualisation and Animation in a Scalable 3D GIS
Environment – Motivation, Concepts And Implementation. The International
Archives of the Photogrammetry, Remote Sensing and Spatial Information
Sciences. 2003. Istanbul, 1-6.
Pu, S. dan Zlatanova, S. (2004). Evacuation Route Calculation of Inner Buildings.
First International Symposium on Geo-information for Disaster Management. 2123 Mac 2004. Delft, The Netherlands, 1143-1161.
Semanta, S., Jha, M. K. dan Oluokun, C. (2005). Travel Time Calculation with GIS
in Rail Station Location Optimization. 2005 ESRI User Conference Proceedings.
23-September 2005. USA: 1-9.
Shad, R., Ebadi, H. dan Ghods, M. (1998). Evaluation of route finding methods in
GIS application. Tidak diterbitkan, Department of Geodesy and Geomatics Eng.
K. N. Toonsi University of Technology, Tehran, Iran.
Sherlock, R., Mooney, P., Winstanley, A. (1999). Shortest Path Computation: A
Comparative Analysis. GISRUK. April 1999. Sheffield, UK, 91-94.
Smith, G. dan Friedman, J. (2004). 3D GIS: A Technology Whose Time Has Come.
Earth Observation Magazine. November 2004, 1-4.
Steuer, J. (1993). Defining Virtual Reality: Dimensions Determining Telepresence.
Journal of Communication. 42 (4), 73 - 93.
Stoter, J. dan Zlatanova S. (2003). Visualization and editing of 3D objects organized
in a DBMS. Proceedings of the EuroSDR. 2003. Delft, The Netherlands, 1-16.
Stoter, J., Salzmann, M., Oosterom, P. dan Molen, P. (2002). Towards a 3D
Cadastre. FIG XXII International Congress. 19-26 April 2002. Washington, D.C.
USA, 1-12.
Takino, S. (2000). Topological network model for improving urban 3D data use.
Tidak diterbitkan, Dawn Corporation, Minatojima-minamimachi, Chuo-ku, Kobe,
Japan.
Treeck, C. dan Rank, E. (2004). Analysis of Building Structure and Topology Based
on Graph Theory. Tidak diterbitkan, Lehrstuhl für Bauinformatik, Technische
Universität München
Verbree, E., Maren, G., Germs, R., Jansen, F. dan Kraak, M. J. (1999). Interaction in
Virtual World Views - Linking 3D GIS with VR. International Journal of
Geographical Information Science. 13 (4), 385-396(12).
Weisstein dan Eric, W. (2004). Four-Dimensional Geometry. MathWorld--A
Wolfram. http://mathworld.wolfram.com/Four-DimensionalGeometry.html
Wikipedia
Encyclopedia
(Ogos,
2005).
Dijkstra's
algorithm.
http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm.
Wüst, T., Nebiker, S. dan Landolt, R. (2004). Applying the 3D GIS Dilas to
Archaeology and Cultural Heritage Projects – Requirements and First Results.
XXth ISPRS Congress. 12-23 Julai 2004. Istanbul, Turkey, 1-6.
Zhan, F. B. (2001). Three Fastest Shortest Path Algorithms on Real Road Networks:
Data Structures and Procedures. Journal of Geographic Information and Decision
Analysis. 1 (1), 70–82.
Zlatanova, S. (2002). Advances in 3D GIS. Tidak diterbitkan. Delft University of
Technology, the Netherlands.
Zlatanova, S., Abdul Rahman, A., Pilouk, M. (2002). 3D GIS: Current Status and
Perspectives. Proceedings of ISPRS. 8-12 Julai 2002, Ottawa, Canada, 1-6.
LAMPIRAN A
Pelan lantai bangunan kajian
Plan Lantai Aras 1 - 1
Pelan Lantai Aras 1 - 2
Pelan Lantai Aras 1 - 3
Pelan Lantai Aras 2 - 1
Pelan Lantai Aras 2 - 2
Pelan Lantai Aras 2 - 3
Pelan Lantai Aras 3 - 1
Pelan Lantai Aras 3 - 2
Pelan Lantai Aras 3 - 3
Pelan Lantai Aras 4 - 1
Pelan Lantai Aras 4 - 2
Pelan Lantai Aras 4 - 3
LAMPIRAN B
Tekstur yang digunakan pada model bangunan 3D kajian
Contoh Tekstur yang Terdapat Pada Aras 1 Bangunan FKSG
Contoh Tekstur yang Terdapat Pada Aras 2 Bangunan FKSG
Contoh Tekstur yang Terdapat Pada Aras 3 Bangunan FKSG
Contoh Tekstur yang Terdapat Pada Aras 4 Bangunan FKSG
Contoh Tekstur yang Terdapat Pada Aras 5 Bangunan FKSG
LAMPIRAN C
Carta alir program Converter
Start
Variable Declaration
Open File
(AutoCAD drawing)
Read File
Input Line
Filter X, Y, Z
Close File
Save
(Mwraw DB format)
End
Each node will be
given an unique
identifier
LAMPIRAN D
Contoh pengaturcaraan program Converter
VERSION 5.00 ‘form declaration section
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0";
"COMDLG32.OCX"
Begin VB.Form Form1
BackColor
=
&H8000000A&
BorderStyle
=
1 'Fixed Single
Caption
=
"Uznetwork@converter™ 1.0"
ClientHeight
=
7350
ClientLeft
=
2610
ClientTop
=
2655
ClientWidth
=
5430
BeginProperty Font
Name
=
"Times New Roman"
Size
=
8.25
Charset
=
0
Weight
=
400
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Icon
=
"Form1.frx":0000
LinkTopic
=
"Form1"
MaxButton
=
0
'False
MinButton
=
0
'False
ScaleHeight
=
7350
ScaleWidth
=
5430
Begin VB.TextBox Text3
BeginProperty Font
Name
=
"MS Sans Serif"
Size
=
8.25
Charset
=
0
Weight
=
400
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
375
Left
=
5760
TabIndex
=
2
Top
=
720
Visible
=
0
'False
Width
=
1815
End
Begin VB.TextBox Text2
BeginProperty Font
Name
=
"MS Sans Serif"
Size
=
8.25
Charset
=
0
Weight
=
400
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
375
Left
=
5760
TabIndex
=
1
Top
=
120
Visible
=
0
'False
Width
=
1815
End
Begin MSComDlg.CommonDialog cdlg
Left
=
240
Top
=
360
_ExtentX
=
847
_ExtentY
=
847
_Version
=
393216
End
Begin VB.TextBox Text1
BackColor
=
&H8000000A&
BeginProperty Font
Name
=
"MS Sans Serif"
Size
=
8.25
Charset
=
0
Weight
=
400
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
7335
Left
=
0
Locked
=
-1 'True
MultiLine
=
-1 'True
ScrollBars
=
3 'Both
TabIndex
=
0
Top
=
0
Width
=
5415
End
Begin VB.Menu File_Menu ‘'Reka menu
Caption
=
"&File"
Begin VB.Menu Load_dxf
Caption
=
"&Load file... (*.dxf 2000)"
End
Begin VB.Menu Save_MWRaw
Caption
=
"Save &As..."
Enabled
=
0
'False
Shortcut
=
^S
End
Begin VB.Menu Exit
Caption
=
"&Exit converter"
Shortcut
=
^E
End
End
Begin VB.Menu Tools_Menu
Caption
=
"&Tools"
Begin VB.Menu Analysis
Caption
=
"Analysis"
Begin VB.Menu View_Coordinates
Caption
=
"View C&oordinates"
Enabled
=
0
'False
End
Begin VB.Menu Build_File
Caption
=
"Build &MWraw file"
Enabled
=
0
'False
End
End
Begin VB.Menu Clear_List
Caption
=
"&Clear Data View"
Enabled
=
0
'False
Shortcut
=
{F3}
End
End
Begin VB.Menu Help
Caption
=
"&Help"
Begin VB.Menu About
Caption
=
"&About..."
Shortcut
=
^A
End
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub About_Click()
frmAbout.Show
End Sub
Private Sub Build_File_Click()
Data declaration
Open Text2.Text For Input As #1
Id = 0
Text1 = ""
Text1.Text = "MAIN HEADER" & vbNewLine & _
"© All right reserved 2006" & vbNewLine & vbNewLine
While Not EOF(1)
Line Input #1, linesA
If linesA = AcDb3dPolylineVertex Then
Repeat:
Line Input #1, linesA
If linesA = XHeader Then
Line Input #1, coorX
Repeat
End If
If linesA = YHeader Then
Line Input #1, coorY
Repeat
End If
If linesA = ZHeader Then
Line Input #1, coorZ
Text1 = Text1.Text & coorZ & vbNewLine
Line Input #1, linesA
Line Input #1, linesA
Line Input #1, linesA
Line Input #1, linesA
If linesA = ENDFILE Then
Mark = True
Text1 = Text1.Text & Id - 1 & vbNewLine & _
"0" & vbNewLine
Else
If Mark = True Then
Text1 = Text1.Text & "0" & vbNewLine & _
Id + 1 & vbNewLine
Mark = False
Else
Text1 = Text1.Text & Id - 1 & vbNewLine & _
Id + 1 & vbNewLine
End If
End If
End If
End If
Wend
Close #1
Save_MWRaw.Enabled = True
End
Private Sub Clear_List_Click()
Text1 = ""
Text2 = ""
Text3 = ""
Save_MWRaw.Enabled = False
View_Coordinates.Enabled = False
Build_File.Enabled = False
Clear_List.Enabled = False
cdlg.FileName = ""
Text1.BackColor = &H8000000A
End Sub
Private Sub Exit_Click()
End
End Sub
Private Sub Form_Load()
Move (Screen.Width \ 2) - (Me.Width \ 2), (Screen.Height \ 2) (Me.Height \ 2)
End Sub
Private Sub Load_dxf_Click()
Dim FileInput As String
cdlg.Filter = "AutoCAD Drawing Interchange (*.dxf
2000)|*.dxf|all files(*,*)|*.*"
cdlg.ShowOpen
FileInput = cdlg.FileName
Text2.Text = FileInput
Text1 = ""
Text1 = Text1.Text & LoadText(cdlg.FileName)
If Text2.Text <> "" Then
View_Coordinates.Enabled = True
Build_File.Enabled = True
Clear_List.Enabled = True
Text1.BackColor = &H80000018
cdlg.FileName = ""
End If
Save_MWRaw.Enabled = False
If Text1.Text = "" Then
View_Coordinates.Enabled = False
Build_File.Enabled = False
Clear_List.Enabled = False
Text1.BackColor = &H8000000A
End If
End Sub
Private Sub Save_MWRaw_Click()
Dim FileInput As String
cdlg.Flags = cdlOFNHideReadOnly + cdlOFNOverwritePrompt
cdlg.Filter = "MWraw Database Interchange |.*MWraw |all
files(*,*)|*.*"
cdlg.DefaultExt = "MWraw"
cdlg.ShowSave
SaveText Text1, cdlg.FileName
FileInput = cdlg.FileName
Text3.Text = FileInput
End Sub
Private Sub View_Coordinates_Click()
Dim linesA As String
Dim coorX, coorY, coorZ As String
Dim Id As Integer
Open Text2.Text For Input As #1
Id = 0
Text1 = ""
Text1.Text = "Copyright to Uznetwork@converter (TM) 1.0" &
vbNewLine & _
"© All right reserved 2006" & vbNewLine & vbNewLine
Text1 = Text1.Text & " ID" & vbTab & "
X" & vbTab & vbTab & vbTab
& "
Y" & _
vbTab & vbTab & vbTab & " Z" & vbNewLine
While Not EOF(1)
Line Input #1, linesA
If linesA = "AcDb3dPolylineVertex" Then
Id = Id + 1
Text1 = Text1.Text & Id
Repeat:
Line Input #1, linesA
If linesA = 10 Then
Line Input #1, coorX
coorX = Val(Format(coorX, "0000000.00"))
Text1 = Text1.Text & vbTab & coorX & vbTab
GoTo Repeat
End If
If linesA = 20 Then
Line Input #1, coorY
coorY = Val(Format(coorY, "0000000.00"))
Text1 = Text1.Text & vbTab & vbTab & coorY & vbTab
GoTo Repeat
End If
If linesA = 30 Then
Line Input #1, coorZ
coorZ = Val(Format(coorZ, "0000000.00"))
Text1 = Text1.Text & vbTab & vbTab & coorZ &
vbNewLine
End If
End If
Wend
Close #1
Save_MWRaw.Enabled = False
End Sub
LAMPIRAN E
Carta alir program Topology
Start
Variable Declaration
Open File MWraw File
Corrupted
Read File
Successful
Input Predecessor
Input Successor
Check
Redundant
Nodes
No
Calculate Distance
Between Predecessor and
Successor Nodes
Store Distance
Information
Create MW DB
File
Close File
End
Move
Predecessor
Successor information
Yes
Delete Node
and
LAMPIRAN F
Contoh pengaturcaraan program Topology
VERSION 5.00
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0";
"COMDLG32.OCX"
Begin VB.Form frmMain
BackColor
=
&H00FF8080&
BorderStyle
=
1 'Fixed Single
Caption
=
"Uznetwork@topology™ 1.0"
ClientHeight
=
3435
ClientLeft
=
3240
ClientTop
=
2655
ClientWidth
=
5040
Icon
=
"frmMain.frx":0000
LinkTopic
=
"Form1"
MaxButton
=
0
'False
MinButton
=
0
'False
PaletteMode
=
1 'UseZOrder
Picture
=
"frmMain.frx":0ECA
ScaleHeight
=
229
ScaleMode
=
3 'Pixel
ScaleWidth
=
336
Begin VB.CommandButton cmdGenerate
Caption
=
"&Generate"
Height
=
375
Left
=
3120
TabIndex
=
1
Top
=
2880
Width
=
1695
End
Begin MSComDlg.CommonDialog cdlg3forSave
Left
=
840
Top
=
3960
_ExtentX
=
847
_ExtentY
=
847
_Version
=
393216
End
Begin VB.TextBox Text1
Height
=
3375
Left
=
4920
MousePointer
=
1 'Arrow
MultiLine
=
-1 'True
ScrollBars
=
2 'Vertical
TabIndex
=
0
Top
=
360
Visible
=
0
'False
Width
=
5055
End
Begin MSComDlg.CommonDialog cdlg2
Left
=
240
Top
=
3960
_ExtentX
=
847
_ExtentY
=
847
_Version
=
393216
End
Begin MSComDlg.CommonDialog cdlg1
Left
=
1440
Top
=
3960
_ExtentX
=
847
_ExtentY
=
847
_Version
=
393216
End
Begin VB.Label lblCommand3
BackStyle
=
0 'Transparent
Caption
=
"3. Save the new topology database (*MW)
file."
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FFFF&
Height
=
615
Left
=
360
TabIndex
=
5
Top
=
2280
Width
=
4575
WordWrap
=
-1 'True
End
Begin VB.Label lblCommand2
BackStyle
=
0 'Transparent
Caption
=
"2. Build the topology,"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FFFF&
Height
=
375
Left
=
360
TabIndex
=
4
Top
=
1920
Width
=
3255
WordWrap
=
-1 'True
End
Begin VB.Label lblCommand1
BackStyle
=
0 'Transparent
Caption
=
"1. Load (*.MWraw) file,"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FFFF&
Height
=
375
Left
=
360
TabIndex
=
3
Top
=
1560
Width
=
4455
WordWrap
=
-1 'True
End
Begin VB.Label Label1
Alignment
=
2 'Center
BackStyle
=
0 'Transparent
Caption
=
"There is three steps to build topology
for MW Raw Interchange Database File (*.MWraw):"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H000080FF&
Height
=
855
Left
=
600
TabIndex
=
2
Top
=
360
Width
=
3855
WordWrap
=
-1 'True
End
Begin VB.Menu File
Caption
=
"&File"
Index
=
1
Begin VB.Menu Load_MWraw
Caption
=
"&Load... (MWraw Database Interchange)"
End
Begin VB.Menu Save_As
Caption
=
"Save &As..."
Shortcut
=
^S
End
Begin VB.Menu Close
Caption
=
"&Close"
Shortcut
=
^E
End
End
Begin VB.Menu Tools
Caption
=
"&Tools"
Index
=
2
Begin VB.Menu Build
Caption
=
"Build MW Database Topology"
End
Begin VB.Menu Clear
Caption
=
"Clear Data View"
Shortcut
=
{F3}
End
End
Begin VB.Menu Help
Caption
=
"&Help"
Index
=
3
Begin VB.Menu About
Caption
=
"About"
Shortcut
=
^A
End
End
End
Attribute VB_Name = "frmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Private objFind As New FindClass
Private Sub About_Click()
frmAbout.Show
End Sub
Private Sub Build_Click()
Dim linesA, Header, ID(9999) As String
Dim coorX(9999), coorY(9999), coorZ(9999) As String
Dim Topo(9999, 7) As String
Dim i As Integer
Dim maxI As Integer
i = 1
Dim FileInput As String
FileInput = cdlg2.FileName
Open FileInput For Input As #1
While Not EOF(1)
Line Input #1, linesA
If linesA = "UzEader" Then
Line Input #1, ID(i)
Line Input #1, coorX(i)
Line Input #1, coorY(i)
Line Input #1, coorZ(i)
Line Input #1, Topo(i, 0)
Line Input #1, Topo(i, 1)
Topo(i, 2) = -1
Topo(i, 3) = -1
Topo(i, 4) = -1
Topo(i, 5) = -1
Topo(i, 6) = -1
Topo(i, 7) = -1
i = i + 1
maxI = i - 1
coorX(i) = Val(Format(coorX(i), "0000000.000000"))
coorY(i) = Val(Format(coorY(i), "0000000.000000"))
coorZ(i) = Val(Format(coorZ(i), "0000000.000000"))
End If
Wend
Close #1
Dim Looping As Integer
Dim Looping2 As Integer
Dim Looping3 As Integer
Dim Looping4 As Integer
Dim CessorIndex As Integer
Dim CessorIndex2 As Integer
Dim CessorIndex3 As Integer
Looping = 0
For Looping = 0 To maxI
Looping2 = 0
For Looping2 = 0 To maxI
If coorX(Looping) = coorX(Looping2) Then
If coorY(Looping) = coorY(Looping2) Then
If coorZ(Looping) = coorZ(Looping2) Then 'jika ada
yg sama
If ID(Looping) = ID(Looping2) Then GoTo
SKIPTHISNODE
If ID(Looping) = "" Then GoTo SKIPTHISNODE
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
CessorIndex = 0 ' CsI untuk loop2
For CessorIndex = 0 To 7
If Topo(Looping2, CessorIndex) < 0 Then GoTo
SKIPTHISCESSOR
'<<<<<<<<<<<<<<<<<<<<<<<<<
CessorIndex2 = 0 'CsI untuk loop1
For CessorIndex2 = 0 To 7
If Topo(Looping2, CessorIndex) =
Topo(Looping, CessorIndex2) Then GoTo SKIPTHISCESSOR
If Topo(Looping, CessorIndex2) < 0 Then
'looping untuk index cessor yg loop 1st
Topo(Looping, CessorIndex2) =
Topo(Looping2, CessorIndex)
Looping3 = 0
For Looping3 = 0 To maxI
CessorIndex3 = 0
For CessorIndex3 = 0 To 7
If Topo(Looping3,
CessorIndex3) = ID(Looping2) Then
Topo(Looping3,
CessorIndex3) = ID(Looping)
End If
Next CessorIndex3
Next Looping3
ID(Looping2) = ""
GoTo SKIPTHISCESSOR
End If
Next CessorIndex2
'<<<<<<<<<<<<<<<<<<<<<<<<<
SKIPTHISCESSOR:
Next CessorIndex
ID(Looping2) = ""
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
End If 'Untuk Z
End If 'Untuk Y
End If 'untuk X
SKIPTHISNODE:
Next Looping2
Next Looping
Looping = 0
For Looping = 0 To maxI
CessorIndex = 0
For CessorIndex = 0 To 7
If Topo(Looping, CessorIndex) = "-1" Then
Topo(Looping, CessorIndex) = "0"
End If
Next CessorIndex
Next Looping
Dim Distance(9999, 7) As String
Dim dX2, dY2, dZ2 As Long
Dim x1, x2, y1, y2, z1, z2 As Double
Looping = 0
For Looping = 0 To maxI
If ID(Looping) = "" Then GoTo SKIPCALCULATETHISIDDISTANCE
CessorIndex = 0
For CessorIndex = 0 To 7
If Topo(Looping, CessorIndex) > 0 Then
x1 = Val(Format(coorX(Looping), "0000000.000000"))
x2 = Val(Format(coorX(Topo(Looping, CessorIndex)),
"0000000.000000"))
y1 = Val(Format(coorY(Looping), "0000000.000000"))
y2 = Val(Format(coorY(Topo(Looping, CessorIndex)),
"0000000.000000"))
z1 = Val(Format(coorZ(Looping), "0000000.000000"))
z2 = Val(Format(coorZ(Topo(Looping, CessorIndex)),
"0000000.000000"))
dX2 = (x1 - x2) ^ 2
dY2 = (y1 - y2) ^ 2
dZ2 = (z1 - z2) ^ 2
Distance(Looping, CessorIndex) = (dX2 + dY2 + dZ2) ^ 0.5
Else
Distance(Looping, CessorIndex) = 0
End If
Next CessorIndex
SKIPCALCULATETHISIDDISTANCE:
Next Looping
Dim Directorie$
Directorie$ = App.Path & "\DebugTry.MW"
Open Directorie$ For Output As #1
Text1.Text = ""
Text1.Text = Text1.Text & "Copyright to Uznetwork@topology (TM)
1.0" & vbNewLine & _
"© All right reserved 2006" & vbNewLine & vbNewLine
Print #1, "Copyright to Uznetwork@topology (TM) 1.0" & vbNewLine &
_
"© All right reserved 2006" & vbNewLine & vbNewLine
Dim ki As Integer
ki = 0
For ki = 0 To maxI
If ID(ki) = "" Then GoTo SKIPPING
Text1.Text = Text1.Text & "UzEader" & vbNewLine & _
ID(ki) & vbNewLine & _
coorX(ki) & vbNewLine & _
coorY(ki) & vbNewLine & _
coorZ(ki) & vbNewLine & _
Topo(ki, 0) & vbNewLine & _
Topo(ki, 1) & vbNewLine & _
Topo(ki, 2) & vbNewLine & _
Topo(ki, 3) & vbNewLine & _
Topo(ki, 4) & vbNewLine & _
Topo(ki, 5) & vbNewLine & _
Topo(ki, 6) & vbNewLine & _
Topo(ki, 7) & vbNewLine & _
"Uzdistjar" & vbNewLine & _
Distance(ki, 0) & vbNewLine
Distance(ki, 1) & vbNewLine
Distance(ki, 2) & vbNewLine
Distance(ki, 3) & vbNewLine
Distance(ki, 4) & vbNewLine
Distance(ki, 5) & vbNewLine
Distance(ki, 6) & vbNewLine
Distance(ki, 7) & vbNewLine
&
&
&
&
&
&
&
&
_
_
_
_
_
_
_
vbNewLine
Print #1, "UzEader" & vbNewLine & _
ID(ki) & vbNewLine & _
coorX(ki) & vbNewLine & _
coorY(ki) & vbNewLine & _
coorZ(ki) & vbNewLine & _
Topo(ki, 0) & vbNewLine & _
Topo(ki, 1) & vbNewLine & _
Topo(ki, 2) & vbNewLine & _
Topo(ki, 3) & vbNewLine & _
Topo(ki, 4) & vbNewLine & _
Topo(ki, 5) & vbNewLine & _
Topo(ki, 6) & vbNewLine & _
Topo(ki, 7) & vbNewLine & _
"Uzdistjar" & vbNewLine & _
Distance(ki, 0) & vbNewLine & _
Distance(ki, 1) & vbNewLine & _
Distance(ki, 2) & vbNewLine & _
Distance(ki, 3) & vbNewLine & _
Distance(ki, 4) & vbNewLine & _
Distance(ki, 5) & vbNewLine & _
Distance(ki, 6) & vbNewLine & _
Distance(ki, 7) & vbNewLine & vbNewLine
SKIPPING:
Next ki
Close #1
Save_As.Enabled = True
MsgBox "MW Database file successfully created!", vbExclamation, "MW
Database file"
End
lblCommand2.ForeColor = &H8080FF
lblCommand2.FontItalic = True
End Sub
Private Sub Clear_Click()
Text1.Text = ""
cdlg1.FileName = ""
cdlg2.FileName = ""
Save_As.Enabled = False
Build.Enabled = False
Clear.Enabled = False
End Sub
Private Sub Close_Click()
End
End Sub
Private Sub cmdGenerate_Click()
Dim Jawapan2 As String
Jawapan2 = MsgBox("Do you want to build your MW data
automatically?", vbYesNo + vbQuestion, "Automation...")
If Jawapan2 = vbNo Then
Exit Sub
ElseIf Jawapan2 = vbYes Then
MsgBox "Please kindly select your MW raw data file",
vbInformation, "Step 1 - Load MW raw file..."
LoadingPlease
On Error GoTo TACKLE
Build_Click
MsgBox "Choose the directory to save your data",
vbInformation, "Step 2 - Save As..."
Save_As_Click
End If
Exit Sub
TACKLE:
MsgBox "System interupted! Progress will be stop.", vbCritical,
"Error"
Screen.MousePointer = vbNormal
Save_As.Enabled = False
Build.Enabled = False
Clear.Enabled = False
Exit Sub
End Sub
Private Sub Form_Load()
'-- Center the form
Move (Screen.Width \ 2) - (Me.Width \ 2), (Screen.Height \ 2) (Me.Height \ 2)
Save_As.Enabled = False
Build.Enabled = False
Clear.Enabled = False
End Sub
Private Sub LoadingPlease()
Dim lIndex As Long
'-- Get a text file name to open
cdlg1.DialogTitle = "Open MWraw File"
cdlg1.CancelError = True
cdlg1.Filter = "MWraw (*.MWraw)"
cdlg1.FileName = "*.MWraw"
On Error Resume Next
cdlg1.Action = 1
If Err Then Exit Sub
Screen.MousePointer = vbHourglass
'-- Load the file
objFind.Load (cdlg1.FileName)
'-- Error loading?
If objFind.ErrorNum Then
MsgBox objFind.ErrorMsg, vbInformation, "objFind Error! Data
cannot be read"
Exit Sub
End If
'-- This part initialise the input for the textbox data
Dim FileInput As String
cdlg2.FileName = cdlg1.FileName
FileInput = cdlg2.FileName
'--fill the textbox1 for MW data viewing
Text1 = ""
Text1 = Text1.Text & LoadText(cdlg2.FileName)
'--initialise end
Screen.MousePointer = vbNormal
Build.Enabled = True
Clear.Enabled = True
Save_As.Enabled = False
lblCommand1.ForeColor = &H8080FF
lblCommand1.FontItalic = True
End Sub
Private Sub Load_MWraw_Click()
Dim Jawapan As String
Jawapan = MsgBox("Click Yes, System will build your MW Database
Interchange file automatically. Click No to do it manually",
vbYesNoCancel + vbQuestion, "Automation...")
If Jawapan = vbCancel Then
Exit Sub
ElseIf Jawapan = vbNo Then
LoadingPlease
ElseIf Jawapan = vbYes Then
MsgBox "Please select your MW raw data file", vbInformation,
"Step 1 - Load MW raw file..."
LoadingPlease
On Error GoTo TACKLING
Build_Click
MsgBox "Choose the directory to save your data",
vbInformation, "Step 2 - Save As..."
Save_As_Click
End If
Exit Sub
TACKLING:
MsgBox "System interupted! Progress will be stop.", vbCritical,
"Error"
Screen.MousePointer = vbNormal
Save_As.Enabled = False
Build.Enabled = False
Clear.Enabled = False
Exit Sub
End Sub
Private Sub Save_As_Click()
Dim FileInput As String
cdlg3forSave.Flags = cdlOFNHideReadOnly + cdlOFNOverwritePrompt
cdlg3forSave.Filter = "MW Database Interchange (*.MW)|*.MW"
'|all files(*,*)|*.*"
cdlg3forSave.DefaultExt = "MW"
cdlg3forSave.ShowSave
SaveText Text1, cdlg3forSave.FileName
FileInput = cdlg3forSave.FileName
Save_As.Enabled = False
Build.Enabled = False
Clear.Enabled = False
cdlg1.FileName = ""
cdlg2.FileName = ""
cdlg3forSave.FileName = ""
lblCommand3.ForeColor = &H8080FF
lblCommand3.FontItalic = True
End Sub
LAMPIRAN G
Carta alir program Attribute
Start
Variable Declaration
Open File MW
File
Corrupted
Read File
Successful
Browse Data
Insert Attribute
Find Node
Insert
Number
Block
Insert Floor
Level
Insert Room
Number
Insert Room
Name
Save
End
LAMPIRAN H
Contoh pengaturcaraan program Attribute
VERSION 5.00
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0";
"COMDLG32.OCX"
Begin VB.Form Form1
BackColor
=
&H000080FF&
BorderStyle
=
1 'Fixed Single
Caption
=
"Uznetwork@MWFilereader™ 1.0"
ClientHeight
=
7095
ClientLeft
=
2610
ClientTop
=
2655
ClientWidth
=
6945
BeginProperty Font
Name
=
"Times New Roman"
Size
=
8.25
Charset
=
0
Weight
=
400
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Icon
=
"Form1.frx":0000
LinkTopic
=
"Form1"
MaxButton
=
0
'False
MinButton
=
0
'False
ScaleHeight
=
7095
ScaleWidth
=
6945
Begin VB.TextBox txtData
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
400
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
4695
Left
=
6960
Locked
=
-1 'True
MultiLine
=
-1 'True
ScrollBars
=
3 'Both
TabIndex
=
23
Top
=
480
Visible
=
0
'False
Width
=
3015
End
Begin VB.CommandButton cmdLastRec
Caption
=
">|"
BeginProperty Font
Name
=
"Trebuchet MS"
Size
=
15.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
495
Left
=
5640
TabIndex
Top
Width
=
=
=
22
6000
735
End
Begin VB.CommandButton cmdFirstRec
Caption
=
"|<"
BeginProperty Font
Name
=
"Trebuchet MS"
Size
=
15.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
495
Left
=
3120
TabIndex
=
21
Top
=
6000
Width
=
735
End
Begin VB.TextBox Text2
Height
=
375
Left
=
8040
TabIndex
=
20
Top
=
480
Visible
=
0
'False
Width
=
1455
End
Begin VB.TextBox txtIDArray
BeginProperty Font
Name
=
"Verdana"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
375
Left
=
3600
TabIndex
=
19
Top
=
6600
Visible
=
0
'False
Width
=
1695
End
Begin VB.TextBox txtNextPrevious
Height
=
315
Left
=
6600
TabIndex
=
18
Top
=
6360
Visible
=
0
'False
Width
=
1695
End
Begin VB.CommandButton cmdPrevious
Caption
=
"<<"
BeginProperty Font
Name
=
"Trebuchet MS"
Size
=
15.75
Charset
=
0
Weight
=
700
Underline
Italic
Strikethrough
EndProperty
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
=
0
0
0
'False
'False
'False
495
3960
17
6000
735
End
Begin VB.CommandButton cmdNext
Caption
=
">>"
BeginProperty Font
Name
=
"Trebuchet MS"
Size
=
15.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
495
Left
=
4800
TabIndex
=
16
Top
=
6000
Width
=
735
End
Begin VB.TextBox txtFloor
BeginProperty Font
Name
=
"Verdana"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
375
Left
=
2640
Locked
=
-1 'True
TabIndex
=
15
Top
=
3840
Width
=
3735
End
Begin VB.TextBox txtNodeID
BeginProperty Font
Name
=
"Verdana"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
375
Left
=
2640
Locked
=
-1 'True
TabIndex
=
14
Top
=
840
Width
=
3735
End
Begin VB.TextBox txtRoom
BeginProperty Font
Name
=
"Verdana"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
375
Left
=
2640
Locked
=
-1 'True
TabIndex
=
13
Top
=
4440
Width
=
3735
End
Begin VB.TextBox txtBlock
BeginProperty Font
Name
=
"Verdana"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
375
Left
=
2640
Locked
=
-1 'True
TabIndex
=
12
Top
=
3240
Width
=
3735
End
Begin VB.TextBox txtCoorZ
BeginProperty Font
Name
=
"Verdana"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
375
Left
=
2640
Locked
=
-1 'True
TabIndex
=
11
Top
=
2640
Width
=
3735
End
Begin VB.TextBox txtCoorY
BeginProperty Font
Name
=
"Verdana"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
Left
Locked
TabIndex
Top
Width
=
=
=
=
=
=
375
2640
-1 'True
10
2040
3735
End
Begin VB.TextBox txtCoorX
BeginProperty Font
Name
=
"Verdana"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
375
Left
=
2640
Locked
=
-1 'True
TabIndex
=
9
Top
=
1440
Width
=
3735
End
Begin VB.TextBox txtStaff
BeginProperty Font
Name
=
"Verdana"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
375
Left
=
2640
Locked
=
-1 'True
TabIndex
=
8
Top
=
5040
Width
=
3735
End
Begin MSComDlg.CommonDialog cdlg
Left
=
9360
Top
=
1320
_ExtentX
=
847
_ExtentY
=
847
_Version
=
393216
End
Begin MSComDlg.CommonDialog cdlg2
Left
=
9360
Top
=
1920
_ExtentX
=
847
_ExtentY
=
847
_Version
=
393216
End
Begin VB.Label Label5
Alignment
=
2 'Center
BackStyle
=
0 'Transparent
Caption
=
"MW Database Information"
BeginProperty Font
Name
=
"Arial"
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
=
=
=
=
15.75
0
700
0
'False
-1 'True
0
'False
&H00000000&
495
960
24
240
5055
End
Begin VB.Label lblStaff
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Room/Staff Name"
BeginProperty Font
Name
=
"Verdana"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
240
Left
=
480
TabIndex
=
7
Top
=
5160
Width
=
1950
End
Begin VB.Label lblRoom
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Room Number"
BeginProperty Font
Name
=
"Verdana"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
240
Left
=
480
TabIndex
=
6
Top
=
4560
Width
=
1530
End
Begin VB.Label lblFloor
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Floor Level"
BeginProperty Font
Name
=
"Verdana"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
Italic
Strikethrough
EndProperty
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
=
0
0
0
'False
'False
'False
240
480
5
3960
1200
End
Begin VB.Label lblBlock
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Block Number"
BeginProperty Font
Name
=
"Verdana"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
240
Left
=
480
TabIndex
=
4
Top
=
3360
Width
=
1500
End
Begin VB.Label Label4
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Z-Coordinate"
BeginProperty Font
Name
=
"Verdana"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
240
Left
=
480
TabIndex
=
3
Top
=
2760
Width
=
1440
End
Begin VB.Label Label3
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Y-Coordinate"
BeginProperty Font
Name
=
"Verdana"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
Left
TabIndex
Top
Width
=
=
=
=
=
240
480
2
2160
1455
End
Begin VB.Label Label2
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"X-Coordinate"
BeginProperty Font
Name
=
"Verdana"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
240
Left
=
480
TabIndex
=
1
Top
=
1560
Width
=
1455
End
Begin VB.Label Label1
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Nodes ID"
BeginProperty Font
Name
=
"Verdana"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
240
Left
=
480
TabIndex
=
0
Top
=
960
Width
=
975
End
Begin VB.Menu File_Menu
Caption
=
"&File"
Begin VB.Menu Load_MW
Caption
=
"&Load file... (*.MW File)"
End
Begin VB.Menu Exit
Caption
=
"&Exit MW File Reader"
Shortcut
=
^E
End
End
Begin VB.Menu Edit_Menu
Caption
=
"&Edit"
Begin VB.Menu StartEditing
Caption
=
"Start Editing"
Enabled
=
0
'False
End
Begin VB.Menu InsertAttribute
Caption
Enabled
Shortcut
=
=
=
"Insert Attribute"
0
'False
{F9}
End
Begin VB.Menu StopEditing
Caption
=
"Stop Editing"
Enabled
=
0
'False
End
Begin VB.Menu Clear_List
Caption
=
"&Clear Data View"
Enabled
=
0
'False
Shortcut
=
{F3}
End
End
Begin VB.Menu Find
Caption
=
"Find"
Begin VB.Menu Search
Caption
=
"Search phrase..."
Enabled
=
0
'False
End
End
Begin VB.Menu Help
Caption
=
"&Help"
Begin VB.Menu About
Caption
=
"&About..."
Shortcut
=
^A
End
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub About_Click()
frmAbout.Show
End Sub
Private Sub Clear_List_Click()
Call Clear_Page
Text2 = ""
Clear_List.Enabled = False
StartEditing.Enabled = False
StopEditing.Enabled = False
InsertAttribute.Enabled = False
Search.Enabled = False
cdlg.FileName = ""
cmdNext.Enabled = False
cmdPrevious.Enabled = False
cmdFirstRec.Enabled = False
cmdLastRec.Enabled = False
End Sub
Private Sub cmdFirstRec_Click()
txtNextPrevious.Text = "First Record"
Call Next_Previous
End Sub
Private Sub cmdLastRec_Click()
txtNextPrevious.Text = "Last Record"
Call Next_Previous
End Sub
Private Sub cmdNext_Click()
txtNextPrevious.Text = "Next"
Call Next_Previous
End Sub
Private Sub cmdPrevious_Click()
txtNextPrevious.Text = "Previous"
Call Next_Previous
End Sub
Private Sub Exit_Click()
End
End Sub
Private Sub Form_Load()
Move (Screen.Width \ 2) - (Me.Width \ 2), (Screen.Height \ 2) (Me.Height \ 2)
cmdNext.Enabled = False
cmdPrevious.Enabled = False
cmdFirstRec.Enabled = False
cmdLastRec.Enabled = False
End Sub
Private Sub InsertAttribute_Click()
Dim InsertBlock As String
Dim InsertAras As String
Dim InsertNomborBilik As String
Dim InsertNamaBilik As String
InsertBlock = InputBox("Block Number (e.g: C03)", "Insert Attribute
- Step 1")
If InsertBlock = "" Then Exit Sub
InsertAras = InputBox("Floor Level (e.g: 3, 4, 1)", "Insert
Attribute - Step 2")
If InsertAras = "" Then Exit Sub
InsertNomborBilik = InputBox("Room Number (e.g: 331, 126)", "Insert
Attribute - Step 3")
If InsertNomborBilik = "" Then Exit Sub
InsertNamaBilik = InputBox("Room Name (e.g: Ahmad Ali, Makmal GIS)",
"Insert Attribute - Step 4")
If InsertNamaBilik = "" Then Exit Sub
InsertBlock = UCase$(InsertBlock)
InsertNamaBilik = StrConv(InsertNamaBilik, vbProperCase)
txtBlock.Visible = True
lblBlock.Visible = True
txtBlock.Text = InsertBlock
Block(txtIDArray.Text) = InsertBlock
txtFloor.Visible = True
lblFloor.Visible = True
txtFloor.Text = InsertAras
Floor(txtIDArray.Text) = InsertAras
txtRoom.Visible = True
lblRoom.Visible = True
txtRoom.Text = InsertNomborBilik
Room(txtIDArray.Text) = InsertNomborBilik
txtStaff.Visible = True
lblStaff.Visible = True
txtStaff.Text = InsertNamaBilik
Staff(txtIDArray.Text) = InsertNamaBilik
End Sub
Private Sub Load_MW_Click()
cdlg.Filter = "MW Database Interchange (*.MW)|*.MW|all
files(*,*)|*.*"
cdlg.ShowOpen
FileInput = cdlg.FileName
Text2.Text = FileInput
If Text2.Text <> "" Then
StartEditing.Enabled = True
Clear_List.Enabled = True
Search.Enabled = True
cmdNext.Enabled = True
cmdPrevious.Enabled = True
cmdFirstRec.Enabled = False
cmdLastRec.Enabled = True
End If
If txtIDArray.Text <> "" Then
Call Clear_Page
End If
Call Load_Text
txtIDArray.Text = 1
txtNodeID.Text = ID(1)
txtCoorX.Text = coorX(1)
txtCoorY.Text = coorY(1)
txtCoorZ.Text = coorZ(1)
If Block(1) <> "" Then
txtBlock.Visible = True
lblBlock.Visible = True
txtBlock.Text = Block(1)
Else
txtBlock.Visible = False
lblBlock.Visible = False
End If
If Floor(1) <> "" Then
txtFloor.Visible = True
lblFloor.Visible = True
txtFloor.Text = Floor(1)
Else
txtFloor.Visible = False
lblFloor.Visible = False
End If
If Room(1) <> "" Then
txtRoom.Visible = True
lblRoom.Visible = True
txtRoom.Text = Room(1)
Else
txtRoom.Visible = False
lblRoom.Visible = False
End If
If Staff(1) <> "" Then
txtStaff.Visible = True
lblStaff.Visible = True
txtStaff.Text = Staff(1)
Else
txtStaff.Visible = False
lblStaff.Visible = False
End If
End Sub
Private Sub Search_Click()
frmFind.Show
End Sub
Private Sub StartEditing_Click()
StartEditing.Enabled = False
InsertAttribute.Enabled = True
StopEditing.Enabled = True
End Sub
Private Sub StopEditing_Click()
Dim Jawapan As String
Jawapan = MsgBox("Would you like to save your edits?", vbQuestion +
vbYesNoCancel, "Save As...")
If Jawapan = vbYes Then
txtData.Text = ""
txtData.Text = txtData.Text & "Copyright to Uznetwork@topology (TM)
1.0" & vbNewLine & _
"© All right reserved 2006" & vbNewLine & vbNewLine
ik = 1
For ik = 1 To maxI
txtData.Text = txtData.Text & "UzEader" & vbNewLine & _
ID(ik) & vbNewLine & coorX(ik) & vbNewLine & _
coorY(ik) & vbNewLine & coorZ(ik) & vbNewLine & _
Topo(ik, 0) & vbNewLine & Topo(ik, 1) & vbNewLine & _
Topo(ik, 2) & vbNewLine & Topo(ik, 3) & vbNewLine & _
Topo(ik, 4) & vbNewLine & Topo(ik, 5) & vbNewLine & _
Topo(ik, 6) & vbNewLine & Topo(ik, 7) & vbNewLine & _
"Uzdistjar" & vbNewLine & Jarak(ik, 0) & vbNewLine &
_
Jarak(ik, 1) & vbNewLine & Jarak(ik, 2) & vbNewLine &
_
Jarak(ik, 3) & vbNewLine & Jarak(ik, 4) & vbNewLine &
_
Jarak(ik, 5) & vbNewLine & Jarak(ik, 6) & vbNewLine &
_
Jarak(ik, 7) & vbNewLine
If Block(ik) <> "" Then
txtData.Text = txtData.Text & Block(ik) &
vbNewLine & _
Floor(ik) & vbNewLine & Room(ik)
& vbNewLine & Staff(ik) _
& vbNewLine & vbNewLine
Else
txtData.Text = txtData.Text & vbNewLine
End If
Next ik
cdlg2.Flags = cdlOFNHideReadOnly + cdlOFNOverwritePrompt
cdlg2.Filter = "MW Database Interchange |.*MW |all files
(*,*)|*.*"
cdlg2.DefaultExt = "MW"
cdlg2.ShowSave
SaveText txtData, cdlg2.FileName
FileInput = cdlg2.FileName
'Text3.Text = FileInput
StartEditing.Enabled = True
InsertAttribute.Enabled = False
StopEditing.Enabled = False
End If
If Jawapan = vbNo Then
StartEditing.Enabled = True
InsertAttribute.Enabled = False
StopEditing.Enabled = False
Call Clear_Page
Call Load_Text
End If
End Sub
Public Sub Load_Text()
Dim FileInput As String
i = 1
FileInput = cdlg.FileName
Open FileInput For Input As #1
Line Input #1, linesA
If linesA <> "Copyright to Uznetwork@topology (TM)
ERROR
While Not EOF(1)
Line Input #1, linesA
If linesA = "UzEader" Then
Line Input #1, ID(i)
Line Input #1, coorX(i)
Line Input #1, coorY(i)
Line Input #1, coorZ(i)
Line Input #1, Topo(i, 0)
Line Input #1, Topo(i, 1)
Line Input #1, Topo(i, 2)
Line Input #1, Topo(i, 3)
Line Input #1, Topo(i, 4)
Line Input #1, Topo(i, 5)
Line Input #1, Topo(i, 6)
Line Input #1, Topo(i, 7)
Line Input #1, Uzdistjar
Line Input #1, Jarak(i, 0)
1.0" Then GoTo
Line Input #1, Jarak(i, 1)
Line Input #1, Jarak(i, 2)
Line Input #1, Jarak(i, 3)
Line Input #1, Jarak(i, 4)
Line Input #1, Jarak(i, 5)
Line Input #1, Jarak(i, 6)
Line Input #1, Jarak(i, 7)
Line Input #1, CheckAdaAttribut
If CheckAdaAttribut <> "" Then
Block(i) = CheckAdaAttribut
Line Input #1, Floor(i)
Line Input #1, Room(i)
Line Input #1, Staff(i)
End If
i = i + 1
maxI = i - 1
End If
Wend
Close #1
Exit Sub
ERROR:
MsgBox "Your Data Is Corrupted!", vbCritical, "WARNING!"
Close #1
End Sub
Public Sub Clear_Page()
txtNodeID.Text = ""
txtCoorX.Text = ""
txtCoorY.Text = ""
txtCoorZ.Text = ""
txtBlock.Text = ""
txtFloor.Text = ""
txtRoom.Text = ""
txtStaff.Text = ""
Dim i As Integer
i = 1
For i = 1 To maxI
ID(i) = ""
coorX(i) = ""
coorY(i) = ""
coorZ(i) = ""
Topo(i, 0) = ""
Topo(i, 1) = ""
Topo(i, 2) = ""
Topo(i, 3) = ""
Topo(i, 4) = ""
Topo(i, 5) = ""
Topo(i, 6) = ""
Topo(i, 7) = ""
Jarak(i, 0) = ""
Jarak(i, 1) = ""
Jarak(i, 2) = ""
Jarak(i, 3) = ""
Jarak(i, 4) = ""
Jarak(i, 5) = ""
Jarak(i, 6) = ""
Jarak(i, 7) = ""
Block(i) = ""
Floor(i) = ""
Room(i) = ""
Staff(i) = ""
Next i
txtData.Text = ""
maxI = 0
End Sub
LAMPIRAN I
Carta alir program Aplikasi Utama (pengiraan laluan terpendek)
Start
Variable
Declaration
MW Database
File
Data Verification
Successful
Read
Header
Corrupted
Goto Err Handler
Store Temporary Data
Current and Destination
Location Setting
Setting Temporary
Dijkstra Iteration 1
Dijkstra Step 1
No
Dijkstra Step 2
Dijkstra Iteration 2
Dijkstra Step 1
Reach
to Target
Nodes
Dijkstra Step 2
Reached
Stop Calculation
Display
Statistics
3D Navigation
Close File
End
Unreachable
LAMPIRAN J
Contoh pengaturcaraan program utama
VERSION 5.00
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0";
"COMDLG32.OCX"
Begin VB.Form frmDBConfig
BackColor
=
&H00808080&
BorderStyle
=
0 'None
Caption
=
"Database Configuration"
ClientHeight
=
4620
ClientLeft
=
5400
ClientTop
=
3885
ClientWidth
=
6540
Icon
=
"frmDBConfig.frx":0000
LinkTopic
=
"Form1"
ScaleHeight
=
4620
ScaleWidth
=
6540
ShowInTaskbar
=
0
'False
Begin VB.TextBox txtCopyWldBitmaps
Height
=
375
Left
=
240
TabIndex
=
8
Text
=
"Text2"
Top
=
5520
Visible
=
0
'False
Width
=
1335
End
Begin VB.TextBox txtCopyWld
Height
=
375
Left
=
240
TabIndex
=
7
Text
=
"Text1"
Top
=
5040
Visible
=
0
'False
Width
=
1335
End
Begin VB.TextBox txtCopyMWDB
Height
=
375
Left
=
240
TabIndex
=
6
Text
=
"Text1"
Top
=
4560
Visible
=
0
'False
Width
=
1335
End
Begin VB.Frame Frame1
BackColor
=
&H00000000&
Caption
=
"Database Configuration"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
4335
Left
=
120
TabIndex
=
0
Top
=
120
Width
=
6255
Begin MSComDlg.CommonDialog cdlgBitmaps
Left
=
1560
Top
=
4440
_ExtentX
=
847
_ExtentY
=
847
_Version
=
393216
End
Begin MSComDlg.CommonDialog cdlgWld
Left
=
960
Top
=
4440
_ExtentX
=
847
_ExtentY
=
847
_Version
=
393216
End
Begin MSComDlg.CommonDialog cdlgMW
Left
=
360
Top
=
4440
_ExtentX
=
847
_ExtentY
=
847
_Version
=
393216
End
Begin VB.TextBox txtWld
BackColor
=
&H00E0E0E0&
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
315
Left
=
480
Locked
=
-1 'True
TabIndex
=
5
Top
=
2040
Width
=
4455
End
Begin VB.TextBox txtWldBitmaps
BackColor
=
&H00E0E0E0&
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
315
Left
=
480
Locked
=
-1 'True
TabIndex
=
4
Top
=
2520
Width
=
4455
End
Begin VB.TextBox txtMWDB
BackColor
=
&H00E0E0E0&
BeginProperty Font
Name
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
Locked
=
TabIndex
=
Top
=
Width
=
=
=
=
=
=
=
=
"Arial"
9
0
700
0
'False
0
'False
0
'False
&H00000000&
315
480
-1 'True
2
1080
4455
End
Begin VB.Label Label5
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Cancel"
BeginProperty Font
Name
=
"Arial"
Size
=
8.25
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H00E0E0E0&
Height
=
210
Left
=
5280
TabIndex
=
11
Top
=
3960
Width
=
555
End
Begin VB.Label Label4
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"OK"
BeginProperty Font
Name
=
"Arial"
Size
=
8.25
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H00E0E0E0&
Height
=
210
Left
=
4680
TabIndex
=
10
Top
=
3960
Width
=
225
End
Begin VB.Label lblSaveSetting
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Save Setting"
BeginProperty Font
Name
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
=
=
=
=
=
"Arial"
8.25
0
700
0
'False
0
'False
0
'False
&H00E0E0E0&
210
480
9
3960
1140
End
Begin VB.Image imgCancel
Height
=
615
Left
=
5280
Picture
=
"frmDBConfig.frx":0ECA
Stretch
=
-1 'True
ToolTipText
=
"Cancel"
Top
=
3240
Width
=
615
End
Begin VB.Image imgSaveSetting
Height
=
615
Left
=
720
Picture
=
"frmDBConfig.frx":2EDE
Stretch
=
-1 'True
ToolTipText
=
"Save Setting"
Top
=
3240
Width
=
615
End
Begin VB.Image imgOK
Height
=
615
Left
=
4440
Picture
=
"frmDBConfig.frx":5CA9
Stretch
=
-1 'True
ToolTipText
=
"OK"
Top
=
3240
Width
=
615
End
Begin VB.Image imgOpenWld
Height
=
975
Left
=
5040
MouseIcon
=
"frmDBConfig.frx":74E2
MousePointer
=
99 'Custom
Picture
=
"frmDBConfig.frx":7C64
Stretch
=
-1 'True
ToolTipText
=
"Open Environment File"
Top
=
1920
Width
=
975
End
Begin VB.Image imgOpenMWDB
Height
=
960
Left
=
5040
MouseIcon
=
"frmDBConfig.frx":A35B
MousePointer
=
99 'Custom
Picture
=
"frmDBConfig.frx":AADD
Stretch
=
-1 'True
ToolTipText
Top
Width
=
=
=
End
Begin VB.Label Label2
BackStyle
=
Caption
=
BeginProperty Font
Name
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
End
Begin VB.Label Label1
BackStyle
=
Caption
=
BeginProperty Font
Name
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
End
"Open MW Database File"
480
960
0 'Transparent
"Environment Setting:"
=
=
=
=
=
=
=
"Arial"
9.75
0
700
0
'False
0
'False
0
'False
&H00E0E0E0&
375
480
3
1680
2295
0 'Transparent
"MW database file:"
=
=
=
=
=
=
=
"Arial"
9.75
0
700
0
'False
0
'False
0
'False
&H00E0E0E0&
375
480
1
720
2295
End
End
Attribute VB_Name = "frmDBConfig"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Form_Load()
imgSaveSetting.Visible = False
lblSaveSetting.Visible = False
'------------- Setting the DB automatically-----------------' This untuk setting data default bg MW Database
txtMWDB.text = "C:\Program Files\3D Network Analysis\Aspatial\3D
Network aras bawah (attribute).MW"
' This untuk setting data default bg World Environment
txtWld.text = "C:\Program Files\3D Network Analysis\Spatial\World
Aras Bawah.wld"
' This untuk setting data default bg World Bitmaps Environment
txtWldBitmaps.text = "C:\Program Files\3D Network
Analysis\Spatial\bitmaps"
' Setting utk semua jd default
MWDatabaseFileName = txtMWDB.text
WorldFileName = "World Aras Bawah.wld"
WorldFileDir = "C:\Program Files\3D Network Analysis\Spatial"
WorldBitmapsFileName = WorldFileDir & "\Bitmaps"
Call Setting4Cancel
End Sub
Private Sub imgCancel_Click()
txtMWDB.text = txtCopyMWDB.text
txtWld.text = txtCopyWld.text
txtWldBitmaps.text = txtCopyWldBitmaps.text
imgSaveSetting.Visible = False
lblSaveSetting.Visible = False
frmDBConfig.Hide
End Sub
Private Sub imgOK_Click()
frmDBConfig.Hide
frmUtama.Show
End Sub
Private Sub imgOpenMWDB_Click()
Call ConfigureMWdb
End Sub
Private Sub imgOpenWld_Click()
Call ConfigureWld
End Sub
Private Sub imgSaveSetting_Click()
Call DataSet
frmAdSearch.cboBlock.Clear
frmAdSearch.cboFloorLevel.Clear
frmAdSearch.cboRoomNumber.Clear
frmAdSearch.cboStaffName.Clear
MWDatabaseFileName = txtMWDB.text
If cdlgWld.FileTitle = "" Then GoTo SINI
WorldFileName = cdlgWld.FileTitle
WorldFileDir = JustPath4Save
WorldBitmapsFileName = txtWldBitmaps.text
SINI:
Call DataLoad2Combo
If DataCorrupted = True Then
DataCorrupted = False
imgSaveSetting.Visible = False
lblSaveSetting.Visible = False
Exit Sub
End If
imgSaveSetting.Visible = False
lblSaveSetting.Visible = False
Call Setting4Cancel
MsgBox "Setting Saved!", vbInformation, "Save Setting"
End Sub
VERSION 5.00
Begin VB.Form frmShortestPath
BackColor
=
&H00808080&
BorderStyle
=
0 'None
ClientHeight
=
7740
ClientLeft
=
1515
ClientTop
=
750
ClientWidth
=
12405
LinkTopic
=
"Form1"
ScaleHeight
=
7740
ScaleWidth
=
12405
ShowInTaskbar
=
0
'False
StartUpPosition =
2 'CenterScreen
Begin VB.Frame fraDijkstra
BackColor
=
&H00404040&
Caption
=
"Dijkstra's"
BeginProperty Font
Name
=
"MS Sans Serif"
Size
=
8.25
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
1575
Left
=
12000
TabIndex
=
0
Top
=
1560
Width
=
3375
Begin VB.ComboBox cbo
Height
=
315
Left
=
360
TabIndex
=
8
Top
=
480
Width
=
2655
End
Begin VB.ComboBox cbo2
Height
=
315
Left
=
360
TabIndex
=
7
Top
=
960
Width
=
2655
End
End
Begin VB.Frame fraShortest
BackColor
=
&H00404040&
Caption
=
"Shortest Path"
BeginProperty Font
Name
=
"MS Sans Serif"
Size
=
8.25
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
1575
Left
=
12000
TabIndex
=
1
Top
=
3120
Width
=
3255
Begin VB.ComboBox cbo3
Height
=
315
Left
=
120
TabIndex
=
6
Top
=
480
Width
=
2895
End
Begin VB.ComboBox cbo4
Height
=
315
Left
=
120
TabIndex
=
5
Top
=
960
Width
=
2895
End
End
Begin VB.Frame Frame2
BackColor
=
&H00000000&
Caption
=
"Dijkstra's Shortest Path Algorithm
Calculation Result"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
7455
Left
=
120
TabIndex
=
2
Top
=
120
Width
=
12135
Begin VB.PictureBox Plot
BackColor
=
&H00000000&
BorderStyle
=
0 'None
FillColor
=
&H00FFFFFF&
ForeColor
=
&H00FFFFFF&
Height
=
3075
Left
=
5400
ScaleHeight
=
3075
ScaleWidth
=
6405
TabIndex
=
62
Top
=
480
Width
=
6405
Begin VB.Label Label32
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Z"
BeginProperty Font
Name
=
"MS Sans Serif"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
0
0
'False
'False
&H8000000E&
240
0
69
240
150
End
Begin VB.Label Label31
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Y"
BeginProperty Font
Name
=
"MS Sans Serif"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000E&
Height
=
240
Left
=
1320
TabIndex
=
68
Top
=
1680
Width
=
165
End
Begin VB.Label Label30
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"X"
BeginProperty Font
Name
=
"MS Sans Serif"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000E&
Height
=
240
Left
=
1440
TabIndex
=
67
Top
=
2760
Width
=
150
End
Begin VB.Line Line3
BorderColor
=
&H80000002&
X1
=
0
X2
=
0
Y1
=
2400
Y2
=
600
End
Begin VB.Line Line2
BorderColor
=
&H80000002&
X1
=
0
X2
=
1200
Y1
Y2
=
=
End
Begin VB.Line Line1
BorderColor
=
X1
=
X2
=
Y1
=
Y2
=
End
Begin VB.Line DLine
BorderColor
=
Index
=
Visible
=
X1
=
X2
=
Y1
=
Y2
=
End
2400
1800
&H80000002&
0
1320
2400
2880
&H000000FF&
0
0
'False
1200
3960
4320
4320
End
Begin VB.TextBox Theta_Ang
Alignment
=
2 'Center
BackColor
=
&H00FFFFFF&
BeginProperty Font
Name
=
"Courier"
Size
=
9.75
Charset
=
0
Weight
=
400
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H00000000&
Height
=
330
Left
=
3240
TabIndex
=
61
Text
=
"300"
Top
=
6720
Visible
=
0
'False
Width
=
1365
End
Begin VB.TextBox Alt_Ang
Alignment
=
2 'Center
BackColor
=
&H00FFFFFF&
BeginProperty Font
Name
=
"Courier"
Size
=
9.75
Charset
=
0
Weight
=
400
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H00000000&
Height
=
330
Left
=
4800
TabIndex
=
60
Text
=
"20"
Top
=
6705
Visible
=
0
'False
Width
=
1275
End
Begin VB.TextBox Size_Factor
Alignment
=
2 'Center
BackColor
=
&H00FFFFFF&
BeginProperty Font
Name
=
"Courier"
Size
=
9.75
Charset
=
0
Weight
=
400
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H00000000&
Height
=
330
Left
=
10035
TabIndex
=
59
Text
=
"11000"
Top
=
720
Visible
=
0
'False
Width
=
1185
End
Begin VB.TextBox Perspective_Factor
Alignment
=
2 'Center
BackColor
=
&H00FFFFFF&
BeginProperty Font
Name
=
"Courier"
Size
=
9.75
Charset
=
0
Weight
=
400
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H00000000&
Height
=
330
Left
=
6360
TabIndex
=
58
Text
=
"4000"
Top
=
6720
Visible
=
0
'False
Width
=
1320
End
Begin VB.CommandButton Draw_Cube_Button
BackColor
=
&H00C0C0C0&
Caption
=
"Draw"
Default
=
-1 'True
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
400
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
Height
=
375
Left
=
6360
TabIndex
=
57
Top
=
7920
Visible
=
0
'False
Width
=
1500
End
Begin VB.ComboBox cboNode
Height
=
315
Left
=
4080
TabIndex
=
4
Text
=
"Combo1"
Top
=
7800
Width
=
1935
End
Begin VB.ComboBox cboLvl
Height
=
315
Left
=
1920
TabIndex
=
3
Text
=
"Combo1"
Top
=
7800
Width
=
2055
End
Begin VB.Shape Shape1
BorderColor
=
&H00C0C0C0&
Height
=
3495
Left
=
240
Top
=
360
Width
=
11655
End
Begin VB.Label Label18
Alignment
=
2 'Center
BackColor
=
&H00C0C0C0&
Caption
=
"Direction of Eye"
ForeColor
=
&H00000000&
Height
=
240
Left
=
3240
TabIndex
=
66
Top
=
6480
Visible
=
0
'False
Width
=
1365
End
Begin VB.Label Label17
Alignment
=
2 'Center
BackColor
=
&H00C0C0C0&
Caption
=
"Altitude of Eye"
ForeColor
=
&H00000000&
Height
=
240
Left
=
4800
TabIndex
=
65
Top
=
6480
Visible
=
0
'False
Width
=
1275
End
Begin VB.Label Label16
Alignment
=
2 'Center
BackColor
=
&H00C0C0C0&
Caption
=
"Size Factor"
ForeColor
=
&H00000000&
Height
=
240
Left
=
10020
TabIndex
=
64
Top
=
480
Visible
=
0
'False
Width
=
1185
End
Begin VB.Label Label15
Alignment
=
2 'Center
BackColor
=
&H00C0C0C0&
Caption
=
"Perspective"
ForeColor
=
&H00000000&
Height
=
240
Left
=
6330
TabIndex
=
63
Top
=
6480
Visible
=
0
'False
Width
=
1350
End
Begin VB.Label Label29
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Room/Staff Name:"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
240
Left
=
6960
TabIndex
=
56
Top
=
4800
Width
=
1725
End
Begin VB.Label Label28
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Room Number:"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
240
Left
=
6960
TabIndex
=
55
Top
=
5400
Width
=
1425
End
Begin VB.Label Label27
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Block:"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
=
0
0
0
'False
'False
'False
&H8000000A&
240
8640
54
5760
585
End
Begin VB.Label Label19
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Floor:"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
240
Left
=
6960
TabIndex
=
53
Top
=
5760
Width
=
555
End
Begin VB.Label lblStaffNameTarLoc
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000C0C0&
Height
=
240
Left
=
7320
TabIndex
=
52
Top
=
5040
Width
=
735
End
Begin VB.Label lblNumberTarLoc
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
0
0
'False
'False
&H0000C0C0&
240
8520
51
5400
735
End
Begin VB.Label lblArasTarLoc
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000C0C0&
Height
=
240
Left
=
7680
TabIndex
=
50
Top
=
5760
Width
=
735
End
Begin VB.Label lblBlokTarLoc
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000C0C0&
Height
=
240
Left
=
9360
TabIndex
=
49
Top
=
5760
Width
=
735
End
Begin VB.Label lblBlokCurLoc
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
0
'False
&H0000C0C0&
240
3120
48
5760
735
End
Begin VB.Label lblArasCurLoc
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000C0C0&
Height
=
240
Left
=
1560
TabIndex
=
47
Top
=
5760
Width
=
735
End
Begin VB.Label lblNumberCurLoc
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000C0C0&
Height
=
240
Left
=
2400
TabIndex
=
46
Top
=
5400
Width
=
735
End
Begin VB.Label lblStaffNameCurLoc
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
Height
Left
TabIndex
Top
Width
=
=
=
=
=
=
&H0000C0C0&
240
1200
45
5040
735
End
Begin VB.Label Label14
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Floor:"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
240
Left
=
840
TabIndex
=
44
Top
=
5760
Width
=
555
End
Begin VB.Label Label13
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Block:"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
240
Left
=
2400
TabIndex
=
43
Top
=
5760
Width
=
585
End
Begin VB.Label Label11
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Room Number:"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
Height
Left
TabIndex
Top
Width
=
=
=
=
=
=
&H8000000A&
240
840
42
5400
1425
End
Begin VB.Label Label9
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Room/Staff Name:"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
240
Left
=
840
TabIndex
=
41
Top
=
4800
Width
=
1725
End
Begin VB.Label Label12
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Cancel"
BeginProperty Font
Name
=
"Arial"
Size
=
8.25
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H00E0E0E0&
Height
=
210
Left
=
11280
TabIndex
=
40
Top
=
7080
Width
=
555
End
Begin VB.Label lbl3DNaviPrint
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Print"
BeginProperty Font
Name
=
"Arial"
Size
=
8.25
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H00E0E0E0&
Height
Left
TabIndex
Top
Width
=
=
=
=
=
210
10320
39
7080
390
End
Begin VB.Label lbl3DNavigation
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Navigate"
BeginProperty Font
Name
=
"Arial"
Size
=
8.25
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H00E0E0E0&
Height
=
210
Left
=
8880
TabIndex
=
38
Top
=
7080
Width
=
690
End
Begin VB.Label Label10
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Processing Stopped"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
240
Left
=
1440
TabIndex
=
37
Top
=
1800
Width
=
1890
End
Begin VB.Label lblTimeEnd
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
240
Left
TabIndex
Top
Width
=
=
=
=
3600
36
1800
735
End
Begin VB.Image img3DNaviPrint
Height
=
855
Left
=
9840
Picture
=
"frmShortestPath.frx":0000
Stretch
=
-1 'True
ToolTipText
=
"Printable 3D Navigation"
Top
=
6240
Visible
=
0
'False
Width
=
1095
End
Begin VB.Image img3DNavigation
Height
=
735
Left
=
8760
Picture
=
"frmShortestPath.frx":27DD
Stretch
=
-1 'True
ToolTipText
=
"3D Environment Navigation"
Top
=
6240
Visible
=
0
'False
Width
=
855
End
Begin VB.Image imgExit
Height
=
735
Left
=
11160
Picture
=
"frmShortestPath.frx":5123
Stretch
=
-1 'True
ToolTipText
=
"Cancel"
Top
=
6240
Width
=
735
End
Begin VB.Label lblDistance
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
240
Left
=
3600
TabIndex
=
35
Top
=
2880
Width
=
735
End
Begin VB.Label Label26
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Nodes Used"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
=
=
=
0
700
0
'False
0
'False
0
'False
&H8000000A&
240
1440
34
2520
1110
End
Begin VB.Label Label25
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Z:"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
240
Left
=
10440
TabIndex
=
33
Top
=
4440
Width
=
165
End
Begin VB.Label Label24
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Y:"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
240
Left
=
8880
TabIndex
=
32
Top
=
4440
Width
=
180
End
Begin VB.Label Label23
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"X:"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
=
=
700
0
'False
0
'False
0
'False
&H8000000A&
240
6960
31
4440
195
End
Begin VB.Label lblDestiZcoord
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
240
Left
=
10680
TabIndex
=
30
Top
=
4440
Width
=
735
End
Begin VB.Label lblDestiYcoord
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
240
Left
=
9120
TabIndex
=
29
Top
=
4440
Width
=
735
End
Begin VB.Label lblDestiXcoord
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
=
0
0
0
'False
'False
'False
&H0000FF00&
240
7320
28
4440
735
End
Begin VB.Label Label22
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Z:"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
240
Left
=
4320
TabIndex
=
27
Top
=
4440
Width
=
165
End
Begin VB.Label Label21
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Y:"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
240
Left
=
2760
TabIndex
=
26
Top
=
4440
Width
=
180
End
Begin VB.Label Label20
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"X:"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
0
0
'False
'False
&H8000000A&
240
840
25
4440
195
End
Begin VB.Label lblCurrZcoord
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
240
Left
=
4560
TabIndex
=
24
Top
=
4440
Width
=
735
End
Begin VB.Label lblCurrYcoord
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
240
Left
=
3000
TabIndex
=
23
Top
=
4440
Width
=
735
End
Begin VB.Label lblCurrXcoord
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
0
'False
&H0000FF00&
240
1200
22
4440
735
End
Begin VB.Label lblNodesUsed
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
240
Left
=
3600
TabIndex
=
21
Top
=
2520
Width
=
735
End
Begin VB.Label lblNodesCalculate
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
240
Left
=
3600
TabIndex
=
20
Top
=
2160
Width
=
735
End
Begin VB.Label lblTime
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
Height
Left
TabIndex
Top
Width
=
=
=
=
=
=
&H0000FF00&
240
3600
19
1440
735
End
Begin VB.Label lblDate
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
240
Left
=
3600
TabIndex
=
18
Top
=
1080
Width
=
735
End
Begin VB.Label lblStatus
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
240
Left
=
1440
TabIndex
=
17
Top
=
600
Width
=
735
End
Begin VB.Label Label8
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Destination Location Information:"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
Height
Left
TabIndex
Top
Width
=
=
=
=
=
=
End
Begin VB.Label Label7
AutoSize
=
BackStyle
=
Caption
=
BeginProperty Font
Name
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
End
Begin VB.Label Label6
AutoSize
=
BackStyle
=
Caption
=
BeginProperty Font
Name
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
End
Begin VB.Label Label5
AutoSize
=
BackStyle
=
Caption
=
BeginProperty Font
Name
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
&H8000000A&
240
6360
16
4080
3165
-1 'True
0 'Transparent
"Current Location Information:"
=
=
=
=
=
=
=
"Arial"
9.75
0
700
0
'False
0
'False
0
'False
&H8000000A&
240
240
15
4080
2805
-1 'True
0 'Transparent
"Time Executed"
=
=
=
=
=
=
=
"Arial"
9.75
0
700
0
'False
0
'False
0
'False
&H8000000A&
240
1440
14
1440
1425
-1 'True
0 'Transparent
"Date"
=
=
=
=
=
=
=
"Arial"
9.75
0
700
0
'False
0
'False
0
'False
&H8000000A&
Height
Left
TabIndex
Top
Width
=
=
=
=
=
End
Begin VB.Label Label4
AutoSize
=
BackStyle
=
Caption
=
BeginProperty Font
Name
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
End
Begin VB.Label Label3
AutoSize
=
BackStyle
=
Caption
=
BeginProperty Font
Name
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
End
Begin VB.Label Label2
AutoSize
=
BackStyle
=
Caption
=
BeginProperty Font
Name
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
240
1440
13
1080
435
-1 'True
0 'Transparent
"Nodes Calculated"
=
=
=
=
=
=
=
"Arial"
9.75
0
700
0
'False
0
'False
0
'False
&H8000000A&
240
1440
12
2160
1665
-1 'True
0 'Transparent
"Distance (Shortest)"
=
=
=
=
=
=
=
"Arial"
9.75
0
700
0
'False
0
'False
0
'False
&H8000000A&
240
1440
11
2880
1770
-1 'True
0 'Transparent
"Statistic:"
=
=
=
=
=
=
=
"Arial"
9.75
0
700
0
'False
0
'False
0
'False
&H8000000A&
240
Left
TabIndex
Top
Width
=
=
=
=
End
Begin VB.Label Label1
AutoSize
=
BackStyle
=
Caption
=
BeginProperty Font
Name
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
End
End
End
Attribute
Attribute
Attribute
Attribute
Attribute
360
10
1080
810
-1 'True
0 'Transparent
"Status:"
=
=
=
=
=
=
=
"Arial"
9.75
0
700
0
'False
0
'False
0
'False
&H8000000A&
240
360
9
600
645
VB_Name = "frmShortestPath"
VB_GlobalNameSpace = False
VB_Creatable = False
VB_PredeclaredId = True
VB_Exposed = False
Option Explicit
Private Sub Form_Load()
frmUtama.flaMainHeader.Playing = False
frmUtama.Enabled = False
fraShortest.Visible = False
fraDijkstra.Visible = False
cboLvl.Visible = False
cboNode.Visible = False
lblTime = time
Dim
Dim
Dim
Dim
Dim
BarisData As String
i As Integer
Z As Integer
Check As Integer
CheckingPrint As Boolean
i = 0
Check = 0
Open frmDBConfig.txtMWDB.text For Input As #1 fail
Line Input #1, BarisData
If BarisData = "Copyright to Uznetwork@topology (TM)
Line Input #1, BarisData
1.0" Then
If BarisData = "© All right reserved 2006" Then
MulaBalik:
While Not EOF(1)
i = i + 1
Line Input #1, BarisData
If BarisData = "UzEader" Then
Line Input #1, BarisData
i = BarisData
ID(i) = BarisData
Line Input #1, CoordX(i)
Line Input #1, CoordY(i)
Line Input #1, CoordZ(i)
Z = 0
CessorSection:
Line Input #1, Cessor(i, Z)
Z = Z + 1
If Z < 8 Then GoTo CessorSection 'counter back to
fill the eight cessor
Line Input #1, BarisData
Z = 0
If BarisData = "Uzdistjar" Then
DistSection:
Line Input #1, DistUzdistjar(i, Z)
Z = Z + 1
If Z < 8 Then GoTo DistSection 'Counter bagi
cukup
Line Input
If Blok(i)
data yang without attribute
Line Input
Line Input
Line Input
#1, Blok(i)
= "" Then GoTo MulaBalik
' Untuk
#1, Aras(i)
#1, RNumber(i)
#1, BName(i)
Else
GoTo ErrHandler
End If
Else
GoTo MulaBalik
End If ' untuk UzEader
Wend
End If
Else
GoTo ErrHandler
End If
Close #1
Dim
Dim
Dim
Dim
Dim
'--------- always tutup fail, jangan lupa
CurrLoc As String
TarLoc As String
idCurrLoc As Integer
idTarLoc As Integer
kCheck As Integer
'Validation field Current
If frmUtama.cboRoomNumber.text = "" Or frmUtama.cboRoomNumber.text =
"<None>" Or frmUtama.cboRoomNumber.text = "Null" Then
kCheck = 0
CurrLoc = frmUtama.cboRoom.text
For kCheck = 0 To i
If BName(kCheck) = CurrLoc Then
idCurrLoc = ID(kCheck)
Exit For
End If
Next kCheck
Else
kCheck = 0
CurrLoc = frmUtama.cboRoomNumber.text
For kCheck = 0 To i
If RNumber(kCheck) = CurrLoc Then
If BName(kCheck) = frmUtama.cboRoom.text Or
frmUtama.cboRoom.text = "" Or frmUtama.cboRoom.text = "<None>" Then
idCurrLoc = ID(kCheck)
Exit For
Else
MsgBox "Your Current Name and Room Number doesn't
match. Please use Advance Search.", vbExclamation, "Matching Field
Error"
lblStatus.Caption = "Stopped"
lblTime = "<None>"
Exit Sub
End If
End If
Next kCheck
End If
'Validation field Target
If frmUtama.cboTargetRoomNumber.text = "" Or
frmUtama.cboTargetRoomNumber.text = "<None>" Or
frmUtama.cboTargetRoomNumber.text = "Null" Then
kCheck = 0
TarLoc = frmUtama.cboTargetRoom.text
For kCheck = 0 To i
If BName(kCheck) = TarLoc Then
idTarLoc = ID(kCheck)
Exit For
End If
Next kCheck
Else
kCheck = 0
TarLoc = frmUtama.cboTargetRoomNumber.text
For kCheck = 0 To i
If RNumber(kCheck) = TarLoc Then
If BName(kCheck) = frmUtama.cboTargetRoom.text Or
frmUtama.cboTargetRoom.text = "" Or frmUtama.cboTargetRoom.text =
"<None>" Then
idTarLoc = ID(kCheck)
Exit For
Else
MsgBox "Your Destination Name and Room Number
doesn't match. Please use Advance Search.", vbExclamation, "Matching
Field Error"
lblStatus.Caption = "Stopped"
lblTime = "<None>"
Exit Sub
End If
End If
Next kCheck
End If
lblStaffNameCurLoc.Caption = BName(idCurrLoc)
lblNumberCurLoc.Caption = RNumber(idCurrLoc)
lblArasCurLoc.Caption = Aras(idCurrLoc)
lblBlokCurLoc.Caption = Blok(idCurrLoc)
lblStaffNameTarLoc.Caption = BName(idTarLoc)
lblNumberTarLoc.Caption = RNumber(idTarLoc)
lblArasTarLoc.Caption = Aras(idTarLoc)
lblBlokTarLoc.Caption = Blok(idTarLoc)
lblCurrXcoord.Caption = FormatNumber((CoordX(idCurrLoc)
Model_Scaling), 3)
lblCurrYcoord.Caption = FormatNumber((CoordY(idCurrLoc)
Model_Scaling), 3)
lblCurrZcoord.Caption = FormatNumber((CoordZ(idCurrLoc)
Model_Scaling), 3)
lblDestiXcoord.Caption = FormatNumber((CoordX(idTarLoc)
Model_Scaling), 3)
lblDestiYcoord.Caption = FormatNumber((CoordY(idTarLoc)
Model_Scaling), 3)
lblDestiZcoord.Caption = FormatNumber((CoordZ(idTarLoc)
Model_Scaling), 3)
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Permanent(1000) As Integer
Temporary(1000) As Integer
distance(1000) As Double 'Long
TempDistance(1000) As Double
idPermanent As Integer
idTemporary As Integer
CessorCheck As Integer
Dim
Dim
Dim
Dim
Dim
TempMinimumDist As Double
TempMinimumDistID As Integer
CompareTempDistance As Double
LevelSpread(1000) As Integer
LevelSpreadCheck As Integer
/
/
/
/
/
/
'Fix
'Fix
'Fix
'Fix
'Fix
'Fix
Dim A As Integer
Dim B As Integer
idPermanent = 0
idTemporary = 1
A = 0
For A = 0 To i
If ID(A) > "" Then
Temporary(idTemporary) = ID(A)
TempDistance(idTemporary) = 10101010 'set default
idTemporary = idTemporary + 1
End If
Next A
'------------------------------------------TempMinimumDist = 0
LevelSpread(idCurrLoc) = 0
StartSet:
idPermanent = idPermanent + 1
Permanent(idPermanent) = idCurrLoc
distance(idPermanent) = TempMinimumDist
Call cbo.AddItem(Permanent(idPermanent))
Call cbo2.AddItem(distance(idPermanent))
'LevelSpreadCheck = LevelSpreadCheck + 1
A = 0
For A = 0 To i
If Temporary(A) = idCurrLoc Then
Temporary(A) = 12345 'Not realistic
TempDistance(A) = 11111111
End If
Next A
If Permanent(idPermanent) = idTarLoc Then
'MsgBox "Sampai!"
GoTo AkhirKira
End If
CessorCheck = 0
For CessorCheck = 0 To 7
If Cessor(idCurrLoc, CessorCheck) > 0 Then
A = 1
For A = 1 To i
If Temporary(A) = Cessor(idCurrLoc, CessorCheck) Then
B = 1
For B = 1 To idPermanent
If Cessor(idCurrLoc, CessorCheck) = Permanent(B)
Then 'GoTo LoopExit
'MsgBox "Ada tak?"
GoTo LoopExit
End If
Next B
CompareTempDistance = distance(idPermanent) +
DistUzdistjar(idCurrLoc, CessorCheck) 'TempDistance(A)
'MsgBox CompareTempDistance
If CompareTempDistance < TempDistance(A) Then
TempDistance(A) = CompareTempDistance
'MsgBox Permanent(idPermanent)
If LevelSpread(Cessor(idCurrLoc, CessorCheck)) =
0 Then
LevelSpreadCheck = LevelSpread(idCurrLoc) +
1
LevelSpread(Cessor(idCurrLoc, CessorCheck))
= LevelSpreadCheck
Call
cboLvl.AddItem(LevelSpread(Cessor(idCurrLoc, CessorCheck)))
Call cboNode.AddItem(Cessor(idCurrLoc,
CessorCheck))
'MsgBox LevelSpread(A)
End If
End If
LoopExit:
End If
Next A
End If
Next CessorCheck
A = 0
TempMinimumDist = 1010101010
For A = 0 To i
If TempDistance(A) > 0 Then
If TempDistance(A) < TempMinimumDist Then
TempMinimumDist = TempDistance(A)
TempMinimumDistID = A
End If
End If
Next A
'MsgBox TempMinimumDistID & " TempMinimumDistID"
'MsgBox TempMinimumDist & " TempMinimumDist"
idCurrLoc = Temporary(TempMinimumDistID)
'MsgBox idCurrLoc & "TempMinimumDistID punya nilai"
GoTo StartSet
AkhirKira:
Dim
Dim
Dim
Dim
Dim
Dim
IndexArray As Integer
LastID As String 'Integer
LastDist As Double
TransLastID As Integer
TransLastDist As Double
CheckDist As String 'Double
IndexArray = cbo2.ListCount - 1
TransLastID = cbo.List(IndexArray)
TransLastDist = cbo2.List(IndexArray)
LastID = TransLastID
Call cbo3.AddItem(LastID)
TransLastDist = FormatNumber(TransLastDist, 10)
LastDist = TransLastDist
Call cbo4.AddItem(LastDist)
If LastDist = 1010101010 Then
Call cbo3.Clear
Call cbo4.Clear
Call cbo3.AddItem("UNREACHABLE")
lblStatus.Caption = "Sorry, there's no path to your destination
location"
lblDate = Date
lblTime = time
lblNodesCalculate.Caption = cbo.ListCount
Exit Sub
End If
If cbo2.List(cbo2.ListCount - 1) = "10101010" Then
lblStatus.Caption = "Sorry, there's no path to your destination
location"
lblDate = Date
lblTime = time
lblNodesCalculate.Caption = cbo.ListCount
Exit Sub
End If
LastStart:
If LastID = cbo.List(0) Then
Call Create_Result 'nak buat statistik semua
Exit Sub
End If
A = 0
For A = 0 To i
If ID(A) = LastID Then
CessorCheck = 0
For CessorCheck = 0 To 7
If Cessor(A, CessorCheck) > 0 Then
If LevelSpread(Cessor(A, CessorCheck)) =
(LevelSpread(LastID) - 1) Then
'DistUzdistjar(A, CessorCheck) =
FormatNumber(DistUzdistjar(A, CessorCheck), 20)
CheckDist = LastDist - DistUzdistjar(A, CessorCheck)
CheckDist = FormatNumber(CheckDist, 8)
B = 0
For B = 0 To IndexArray
cbo2.List(B) = FormatNumber(cbo2.List(B), 8)
If cbo.List(B) = Cessor(A, CessorCheck) Then
'If Val(Format(cbo2.List(B), "0000000.0000")) =
Val(Format(CheckDist, "0000000.0000")) Then
TransLastID = cbo.List(B)
TransLastDist = cbo2.List(B)
LastID = TransLastID
Call cbo3.AddItem(LastID)
LastDist = TransLastDist
Call cbo4.AddItem(LastDist)
GoTo LastStart
'End If
End If
Next B
End If
End If
Next CessorCheck
End If
Next A
Exit Sub
ErrHandler:
MsgBox "Your Data is Corrupted! Please configure your data first.",
vbCritical
End Sub
Public Sub Create_Result()
lblDate = Date
lblTimeEnd = time
lblStatus.Caption = "Success"
lblNodesCalculate.Caption = cbo.ListCount
lblNodesUsed.Caption = cbo3.ListCount
lblDistance.Caption = Val(Format((cbo4.List(0) / Model_Scaling),
"0000000.0000")) & " meters"
img3DNavigation.Visible = True
lbl3DNavigation.Visible = True
img3DNaviPrint.Visible = True
lbl3DNaviPrint.Visible = True
Call Draw_Cube_Button_Click
End Sub
Private Sub imgExit_Click()
frmUtama.Enabled = True
frmUtama.flaMainHeader.Playing = True
Unload Me
End Sub
Private Sub img3DNavigation_Click()
frmUtama.lblDB.Enabled = False
Dim KiraCombo As Integer
Counter = 1
KiraCombo = cbo3.ListCount - 1
For Counter = 1 To (cbo3.ListCount)
NodeUsed(Counter) = cbo3.List(KiraCombo)
KiraCombo = KiraCombo - 1
Next Counter
frm3DNavigation.Show
img3DNavigation.Visible = False
lbl3DNavigation.Visible = False
img3DNaviPrint.Visible = False
lbl3DNaviPrint.Visible = False
End Sub
Private Sub Draw_Cube_Button_Click()
Dim
Dim
Dim
Dim
Theta
Alt
Size
Perspective
Perspective
Size
Alt
Theta
=
=
=
=
As
As
As
As
Single
Single
Single
Single
'
'
'
'
Azimuth of the eye
Altitude of the eye
Image size scale
Image perspective scale
Val(Perspective_Factor)
Val(Size_Factor)
Val(Alt_Ang)
Val(Theta_Ang)
DRAW_A_CUBE Theta, Alt, Size, Perspective
' Restore mouse pointer to normal when plotting finished
frmShortestPath.MousePointer = vbDefault
End Sub
Private Sub DRAW_A_CUBE(Theta, Alt, Size, Perspective)
Dim
Dim
Dim
Dim
Dim
Dim
Dim
X
Y
Z
xN2
yN2
ZN2
angle
As String 'Long
As String 'Long
As String 'Long
As String 'Long
As String 'Long
As String 'Long
As Single
Dim index As Integer
Dim Pengira As Integer
Dim PengiraCombo As Integer
Dim Draw2DLine(5000) As Integer
Pengira = 1
PengiraCombo = cbo3.ListCount - 1
Pengira = 1
For Pengira = 1 To (cbo3.ListCount)
Draw2DLine(Pengira) = cbo3.List(PengiraCombo)
PengiraCombo = PengiraCombo - 1
Next Pengira
Pengira = 1
'For Pengira = 1 To (cbo3.ListCount - 1)
'
Load DLine(Pengira)
'
DLine(Pengira).ZOrder
'Next Pengira
Pengira = 1
Dim BoundIDCheck As Integer
BoundIDCheck = LBound(ID)
For BoundIDCheck = LBound(ID) To UBound(ID)
If ID(BoundIDCheck) = ""
X = CoordX(BoundIDCheck)
Y = CoordY(BoundIDCheck)
Z = CoordZ(BoundIDCheck)
Then GoTo SKIPPING
/ 2
/ 2
/ 2
If Cessor(BoundIDCheck, 0) <> "0" Then
Pengira = Pengira + 1
Load DLine(Pengira)
DLine(Pengira).BorderColor = &HFFFF&
DLine(Pengira).ZOrder
xN2 = CoordX(Cessor((BoundIDCheck), 0))
yN2 = CoordY(Cessor((BoundIDCheck), 0))
ZN2 = CoordZ(Cessor((BoundIDCheck), 0))
Plot_Dot X, Y, Z, xN2, yN2, ZN2, Theta,
Perspective, Pengira
End If
/ 2
/ 2
/ 2
Alt, Size,
If Cessor(ID(BoundIDCheck), 1) <> "0" Then
Pengira = Pengira + 1
Load DLine(Pengira)
DLine(Pengira).BorderColor = &HFFFF&
DLine(Pengira).ZOrder
xN2 = CoordX(Cessor((BoundIDCheck), 1)) / 2
yN2 = CoordY(Cessor((BoundIDCheck), 1)) / 2
ZN2 = CoordZ(Cessor((BoundIDCheck), 1)) / 2
Plot_Dot X, Y, Z, xN2, yN2, ZN2, Theta, Alt, Size,
Perspective, Pengira
End If
SKIPPING:
Next BoundIDCheck
Dim Pengira2 As Integer
Pengira2 = 1
For Pengira2 = 1 To (cbo3.ListCount - 1)
xN2 = CoordX(Draw2DLine(Pengira2 + 1)) / 2
yN2 = CoordY(Draw2DLine(Pengira2 + 1)) / 2
ZN2 = CoordZ(Draw2DLine(Pengira2 + 1)) / 2
X = CoordX(Draw2DLine(Pengira2)) / 2
Y = CoordY(Draw2DLine(Pengira2)) / 2
Z = CoordZ(Draw2DLine(Pengira2)) / 2
Pengira = Pengira + 1
Load DLine(Pengira)
DLine(Pengira).ZOrder
Plot_Dot X, Y, Z, xN2, yN2, ZN2, Theta, Alt, Size,
Perspective, Pengira
Next Pengira2
End Sub
Private Sub Plot_Dot _
(X, Y, Z, xN2, yN2, ZN2, Theta, Alt, Size, Perspective, Pengira)
Dim cX As Single
Dim cY As Single
Dim
Dim
Dim
Dim
Dim
Dim
vX As Single
vY As Single
vZ As Single
vX2 As Single
vY2 As Single
vZ2 As Single
' Define 2D screen (X,Y) plotting coordinates
Dim pX As Single
Dim pY As Single
Dim pX2 As Single
Dim pY2 As Single
' Define zenith distance angle.
Dim Phi As Single
Phi = 90 - Alt
' Define sines and
Dim Sin_Theta As
Dim Cos_Theta As
Dim Sin_Phi
As
Dim Cos_Phi
As
cosines of Theta and Phi
Single
Single
Single
Single
' Set the center coordinate values of the plotting area
cX = -700 '(Plot.width / 100) '- (Plot.width / 6)
cY = (Plot.height / 2) '+ (Plot.height / 12)
Sin_Theta
Cos_Theta
Sin_Phi
Cos_Phi
=
=
=
=
Sine(Theta)
Cosine(Theta)
Sine(Phi)
Cosine(Phi)
vX = -X * Sin_Theta _
+ Y * Cos_Theta
vX2 = -xN2 * Sin_Theta _
+ yN2 * Cos_Theta
vY = -X * Cos_Theta * Cos_Phi _
- Y * Sin_Theta * Cos_Phi _
+ Z * Sin_Phi
vY2 = -xN2 * Cos_Theta * Cos_Phi _
- yN2 * Sin_Theta * Cos_Phi _
+ ZN2 * Sin_Phi
vZ = -X * Cos_Theta * Sin_Phi _
- Y * Sin_Theta * Sin_Phi _
- Z * Cos_Phi + Perspective
vZ2 = -xN2 * Cos_Theta * Sin_Phi _
- yN2 * Sin_Theta * Sin_Phi _
- ZN2 * Cos_Phi + Perspective
pX = cX + Size * vX /
pY = cY - Size * vY /
pX2 = cX + Size * vX2
pY2 = cY - Size * vY2
vZ
vZ
/ vZ2
/ vZ2
DLine(Pengira).Visible = True
DLine(Pengira).X1 = pX
DLine(Pengira).X2 = pX2
DLine(Pengira).Y1 = pY
DLine(Pengira).Y2 = pY2
End Sub
Public Function Sine(Degrees_Arg)
' Level 00
Sine = Sin(Degrees_Arg * Atn(1) / 45)
End Function
Public Function Cosine(Degrees_Arg)
' Level 00
Cosine = Cos(Degrees_Arg * Atn(1) / 45)
End Function
VERSION 5.00
Object = "{D27CDB6B-AE6D-11CF-96B8-444553540000}#1.0#0";
"Flash9.ocx"
Begin VB.Form frm3DNavigation
BackColor
=
&H00000080&
BorderStyle
=
0 'None
Caption
=
"3D Navigation (Network Analysis)"
ClientHeight
=
11490
ClientLeft
=
0
ClientTop
=
0
ClientWidth
=
15360
Icon
=
"frm3DNavigation.frx":0000
LinkTopic
=
"Form1"
ScaleHeight
=
11490
ScaleWidth
=
15360
ShowInTaskbar
=
0
'False
StartUpPosition =
2 'CenterScreen
Begin VB.Frame fraDestination
BackColor
=
&H00000000&
Caption
=
"Destination"
BeginProperty Font
Name
=
"MS Sans Serif"
Size
=
8.25
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
2295
Left
=
10800
TabIndex
=
4
Top
=
6960
Width
=
3975
Begin VB.Label Label10
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Coordinates"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
225
Left
=
240
TabIndex
=
49
Top
=
1440
Width
=
1035
End
Begin VB.Label lblDestiBlock
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
225
Left
=
2040
TabIndex
=
40
Top
=
1200
Width
=
645
End
Begin VB.Label Label27
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Block"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
225
Left
=
240
TabIndex
=
39
Top
=
1200
Width
=
480
End
Begin VB.Label lblDestiName
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
8.25
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FFFF&
Height
=
210
Left
=
360
TabIndex
=
38
Top
=
480
Width
=
600
End
Begin VB.Label Label25
AutoSize
=
BackStyle
=
Caption
=
BeginProperty Font
Name
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
-1 'True
0 'Transparent
"Room/Staff Name"
=
=
=
=
=
=
=
"Arial"
9.75
0
700
0
'False
0
'False
0
'False
&H8000000A&
240
240
37
240
1665
End
Begin VB.Label lblDestiNumber
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
225
Left
=
2040
TabIndex
=
36
Top
=
720
Width
=
645
End
Begin VB.Label Label22
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Room Number"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
225
Left
=
240
TabIndex
=
35
Top
=
720
Width
=
1215
End
Begin VB.Label lblDestiFloor
AutoSize
=
-1 'True
BackStyle
=
Caption
=
BeginProperty Font
Name
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
0 'Transparent
"<None>"
=
=
=
=
=
=
=
"Arial"
9
0
700
0
'False
0
'False
0
'False
&H0000FF00&
225
2040
34
960
645
End
Begin VB.Label Label18
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Floor Level"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
225
Left
=
240
TabIndex
=
33
Top
=
960
Width
=
915
End
Begin VB.Label lblDestiX
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
225
Left
=
2040
TabIndex
=
24
Top
=
1440
Width
=
645
End
Begin VB.Label Label15
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
BeginProperty Font
Name
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
"X"
=
=
=
=
=
=
=
"Arial"
9
0
700
0
'False
0
'False
0
'False
&H8000000A&
225
1680
23
1440
120
End
Begin VB.Label lblDestiY
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
225
Left
=
2040
TabIndex
=
22
Top
=
1680
Width
=
645
End
Begin VB.Label Label13
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Y"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
225
Left
=
1680
TabIndex
=
21
Top
=
1680
Width
=
105
End
Begin VB.Label lblDestiZ
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
=
=
=
=
=
"Arial"
9
0
700
0
'False
0
'False
0
'False
&H0000FF00&
225
2040
20
1920
645
End
Begin VB.Label Label11
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Z"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
225
Left
=
1680
TabIndex
=
19
Top
=
1920
Width
=
105
End
End
Begin VB.Frame fraFrom
BackColor
=
&H00000000&
Caption
=
"From"
BeginProperty Font
Name
=
"MS Sans Serif"
Size
=
8.25
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
2295
Left
=
10800
TabIndex
=
3
Top
=
4560
Width
=
3975
Begin VB.Label Label8
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Coordinates"
BeginProperty Font
Name
=
"Arial"
Size
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
=
=
=
=
9
0
700
0
'False
0
'False
0
'False
&H8000000A&
225
240
48
1440
1035
End
Begin VB.Label lblFromBlock
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
225
Left
=
2040
TabIndex
=
32
Top
=
1200
Width
=
645
End
Begin VB.Label Label23
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Block"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
225
Left
=
240
TabIndex
=
31
Top
=
1200
Width
=
480
End
Begin VB.Label lblFromName
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
8.25
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
=
=
=
0
700
0
'False
0
'False
0
'False
&H0000FFFF&
210
360
30
480
600
End
Begin VB.Label Label21
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Room/Staff Name:"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
240
Left
=
240
TabIndex
=
29
Top
=
240
Width
=
1725
End
Begin VB.Label lblFromNumber
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
225
Left
=
2040
TabIndex
=
28
Top
=
720
Width
=
645
End
Begin VB.Label Label19
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Room Number"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
=
=
700
0
'False
0
'False
0
'False
&H8000000A&
225
240
27
720
1215
End
Begin VB.Label lblFromFloor
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
225
Left
=
2040
TabIndex
=
26
Top
=
960
Width
=
645
End
Begin VB.Label Label17
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Floor Level"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
225
Left
=
240
TabIndex
=
25
Top
=
960
Width
=
915
End
Begin VB.Label lblFromX
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
=
0
0
0
'False
'False
'False
&H0000FF00&
225
2040
18
1440
645
End
Begin VB.Label Label9
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"X"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
225
Left
=
1680
TabIndex
=
17
Top
=
1440
Width
=
120
End
Begin VB.Label lblFromY
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
225
Left
=
2040
TabIndex
=
16
Top
=
1680
Width
=
645
End
Begin VB.Label Label7
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Y"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
0
0
'False
'False
&H8000000A&
225
1680
15
1680
105
End
Begin VB.Label lblFromZ
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
225
Left
=
2040
TabIndex
=
14
Top
=
1920
Width
=
645
End
Begin VB.Label Label4
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Z"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
225
Left
=
1680
TabIndex
=
13
Top
=
1920
Width
=
105
End
End
Begin VB.Frame fraCurrentLocation
BackColor
=
&H00000000&
Caption
=
"Current Location Coordinates"
BeginProperty Font
Name
=
"MS Sans Serif"
Size
=
8.25
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
1455
Left
=
10800
TabIndex
=
2
Top
=
2640
Width
=
3975
Begin VB.Label lblCurrentStatus2
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H000080FF&
Height
=
240
Left
=
1320
TabIndex
=
41
Top
=
1080
Visible
=
0
'False
Width
=
735
End
Begin VB.Label lblCurrentStatus
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H000080FF&
Height
=
240
Left
=
1080
TabIndex
=
12
Top
=
1080
Width
=
735
End
Begin VB.Label Label3
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Status"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
Height
Left
TabIndex
Top
Width
=
=
=
=
=
=
&H8000000A&
240
240
11
1080
585
End
Begin VB.Label Label2
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Z"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
225
Left
=
240
TabIndex
=
10
Top
=
720
Width
=
105
End
Begin VB.Label lblCurrentZ
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
240
Left
=
600
TabIndex
=
9
Top
=
720
Width
=
735
End
Begin VB.Label Label1
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Y"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
Height
Left
TabIndex
Top
Width
=
=
=
=
=
=
&H8000000A&
225
240
8
480
105
End
Begin VB.Label lblCurrentY
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
=
240
Left
=
600
TabIndex
=
7
Top
=
480
Width
=
735
End
Begin VB.Label Label6
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"X"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
225
Left
=
240
TabIndex
=
6
Top
=
240
Width
=
120
End
Begin VB.Label lblCurrentX
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"<None>"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H0000FF00&
Height
Left
TabIndex
Top
Width
=
=
=
=
=
240
600
5
240
735
End
End
Begin ShockwaveFlashObjectsCtl.ShockwaveFlash flaMainHeader
Height
=
1935
Left
=
600
TabIndex
=
1
Top
=
480
Width
=
11535
_cx
=
4214650
_cy
=
4197717
FlashVars
=
""
Movie
=
""
Src
=
""
WMode
=
"Window"
Play
=
-1 'True
Loop
=
-1 'True
Quality
=
"High"
SAlign
=
""
Menu
=
-1 'True
Base
=
""
AllowScriptAccess=
""
Scale
=
"ShowAll"
DeviceFont
=
0
'False
EmbedMovie
=
0
'False
BGColor
=
""
SWRemote
=
""
MovieData
=
""
SeamlessTabbing =
-1 'True
Profile
=
0
'False
ProfileAddress =
""
ProfilePort
=
0
AllowNetworking =
"all"
End
Begin VB.PictureBox picMainView
BackColor
=
&H00404040&
BorderStyle
=
0 'None
Height
=
7695
Left
=
840
MousePointer
=
2 'Cross
ScaleHeight
=
7695
ScaleMode
=
0 'User
ScaleWidth
=
9495
TabIndex
=
0
Top
=
3000
Width
=
9495
End
Begin VB.Frame fra3DNaviView
Appearance
=
0 'Flat
BackColor
=
&H00404040&
Caption
=
"Three Dimensional (3D) Navigation View"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
0
0
'False
'False
&H8000000A&
8295
600
42
2640
9975
End
Begin VB.Frame Frame1
BackColor
=
&H00404040&
BorderStyle
=
0 'None
Height
=
11055
Left
=
240
TabIndex
=
43
Top
=
240
Width
=
14895
Begin VB.Timer Timer1
Interval
=
1
Left
=
120
Top
=
2640
End
Begin ShockwaveFlashObjectsCtl.ShockwaveFlash flaKompas
Height
=
1935
Left
=
12120
TabIndex
=
51
Top
=
240
Width
=
2415
_cx
=
4198564
_cy
=
4197717
FlashVars
=
""
Movie
=
""
Src
=
""
WMode
=
"Window"
Play
=
-1 'True
Loop
=
-1 'True
Quality
=
"High"
SAlign
=
""
Menu
=
-1 'True
Base
=
""
AllowScriptAccess=
""
Scale
=
"ShowAll"
DeviceFont
=
0
'False
EmbedMovie
=
0
'False
BGColor
=
""
SWRemote
=
""
MovieData
=
""
SeamlessTabbing =
-1 'True
Profile
=
0
'False
ProfileAddress =
""
ProfilePort
=
0
AllowNetworking =
"all"
End
Begin VB.Label Label12
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"# Press F3 for help"
BeginProperty Font
Name
=
"Arial"
Size
=
9.75
Charset
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
=
=
=
0
700
0
'False
0
'False
0
'False
&H0080FFFF&
240
12720
50
10680
1755
End
Begin VB.Label lblDate
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Date"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
225
Left
=
10560
TabIndex
=
47
Top
=
3960
Width
=
390
End
Begin VB.Label Label5
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"X"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H8000000A&
Height
=
225
Left
=
9840
TabIndex
=
46
Top
=
2400
Width
=
120
End
Begin VB.Label lblTime
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"Time"
BeginProperty Font
Name
=
"Arial"
Size
=
9
Charset
=
0
Weight
Underline
Italic
Strikethrough
EndProperty
ForeColor
=
Height
=
Left
=
TabIndex
=
Top
=
Width
=
=
=
=
=
700
0
'False
0
'False
0
'False
&H8000000A&
225
13440
45
3960
420
End
Begin VB.Label lblCopyright
AutoSize
=
-1 'True
BackStyle
=
0 'Transparent
Caption
=
"©"
BeginProperty Font
Name
=
"Arial"
Size
=
15.75
Charset
=
0
Weight
=
700
Underline
=
0
'False
Italic
=
0
'False
Strikethrough
=
0
'False
EndProperty
ForeColor
=
&H00FFFFFF&
Height
=
360
Left
=
14280
TabIndex
=
44
Top
=
10320
Width
=
225
End
Begin VB.Image imgHome
Enabled
=
0
'False
Height
=
1695
Left
=
10560
Picture
=
"frm3DNavigation.frx":0ECA
Stretch
=
-1 'True
Top
=
9000
Width
=
3975
End
End
End
Attribute VB_Name = "frm3DNavigation"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim BitmapArrow As Long
Dim DestOK As Long
Const
Const
Const
Const
TURNLEFT = 0
TURNRIGHT = 1
TURNUP = 3
TURNDOWN = 4
Const MOVEFORWARD = 0
Const MOVEBACKWARD = 1
Const MOVESPEED = 6
Const TURNSPEED = 5
Const TINGGI_HUMAN = 1.7 * Model_Scaling ' Tinggi Human darab dgn
scaling bangunan. in this case is times 5
Dim
Dim
Dim
Dim
dblCamLoc(0 To 2) As Double
dblCamDir(0 To 2) As Double
dblComFactor As Double
lngKamera As Long
Dim
Dim
Dim
Dim
Dim
Dim
lngLayerDotBmp As Long
lngDot As Long
lngDestDot As Long
lngLayerPetaBmp As Long
lngMenuPeta As Long
CounterDot As Boolean
Dim Steps As Double
Dim Hit_Wall As Double
Dim Hit_Sound As Boolean
Dim Bunyi_On As Boolean
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
DrawPath As Long
dblCameraDirection(0 To 2) As Double
PolygonHit As Long
ObjectHit As Long
Intersection(0 To 2) As Double
direction(0 To 2) As Double
BolehJalan As Long
PointAtas(0 To 2) As Double
PointBawah(0 To 2) As Double
Color(0 To 2) As Long
Private Sub Form_Activate()
STATE_engine_set_speaker_mode NO
STATE_engine_hide_log_window
Hit_Sound = False
If Engine_On = True Then GoTo SkipLoadWorldAgain
'load world.
Dim WldLoad As Integer
WldLoad = STATE_engine_load_world(WorldFileName, WorldFileDir,
WorldBitmapsFileName, USER_DEFINED_BEHAVIOR +
ENABLE_VERY_BRIGHT_LIGHT) 'kat lab
If WldLoad <> OK Then ExitOnError "Error loading world"
' load bitmap arrow
BitmapArrow = STATE_bitmap_load("C:\Program Files\3D Network
Analysis\System Settings\Arrow.bmp", 0)
If BitmapArrow = 0 Then
MsgBox "Failed to Load bitmap Arrow"
End
End If
' load Destination OK
DestOK = STATE_bitmap_load("C:\Program Files\3D Network
Analysis\System Settings\DestOK.bmp", 0)
If DestOK = 0 Then
MsgBox "Failed to Load Destination OK Logo"
End
End If
' load dot untuk koordinat semasa bagi 2D map
lngLayerDotBmp = STATE_bitmap_load("C:\Program Files\3D Network
Analysis\System Settings\Dot.bmp", 1)
If (lngLayerDotBmp = 0) Then
MsgBox "Couldn't load layer dot bmp", vbCritical
End If
' load peta aras 2D map
lngLayerPetaBmp = STATE_bitmap_load("C:\Program Files\3D Network
Analysis\System Settings\PetaAras.bmp", 0)
If (lngLayerPetaBmp = 0) Then
MsgBox "Couldn't load layer peta bmp", vbCritical
End If
' load buyi Steps dan Climbin'
Steps = STATE_sound_load("C:\Program Files\3D Network
Analysis\Icon\Steps2Panjang.mp3", lngKamera, SOUND_DISTANCE_DEFAULT)
Hit_Wall = STATE_sound_load("C:\Program Files\3D Network
Analysis\Icon\hit_wallpjg.mp3", lngKamera, SOUND_DISTANCE_DEFAULT)
STATE_sound_set_volume Steps, 5000&
STATE_sound_set_volume Hit_Wall, 5000&
SkipLoadWorldAgain:
'Initialize 3D card.
If (STATE_3D_card_set_window_mode = VR_ERROR) Then
If (STATE_3D_card_check_hardware_support = YES) Then
MsgBox "Failed to initialize 3D Acceleration.", vbOKOnly,
"No 3D card detected"
End If
End If
If Engine_On = True Then
STATE_polygon_disable lngDot
STATE_polygon_disable lngMenuPeta
End If
If DestDot_On = True Then
STATE_polygon_disable lngDestDot
End If
InitializeCamera
If JustNavigation = False Then
Call SetJidar
Call DrawShortestPath
End If
frmUtama.flaMainHeader.Playing = False
SetPetaLayers
ShowCursor 0
LoopScene
End Sub
Private Sub InitializeCamera()
'setup camera.
Dim DirectionKamera(0 To 2) As Double
lngKamera = STATE_camera_get_default_camera
If JustNavigation = False Then
STATE_camera_set_location lngKamera, CoordX(NodeUsed(1)),
CoordY(NodeUsed(1)), CoordZ(NodeUsed(1)) ' nilai x,y,z (titik 1st current location
DirectionKamera(0) = CoordX(NodeUsed(2)) CoordX(NodeUsed(1))
DirectionKamera(1) = CoordY(NodeUsed(2)) CoordY(NodeUsed(1))
DirectionKamera(2) = CoordZ(NodeUsed(2)) CoordZ(NodeUsed(1)) - 5
STATE_camera_set_direction lngKamera, DirectionKamera(0),
DirectionKamera(1), DirectionKamera(2) ' nilai x,y,z (titik 2nd
tolak 1st)
ElseIf JustNavigation = True Then
STATE_camera_set_location lngKamera, 2270.4182, 156.3203, 6
STATE_camera_set_direction lngKamera, -34.52, 0, -10
End If
End Sub
Private Sub LoopScene()
Do Until GetAsyncKeyState(vbKeyEscape) < 0
DoEvents
GetCurrentCoord 'label koordinat di tepi skrin akan diupdate
guna sub ini
PlayerControls 'controls for camera movement.
CLIMBING ' set for climb tangga or jalan naik turun surface
UpdateDotBmp ' untuk update dot merah bagi kedudukan
bergerak user untuk 2D map
STATE_engine_render picMainView.hwnd, lngKamera
If GetAsyncKeyState(vbKeyF3) < 0 Then
MsgBox "Exit = Press Escape and Navigate = Directional
Arrow", vbInformation, "Help"
End If
If GetAsyncKeyState(vbKeyP) < 0 Then
STATE_polygon_disable lngDot
STATE_polygon_disable lngMenuPeta
If JustNavigation = True Then GoTo SkipPdestDot
STATE_polygon_disable lngDestDot
SkipPdestDot:
End If
If GetAsyncKeyState(vbKeyM) < 0 Then
STATE_polygon_enable lngDot
STATE_polygon_enable lngMenuPeta
If JustNavigation = True Then GoTo SkipMdestDot
STATE_polygon_enable lngDestDot
SkipMdestDot:
End If
frm3DNavigation.SetFocus
Loop
STATE_3D_card_use NO
If JustNavigation = True Then
JustNavigation = False
End If
ShowCursor 1
'STATE_engine_close
'Unload Me
Engine_On = True
frmUtama.flaMainHeader.Playing = True
frm3DNavigation.Hide
End Sub
Private Sub PlayerControls() 'check user input and move or turn
camera appropriately.
dblComFactor = STATE_engine_get_computer_speed_factor
STATE_camera_get_location1 lngKamera, dblCamLoc(0)
STATE_camera_get_direction1 lngKamera, dblCamDir(0)
If GetAsyncKeyState(vbKeyUp) < 0 Then
MoveCam (MOVEFORWARD)
lblCurrentStatus.Caption = "Moving Forward"
If Bunyi_On = False Then
STATE_sound_play Steps, SOUND_LOOP_NORMAL
Bunyi_On = True
End If
ElseIf GetAsyncKeyState(vbKeyDown) < 0 Then
MoveCam (MOVEBACKWARD)
If Bunyi_On = False Then
STATE_sound_play Steps, SOUND_LOOP_NORMAL
Bunyi_On = True
End If
lblCurrentStatus.Caption = "Moving Backward"
Else
lblCurrentStatus.Caption = "<None>"
If Bunyi_On = True Then
STATE_sound_stop_all_sounds
Bunyi_On = False
End If
End If
If GetAsyncKeyState(vbKeyLeft) < 0 Then
Turn (TURNLEFT)
lblCurrentStatus.Visible = False
lblCurrentStatus2.Visible = True
lblCurrentStatus2.Caption = "Turning Left"
ElseIf GetAsyncKeyState(vbKeyRight) < 0 Then
Turn (TURNRIGHT)
lblCurrentStatus.Visible = False
lblCurrentStatus2.Visible = True
lblCurrentStatus2.Caption = "Turning Right"
Else
lblCurrentStatus2.Visible = False
lblCurrentStatus2.Caption = "<None>"
lblCurrentStatus.Visible = True
End If
If GetAsyncKeyState(vbKeyA) < 0 Then
Turn (TURNUP)
ElseIf GetAsyncKeyState(vbKeyZ) < 0 Then
Turn (TURNDOWN)
End If
End Sub
Private Sub MoveCam(direction As Integer)
Dim dblMovement As Double
'Reverse direction of vector in dblCamDir if we have to move
backwards.
If direction = MOVEBACKWARD Then InvertVector dblCamDir
dblCamLoc(0) =
dblComFactor
dblCamLoc(1) =
dblComFactor
dblCamLoc(2) =
dblComFactor
'Now dblCamLoc
our camera.
dblCamLoc(0) + dblCamDir(0) * MOVESPEED *
dblCamLoc(1) + dblCamDir(1) * MOVESPEED *
dblCamLoc(2) + dblCamDir(2) * MOVESPEED *
contains the new location to which we wish to move
'this will move the camera to its new location as far as it can.
dblMovement = STATE_camera_move_with_collision_detection(lngKamera,
dblCamLoc(0), 8)
If dblMovement = NO Then
If Hit_Sound = False Then
STATE_sound_play Hit_Wall, SOUND_NO_LOOP
Hit_Sound = True
End If
End If
If dblMovement = YES Then
If Hit_Sound = True Then
'STATE_sound_stop_all_sounds
Hit_Sound = False
End If
End If
End Sub
Private Sub Turn(direction As Integer) 'Turn camera left,right,up or
down.
If direction = TURNLEFT Then
STATE_camera_rotate_z lngKamera,
WORLD_SPACE
ElseIf direction = TURNRIGHT Then
STATE_camera_rotate_z lngKamera,
WORLD_SPACE
ElseIf direction = TURNUP Then
STATE_camera_rotate_y lngKamera,
CAMERA_SPACE
ElseIf direction = TURNDOWN Then
STATE_camera_rotate_y lngKamera,
CAMERA_SPACE
End If
End Sub
TURNSPEED * dblComFactor,
-TURNSPEED * dblComFactor,
TURNSPEED * dblComFactor,
-TURNSPEED * dblComFactor,
Private Sub Form_Load()
flaMainHeader.Movie = "C:\Program Files\3D Network
Analysis\Flamov\MainHeaderUtama.swf"
flaKompas.Movie = "C:\Program Files\3D Network
Analysis\Flamov\Kompas.swf"
End Sub
Private Sub Form_Unload(Cancel As Integer) 'Unload application from
memory.
STATE_3D_card_use NO
STATE_engine_close
frmUtama.lblNavi.Enabled = False
frmUtama.lblShortestPath.Enabled = False
frmUtama.flaMainHeader.Playing = True
End Sub
Private Sub InvertVector(Vec() As Double) 'reverse direction of
input vector.
Vec(0) = -Vec(0)
Vec(1) = -Vec(1)
Vec(2) = -Vec(2)
End Sub
Public Sub ExitOnError(strReason As String)
'Display an error message and exit program
MsgBox strReason, vbExclamation, "Error"
Unload Me
End Sub
Private Sub CLIMBING()
Dim lngReturn As Long
Dim dblTitik_A(0 To 2) As Double
Dim dblTitik_B(0 To 2) As Double
Dim lngPolygon_Hit As Long
Dim lngObject_Hit As Long
Dim dblIntersection(0 To 2) As Double
Dim dblArah_Kamera(0 To 2) As Double
STATE_camera_get_location1 lngKamera, dblTitik_A(0)
STATE_camera_get_direction1 lngKamera, dblArah_Kamera(0)
Dim dblLokasi_Baru(0 To 2) As Double
Const VECLENGTH = 8 'collision detect untuk nak climbing
dblLokasi_Baru(0) = dblTitik_A(0) + dblArah_Kamera(0) * VECLENGTH
dblLokasi_Baru(1) = dblTitik_A(1) + dblArah_Kamera(1) * VECLENGTH
dblLokasi_Baru(2) = dblTitik_A(2) + dblArah_Kamera(2) * VECLENGTH
'calculate the height of the ground in the new_location
Dim dblLokasi_Baru_Bawah(2) As Double
Dim dblLokasi_Baru_Atas(2) As Double
copy_vec dblLokasi_Baru_Bawah, dblLokasi_Baru
dblLokasi_Baru_Bawah(2) = dblTitik_A(2) - (2 * Model_Scaling) 'a
very low point
copy_vec dblLokasi_Baru_Atas, dblLokasi_Baru
dblLokasi_Baru_Atas(2) = dblTitik_A(2) + (1 * Model_Scaling)
very high
'a
lngReturn =
STATE_engine_is_movement_possible(dblLokasi_Baru_Atas(0),
dblLokasi_Baru_Bawah(0), lngPolygon_Hit, dblIntersection(0),
lngObject_Hit)
' We dont want if langgar dinding pun dia panjat jugak
If dblIntersection(2) > dblTitik_A(2) Then
Exit Sub
End If
Dim try As Double
If dblIntersection(2) < dblTitik_A(2) Then
try = dblTitik_A(2) - dblIntersection(2)
If try > TINGGI_HUMAN * 2 Then
Exit Sub
End If
End If
Dim dblBeza_Ketinggian As Double
dblBeza_Ketinggian = dblTitik_A(2) - dblIntersection(2)
' Lau ada intersection yang menyebabkan ketinggian xsama dengan
ketinggian manusia so
' dia akan di set kan lokasi z yg baru
If dblBeza_Ketinggian <> TINGGI_HUMAN Then
STATE_camera_set_location lngKamera, dblTitik_A(0),
dblTitik_A(1), dblIntersection(2) + TINGGI_HUMAN
End If
End Sub
Private Sub copy_vec(dst() As Double, src() As Double)
dst(0) = src(0)
dst(1) = src(1)
dst(2) = src(2)
End Sub
Private Sub DrawShortestPath()
Dim PointA(0 To 2) As Double
Dim PointB(0 To 2) As Double
Dim PointBaru(0 To 2) As Double
Dim BezaX As Double
Dim BezaY As Double
Dim BezaZ As Double
Dim TokokanX As Double
Dim TokokanY As Double
Dim TokokanZ As Double
Const DividingFactor = 4
'Nilai untuk berapa banyak arrow yang
ditunjukkan
Dim KiraanIndexPointGuna As Integer
KiraanIndexPointGuna = 1
For KiraanIndexPointGuna = 1 To (Counter - 1)
PointA(0) = CoordX(NodeUsed(KiraanIndexPointGuna))
PointA(1) = CoordY(NodeUsed(KiraanIndexPointGuna))
PointA(2) = CoordZ(NodeUsed(KiraanIndexPointGuna))
If KiraanIndexPointGuna = Counter - 1 Then
BolehJalan =
STATE_engine_is_movement_possible(PointAtas(0), PointBawah(0),
PolygonHit, Intersection(0), ObjectHit)
Intersection(2) = Intersection(2) - 2.5
DrawPath = STATE_polygon_add_patch_easy(PolygonHit,
Intersection(0), 5, direction(0), DestOK, Color(0))
Exit Sub ' Sampai Destinasi
End If
PointB(0) = CoordX(NodeUsed(KiraanIndexPointGuna + 1))
PointB(1) = CoordY(NodeUsed(KiraanIndexPointGuna + 1))
PointB(2) = CoordZ(NodeUsed(KiraanIndexPointGuna + 1))
BezaX = PointB(0) - PointA(0)
BezaY = PointB(1) - PointA(1)
BezaZ = PointB(2) - PointA(2)
TokokanX = BezaX / DividingFactor
TokokanY = BezaY / DividingFactor
TokokanZ = BezaZ / DividingFactor
direction(0) = PointB(0) - PointA(0)
direction(1) = PointB(1) - PointA(1)
direction(2) = PointB(2) - PointA(2)
PointAtas(0) = PointA(0)
PointAtas(1) = PointA(1)
PointAtas(2) = PointA(2) + 5
PointBawah(0) = PointA(0)
PointBawah(1) = PointA(1)
PointBawah(2) = PointA(2) - 5
GoTo END_LOMPAT
LOMPAT:
PointAtas(0) = PointBaru(0)
PointAtas(1) = PointBaru(1)
PointAtas(2) = PointBaru(2) + 5
PointBawah(0) = PointBaru(0)
PointBawah(1) = PointBaru(1)
PointBawah(2) = PointBaru(2) - 5
END_LOMPAT:
BolehJalan = STATE_engine_is_movement_possible(PointAtas(0),
PointBawah(0), PolygonHit, Intersection(0), ObjectHit)
If BolehJalan = NO Then
If PolygonHit = 0 Then GoTo TambahKiraanIndexPointGuna
Intersection(2) = Intersection(2) - 2.5
DrawPath = STATE_polygon_add_patch_easy(PolygonHit,
Intersection(0), 1.5, direction(0), BitmapArrow, Color(0))
PointBaru(0) = PointAtas(0) + TokokanX
PointBaru(1) = PointAtas(1) + TokokanY
PointBaru(2) = PointAtas(2) - 5 + TokokanZ
If Val(Format(PointBaru(0), "0000000.000")) =
Val(Format(PointB(0), "0000000.000")) Then
If Val(Format(PointBaru(1), "0000000.000")) =
Val(Format(PointB(1), "0000000.000")) Then
If Val(Format(PointBaru(2), "0000000.000")) =
Val(Format(PointB(2), "0000000.000")) Then
GoTo TambahKiraanIndexPointGuna 'Tamat untuk
satu equation garis lurus
End If
End If
End If
GoTo LOMPAT
End If
TambahKiraanIndexPointGuna:
Next KiraanIndexPointGuna
End Sub
Public Sub SetJidar()
lblFromX = Val(Format((CoordX(NodeUsed(1)) / Model_Scaling),
"0000000.000"))
lblFromY = Val(Format((CoordY(NodeUsed(1)) / Model_Scaling),
"0000000.000"))
lblFromZ = Val(Format((CoordZ(NodeUsed(1)) / Model_Scaling),
"0000000.000"))
lblFromName = BName(NodeUsed(1))
lblFromNumber = RNumber(NodeUsed(1))
lblFromFloor = Aras(NodeUsed(1))
lblFromBlock = Blok(NodeUsed(1))
lblDestiX = Val(Format((CoordX(NodeUsed(Counter - 1)) /
Model_Scaling), "0000000.000"))
lblDestiY = Val(Format((CoordY(NodeUsed(Counter - 1)) /
Model_Scaling), "0000000.000"))
lblDestiZ = Val(Format((CoordZ(NodeUsed(Counter - 1)) /
Model_Scaling), "0000000.000"))
lblDestiName = BName(NodeUsed(Counter - 1))
lblDestiNumber = RNumber(NodeUsed(Counter - 1))
lblDestiFloor = Aras(NodeUsed(Counter - 1))
lblDestiBlock = Blok(NodeUsed(Counter - 1))
End Sub
Public Sub GetCurrentCoord()
Dim dblTitik_A(0 To 2) As Double
STATE_camera_get_location1 lngKamera, dblTitik_A(0)
lblCurrentX = Val(Format((dblTitik_A(0) / Model_Scaling),
"0000000.000"))
lblCurrentY = Val(Format((dblTitik_A(1) / Model_Scaling),
"0000000.000"))
lblCurrentZ = Val(Format(((dblTitik_A(2) - TINGGI_HUMAN) /
Model_Scaling), "0000000.000"))
lblTime = time
lblDate = Date
End Sub
Public Sub SetPetaLayers()
Dim dblLokasiKamera(2) As Double
Dim dblSetKamera(2) As Double
STATE_camera_get_location1 lngKamera, dblLokasiKamera(0)
dblSetKamera(0) = (dblLokasiKamera(0) / 42.4103) / 2 '- 0.2588
dblSetKamera(1) = 7 - (dblLokasiKamera(1) / 42.4103) / 2 '+
20.8273
dblSetKamera(1) = dblSetKamera(1) + 7
If dblSetKamera(0) < 0 Then
dblSetKamera(0) = 0
ElseIf dblSetKamera(0) > 96 Then
dblSetKamera(0) = 96
End If
If dblSetKamera(1) < 0 Then
dblSetKamera(1) = 0
ElseIf dblSetKamera(1) > 98 Then
dblSetKamera(1) = 98
End If
lngDot = STATE_engine_add_layer(dblSetKamera(0),
dblSetKamera(1), dblSetKamera(0) + 2, dblSetKamera(1) + 2,
lngLayerDotBmp, BRIGHT_OPAQUE_GLASS)
If JustNavigation = True Then GoTo SKIPDESTDOT
dblSetKamera(0) = ((CoordX(NodeUsed(Counter - 1))) / 42.4103) /
2 '- 0.2588
dblSetKamera(1) = 7 - ((CoordY(NodeUsed(Counter - 1))) /
42.4103) / 2 '+ 20.8273
dblSetKamera(1) = dblSetKamera(1) + 7
If dblSetKamera(0) < 1.5 Then
dblSetKamera(0) = 1.5
ElseIf dblSetKamera(0) > 97 Then
dblSetKamera(0) = 97
End If
If dblSetKamera(1) < 1.5 Then
dblSetKamera(1) = 2.5
ElseIf dblSetKamera(1) > 98.5 Then
dblSetKamera(1) = 98.5
End If
lngDestDot = STATE_engine_add_layer(dblSetKamera(0) - 1.5,
dblSetKamera(1) - 1.5, dblSetKamera(0) + 1.5, dblSetKamera(1) + 1.5,
DestOK, BRIGHT_OPAQUE_GLASS)
DestDot_On = True
STATE_polygon_disable lngDestDot
SKIPDESTDOT:
lngMenuPeta = STATE_engine_add_layer(0, 0, 50, 15,
lngLayerPetaBmp, BRIGHT_OPAQUE_GLASS)
STATE_polygon_disable lngDot
STATE_polygon_disable lngMenuPeta
End Sub
Public Sub UpdateDotBmp()
Dim dblLokasiKamera(2) As Double
Dim dblSetKamera(2) As Double
STATE_camera_get_location1 lngKamera, dblLokasiKamera(0)
dblSetKamera(0) = (dblLokasiKamera(0) / 42.4103) / 2 '- 0.2588
dblSetKamera(1) = 7 - (dblLokasiKamera(1) / 42.4103) / 2 '+
20.8273
dblSetKamera(1) = dblSetKamera(1) + 7
If dblSetKamera(0) < 0 Then
dblSetKamera(0) = 0
ElseIf dblSetKamera(0) > 96 Then
dblSetKamera(0) = 96
End If
If dblSetKamera(1) < 0 Then
dblSetKamera(1) = 0
ElseIf dblSetKamera(1) > 98 Then
dblSetKamera(1) = 98
End If
STATE_polygon_set_location lngDot, dblSetKamera(0)
End Sub
Public Sub PadamForm()
Unload Me
End Sub
Download