GEOVISI™ GIS TEXTBOOKS SERIES :
BUKU SERI PEMROGRAMAN SISTEM INFORMASI GEOGRAFIS
DENGAN MAPINFO MAPBASIC
PENULIS : IBNU ROSYADI, S.Si PT GEOVISI MITRATAMA
1. Dasar-Dasar Pemrograman MapBasic
1.1 Elemen-Elemen Dasar Pemrograman MapBasic
Elemen dasar pemrograman MapBasic mendeskripsikan beberapa aspek dasar dari sintak pemrograman MapBasic.
1.1.1 Baris Komentar Program
Baris komentar merupakan baris kode yang dimaksudkan sebagai deskripsi dari program yang akan diabaikan oleh compiler MapBasic. Seperti pada program Basic pada umumnya, pada MapBasic komentar diawali dengan karakter aphostrophe (').
Contoh penulisan komentar:
' Program menampilkan pesan
Note "Selamat Datang"
Silahkan compile dan jalankan program dengan cara klik menu Project kemudian pilih Compile, setelah berhasil silahkan klik menu Run maka akan menghasilkan tampilan seperti berikut ini:
Perhatikan bahwa kode beris kode “' Program menampilkan pesan“ tidak berefek pada program.
1.1.2 Variabel
Variabel merupakan tempat menyimpan nilai yang dapat berubah selama siklus hidupnya. Sebelum digunakan, variabel harus dideklarasikan terlebih dahulu. Statemen Dim (untuk variabel lokal) atau
Global (untuk variabel global) digunakan untuk mendeklarasikan dan mendefinisikan variabel. Deklarasi
variabel mencakup nama dan tipe variabel. Gunakan operator sama dengan (=) untuk memasukkan nilai ke dalam variabel. Contoh pendeklarasian dan pengisian nilai pada variabel.
Dim nama As String
nama = "Ibnu"
Satu statemen pendeklarasian dan pendefinisian variabel (Dim atau Global) dapat digunakan untuk mendeklarasikan beberapa variabel dengan dipisahkan tanda koma. Contoh berikut merupakan pendeklarasian dua variabel dengan tipe yang sama.
Dim nama, alamat As String
nama = "Ibnu"
alamat = "Yogyakarta"
Contoh berikut merupakan pendeklarasian empat variabel dengan tipe yang berbeda.
Dim nama, alamat As String, tinggi, berat As Float
nama = "Ibnu"
alamat = "Yogyakarta"
tinggi = 170.5
berat = 60
Note "Nama : " + nama + Chr$(10) + "Alamat : " + alamat + Chr$(10) +
"Tinggi : " + tinggi + Chr$(10) + "Berat : " + berat
Penamaan Variabel
Terdapat beberapa ketentuan untuk pemberian nama varibel sebagai berikut: - harus dimulai dengan karakter huruf (alfabetik), garis bawah atau tilde (~) - tidak boleh mengandung spasi
- maksimum 31 karakter
- dapat diakhiri dengan tanda persen (%), ampersand (&), tanda seru (!), atau karakter @, dimana penulisan ini tidak memiliki fungsi khusus walaupun dalam bahasa Basic dapat mengindikasikan tipe variabel tertentu
- tidak boleh sama dengan salah satu key word yang dimiliki oleh MapBasic (misal: Call, Close, Goto, dan lain sebagainya)
- bersifat case-insensitive sehingga penulisan nama variabel dengan huruf besar dan kecil dianggap sama.
Tipe Variabel
Tipe variabel yang didukung oleh MapBasic adalah
Tipe Keterangan
SmallInt Data 2 byte bilangan bulat dengan
interval nilai antara -32.767 sampai 32.767
Integer Data 4 byte bilangan bulat dengan
interval nilai antara -2.147.483.647 sampai 2.147.483.647
Float Data 8 byte format IEEE bilangan real
String Data karakter dengan panjang maksimal hingga 32.767
String * n Data karakter dengan panjang n karakter (hingga 32.767 karakter)
Logical Data 1 byte, TRUE (nilai ≠ 0) atau FALSE (nilai = 0)
Date Data 4 byte: 2 byte untuk menyimpan data tahun, 1 byte untuk bulan, dan 1 byte untuk hari (tanggal)
Object Tipe data yang digunakan untuk menyimpan variabel
objek-objek yang bersifat grafis (point, region, line, polyline, arc, rectangle, rounded rectangle, ellipse, text, atau frame)
Tipe Variabel Buatan Sendiri
Untuk mendefinisikan variabel buatan sendiri digunakan statemen “Type…End Type”. Berikut contoh kode pembuatan dan penggunaan tipe variabel buatan sendiri.
Type DataPribadi nama As String * 30 alamat As String * 100 tinggi As Float berat As Float End Type
siswa.nama = "Ibnu" siswa.alamat = "Yogyakarta" siswa.tinggi = 170.5 siswa.berat = 60 Note siswa.nama Variabel Array
MapBasic mendukung variabel array satu dimensi dengan aturan penulisan sebagai berikut:
Dim NamaVariabel (JumlahAnggota) As TipeVariabel
Statemen “UBound” digunakan untuk mengetahui ukuran aktual variabel array, sedangkan “ReDim” digunakan untuk mengubah ukuran atau jumlah anggota variabel array yang bersangkutan.
Contoh kode program pendeklarasian, pengisian nilai dan pengambilan nilai dari variabel array.
Dim nama(4) As String nama(1) = "Ani"
nama(2) = "Ana" nama(3) = "Ina"
nama(4) = "Oni"
Jangkauan (Scope) Variabel
Variabel yang dideklarasikan dengan menggunakan statemen “Dim” merupakan varibel lokal yang hanya berlaku (siklus hidupnya) di dalam fungsi atau prosedur dimana variable tersebut dideklarasikan. Sedangkan variabel yang dideklarasikan dengan menggunakan statemen “Global” berlaku umum di dalam sebuah program MapBasic. Variabel ini dideklarasikan di luar fungsi atau prosedur, dan didefinisikan sebelum fungsi atau prosedur.
Apabila terdapat kasus dua nama variabel yang sama dimana sebuah variabel global dan yang satu lagi variabel lokal di dalam prosedur, maka prioritas akan diberikan pada variabel lokal selama siklus hidupnya, kemudian setelah siklus variabel lokal berlalu prioritas diberikan kepada variabel global.
Declare Sub Main
Declare Sub initialize_globals
Global strVar As String
Sub Main
Dim strVar As String strVar = "Lokal"
Call initialize_globals
Note "Prosedur Main : " + strVar
Sub initialize_globals
strVar = "Global"
Note "Prosedur initialize_globals : " + strVar
End Sub
1.1.3 Konstanta
Konstanta merupakan nilai tertentu (data value) yang tidak akan berubah selama program yang bersangkutan dieksekusi (siklus hidup). Konstanta didefinisikan dengan key word “Define”. Contoh kode yang mengandung konstanta:
Define Pi 3.14
Define Programmer "Ibnu"
1.1.4 Operator
Operator merupakan simbol yang menginformasikan kepada compiler MapBasic untuk menjalankan manipulasi matematis atau logika tertentu. MapBasic mendukung beberapa jenis operator sebagai berikut:
Operator Numerik
Operator Deskripsi
+ Penjumlahan (untuk variabel bertipe string akan menghasilkan variabel string baru dari masukan dua variabel
- Pengurangan
* Perkalian
/ Pembagian
\ Pembagian bilangan bulat integer (tanpa sisa) Mod Sisa pembagian bilangan bulat
^ Pangkat
Operator Perbandingan
Operator Deskripsi
= Sama dengan
< Lebih kecil dari > Lebih besar dari
<= Lebih kecil atau sama dengan >= Lebih besar atau sama dengan
Between Di antara nilai minimum dan maksimum yang ditentukan sendiri Misal: X Between 0 And 10
Operator Logika
Operator Deskripsi
And Kedua operand benar – kedua kondisi terpenuhi, menghasilkan nilai logika TRUE
Or Salah satu operand benar – salah satu kondisi sudah terpenuhi, menghasilkan nilai logika TRUE
Operator Geografis
Operator Deskripsi
Contains Koordinat titik pusat (centroid) unsur spasial yang kedua berada di dalam wilayah unsur spasial yang pertama
Contains Part Sebagian wilayah unsur spasial yang kedua berada di dalam wilayah unsur spasial yang pertama
Contains Entire Keseluruhan wilayah unsur spasial yang kedua berada di dalam wilayah unsur spasial yang pertama
Within Koordinat titik pusat (centroid) unsur spasial yang pertama berada di dalam wilayah unsur spasial yang kedua
Partly Within Sebagian wilayah unsur spasial yang pertama berada di dalam wilayah unsur spasial yang kedua
Entirely Within Keseluruhan wilayah unsur spasial yang pertama berada di dalam wilayah unsur spasial yang kedua
Intersects (wilayah, batas, atau garis) unsur spasial yang pertama dan yang kedua berpotongan di beberapa titik
Prioritas Operator
MapBasic menentukan prioritas evaluasi dengan urutan seperti berikut: 1. tanda kurung [()]
2. pangkat [^] 3. negasi [–]
4. perkalian [*], pembagian [/ dan \], mod
5. penjumlahan [+], pengurangan [-], penggabungan string [+ dan &] 6. operator geografis, operator perbandingan, dan Like
7. operator Not 8. operator And 9. operator Or
1.2 Struktur Pemrograman 1.2.1 Percabangan
Compiler MapBasic mendukung bebarapa konsep dan implemantasi struktur pemrograman sebagai berikut:
IF – THEN – END IF
If (kondisi) Then
Blok Proses
End If
IF – THEN – ELSE – END IF
Digunakan untuk percabangan yang melibatkan satu kondisi dengan dua alternatif (blok) tindakan.
If (kondisi) Then
Blok Proses_1
Else
Blok Proses_2
End If
IF – THEN – ELSEIF – ELSE – END IF
Digunakan untuk percabangan yang melibatkan beberapa kondisi dan beberapa alternatif (blok) tindakan.
If (kondisi_1) Then
Blok Proses_1
ElseIf (kondisi_2) Then
ElseIf (kondisi_n) Then Blok Proses_n Else Blok Proses_n+1 End If DO – CASE
Digunakan untuk percabangan yang melibatkan beberapa kondisi dan beberapa alternatif (blok) tindakan, sebagai alternatif dari IF – THEN – ELSEIF – ELSE – END IF
Do Case VariabelString (atau bilangan bulat)
Case KumpulanNilai_1 Blok Proses_1 Case KumpulanNilai_2 Blok Proses_2 Case KumpulanNilai_n Blok Proses_n Case Else Blok Proses_n+1 End Case
Compiler MapBasic mendukung konsep dan implementasi struktur pengulangan sebagai berikut:
FOR - NEXT
Melakukan pengulangan blok proses dari nilai awal ke nilai akhir
For IndeksLoop = NilaiAwal To NilaiAkhir Blok Proses
Next
Skema For-Next di atas akan menambah nilai IndeksLoop naik satu tingkat. Apabila menghendaki tingkatan yang tidak sama dengan satu (dapat bernilai negatif atau positif) maka dapat ditambahkan
STEP, sehingga skemanya menjadi sebagai berikut:
For IndeksLoop = NilaiAwal To NilaiAkhir Step NilaiStep Blok Proses
Next
Apabila menghendaki keluar dari pengulangan sebelum IndeksLoop NilaiAkhir dapat digunakan statemen EXIT FOR, sehingga skemannya dapat menjadi seperti berikut:
For IndeksLoop = NilaiAwal To NilaiAkhir Step NilaiStep Blok Proses1
If (Kondisi) Then Exit For
End If
Blok Proses2 Next
DO – LOOP UNTIL dan DO UNTIL – LOOP
Digunakan untuk proses pengulangan hingga tercapai suatu kondisi tertentu (pengulangan terakhir dilakukan pada saat kondisi terpenuhi)
Do
Blok Proses Loop Until (Kondisi)
Pada skema DO – LOOP UNTIL di atas program minimal melakukan satu kali eksekusi Blok Proses.
Do Until (Kondisi) Blok Proses Loop
Digunakan untuk proses pengulangan selama kondisi tertentu dipenuhi (pengulangan dilakukan selama kondisi terpenuhi). Skema yang berlaku adalah sebagai berikut:
Do
Blok Proses Loop While (Kondisi)
Pada skema DO – LOOP While di atas program minimal melakukan satu kali eksekusi Blok Proses.
Do While (Kondisi) Blok Proses Loop
WHILE – WEND
Merupakan variasi dari “Do While – Loop “ dengan skema sebagai berikut:
While (Kondisi) Blok Proses Wend
Untuk proses pengulangan (tak terhingga) di mana di dalam blok yang bersangkutan terdapat pengujian suatu kondisi untuk keluar. Skema yang berlaku adalah sebagai berikut:
Do Blok Proses1 If (Kondisi) Then Exit Do End If Blok Proses2 Loop
2. Prosedur, Fungsi serta Feature Dasar Pemrograman Aplikasi Pada
MapBasic
Implemantasi prosedur dan fungsi bertujuan untuk memodularisasikan program yang bersangkutan melalui pemisahan tugas-tugas menjadi unit tersendiri yang lebih kecil sehingga dapat dikendalikan dan dikelola dengan mudah, dapat digunakan untuk membangun program aplikasi yang baru, dan dapat menghindari duplikasi potongan program. Dengan penggunaan prosedur dan fungsi pengembangan program aplikasi MapBasic dapat terpenuhi secara efisien dalam waktu yang relatif singkat.
2.1 Prosedur
Prosedur merupakan sekumpulan baris-baris kode (instruksi) yang kemudian diberi nama sendiri (terkadang memiliki parameter dengan tipe data tertentu) dan akan menghasilkan status (state) yang terdefinisi (tidak bersifat mengembalikan nilai).
Skema prosedur dalam MapBasic adalah:
Declare Sub NamaProsedur ([Kumpulan Parameter]) ' deklarasi prosedur . . .
Sub NamaProsedur ([Kumpulan Parameter]) ' awal prosedur Blok baris kode berisi prosedur
Contoh pembuatan dan pengunaan prosedur:
Declare Sub TulisPesan (kalimat As String)
Sub TulisPesan(kalimat As String) Note kalimat
End Sub
Dim pesan As String Pesan = "Selamat Datang"
Call TulisPesan(pesan) ' pemanggilan prosedur
Prosedur Main (Sub Main) adalah prosedur MapBasic yang bersifat khusus dan akan dieksekusi pertama kali ketika program aplikasi yang bersangkutan dieksekusi. Kemudian, prosedur ini dapat mengambil alih kontrol program dengan memanggil prosedur, fungsi, atau baris-baris kode elementer lainnya.
Contoh penggunaan prosedur Main:
Declare Sub Main
Declare Sub TulisPesan (kalimat As String)
Sub TulisPesan(kalimat As String) Note kalimat
End Sub
Sub Main ' prosedur Main
Dim pesan As String Pesan = "Selamat Datang"
Call TulisPesan(pesan) ' pemanggilan prosedur End Sub
Untuk keluar dari prosedur aktif tanpa harus menyelesaikan seluruh program dalam prosedur tersebut, dapat digunakan key word “Exit Sub”. Berikut contoh penggunaannya:
Declare Sub Main
Declare Sub TulisPesan (kalimat As String)
Sub TulisPesan(kalimat As String) if (len(kalimat)=1) Then
Note "Anda belum menuliskan kalimat" Exit Sub
End If
Note kalimat End Sub
Sub Main ' prosedur Main
Dim pesan As String Pesan = "S"
Call TulisPesan(pesan) ' pemanggilan prosedur End Sub
2.2 Fungsi
Fungsi merupakan sekumpulan baris-baris kode (instruksi) yang kemudian diberi nama sendiri (terkadang memiliki parameter dengan tipe data tertentu) dan akan menghasilkan suatu nilai dengan domain yang telah didefinisikan di dalam spesifikasinya (bersifat mengembalikan nilai). Pada dasarnya, compiler MapBasic mendukung beberapa jenis fungsi sebagai berikut:
- fungsi-fungsi standard (umum) yang telah dimiliki oleh bahasa pemrograman Basic - fungsi-fungsi khusus yang hanya dimiliki oleh MapInfo maupun MapBasic sendiri
Skema penulisan custom function adalah sebagai berikut:
Declare Function NamaFungsi ([KumpulanParameter]) As TipeDataOutput
...
Function NamaFungsi ([KumpulanParameter]) As TipeDataOutput Blok baris kode fungsi
NamaFungsi = nilai End Function
Nilai pengembalian disimpan dalam variabel yang digunakan pada fungsi dengan nama yang sama dengan nama fungsi. Untuk memperjelas pembuatan dan penggunaan fungsi berikut diberikan contoh fungsi.
Declare Function Tambah (a As Integer, b As Integer) As Integer
Function Tambah (a As Integer, b As Integer) As Integer Dim c As Integer
c = a + b Tambah = c End Function
Dim bil1, bil2 As Integer bil1 = 2
bil2 = 3
Untuk keluar dari fungsi sebelum seluruh kode dalam fungsi dieksekusi dapat menggunakan key word “Exit Function”
2.3 Passing Variabel (by reference dan by value)
Secara default passing variabel pada argumen/parameter prosedur dan fungsi dalam MapBasic adalah by reference, dimana variabel yang dijadikan parameter pada prosedur atau fungsi apabila terjadi perubahan nilai akibat proses di dalam prosedur atau fungsi tersebut maka nilai itu akan tetap berlaku di luar prosedur atau fungsi. Pada contoh berikut prosedur “CetakNilai” akan menggunakan nilai variabel “Angka” yang telah dirubah oleh prosedur “RubahNilai” bukan nilai yang didefinisikan di awal pada prosedur “Main”.
Declare Sub Main
Declare Sub RubahNilai(obj As Integer) Declare Sub CetakNilai(obj As Integer)
Sub Main
Dim Angka As Integer Angka = 10
Note "Nilai Awal " + Angka Call RubahNilai(Angka) Call CetakNilai(Angka) End Sub
Sub RubahNilai(obj As Integer) obj = obj * 10
Sub CetakNilai(obj As Integer) Note "Nilai Akhir " + obj End Sub
Apabila menghendaki passing variabel dengan menggunakan by Value, MapBasic menyediakan key-word byVal, maka variabel tidak terpengaruh oleh prosedur atau fungsi yang menggunakan variabel tersebut. Pada contoh berikut prosedur “CetakNilai” akan menggunakan nilai variabel yang diisikan pada prosedur “Main” dan tidak terpengaruh oleh perubahan nilai variabel oleh prosedur “RubahNilai”.
Declare Sub Main
Declare Sub RubahNilai(byVal obj As Integer) Declare Sub CetakNilai(byVal obj As Integer)
Sub Main
Dim Angka As Integer Angka = 10
Note "Nilai Awal " + Angka Call RubahNilai(Angka) Call CetakNilai(Angka) End Sub
Sub RubahNilai(byVal obj As Integer) obj = obj * 10
End Sub
Sub CetakNilai(byVal obj As Integer) Note "Nilai Akhir " + obj
2.4 Pengendalian Program
END PROGRAM
Jika menghendaki penghentian sementara jalannya eksekusi suatu program aplikasi MapBasic, maka telah disediakan key-word “End Program”. Berikut diberikan contoh kode program yang menggunakan End Program
Dim langkah1, langkah2 As String
langkah1 = "Melakukan langkah pertaman" langkah2 = "Melakukan langkah kedua"
Note langkah1 End Program
Note langkah2 'baris kode yang tidak sempat dieksekusi
RUN APPLICATION, TERMINATE APPLICATION dan END MAPINFO
Apabila menghendaki melakukan eksekusi terhadap suatu program aplikasi MapBasic atau menambahkan workspace MapInfo dari program aplikasi MapBasic yang lain, maka dapat digunakan key-word “Run Application.
Dan sebaliknya apabila ingin menghentikan eksekusi terhadap suatu program aplikasi dari program aplikasi yang lain, maka dapat digunakan key-word “Terminate Application”.
Sedangkan untuk menghentikan keseluruhan aktivitas aplikasi serta menutup program aplikasi SIG MapInfo-nya secara permanen digunakan key-word “End MapInfo”.
'Program 1
Dim str As String
str = "Ini program satu" Note str
Simpan dan compile kode program di atas ke dalam alamat yang nanti dijadikan parameter dalam program yang kedua barikut:
'Program 2
Dim pesan As String
Dim FileProgram1 As String
FileProgram1 = "D:\Latihan\MapBasic\3\latihan3_4a.mbx"
pesan = "Ini program dua" Note pesan
'Run Application FileProgram1 'menjalankan program yang lain Terminate Application FileProgram1 'menghentikan program yang lain End MapInfo 'menutup program aplikasi MapInfo
2.5 Include
Key-word “Include” digunakan untuk menggabungkan data-data dalam satu program MapBasic. Dengan cara seperti ini, data (yang pada umumnya diimplementasikan sebagai suatu konstanta) yang terdapat di dalam file teks include secara otomatis akan diintegrasikan ke dalam baris-baris kode MapBasic pada saat kompilasi. Pada MapBasic, pernyataan include (pada umumnya) digunakan untuk memanfaatkan
sejumlah besar baris-baris pernyataan define. Berikut disajikan contoh penggunaan include yang diimplementasikan pada dua file berisi kode berikut:
'Contoh file def berisi konstanta Define Phi 3.14
'Program MapBasic yang menggunakan file def Include "d:\Latihan\MapBasic\5\konstanta.def" Dim r, Luas as Float
Dim nama as String r = 10
Luas = Phi * r^2 Note Luas
2.6 Mengelola Modul Dalam File Project
Untuk menghubungkan file-file modul dalam satu project pada MapBasic dapat dilakukan dengan membuat sebuah file project MapBasic. Untuk mencoba silahkan buat dua file berisi kode seperti di bawah ini, kemudian silahkan lakukan langkah Compile.
Declare Sub Main()
Declare Function Tambah (a As Integer, b As Integer) As Integer
Sub Main()
Dim nilai1, nilai2, jumlah As Integer nilai1 = 10
jumlah = Tambah(nilai1, nilai2) Note jumlah
End Sub
Declare Function Tambah (a As Integer, b As Integer) As Integer
Function Tambah (a As Integer, b As Integer) As Integer Tambah = a + b
End Function
Kemudian buatlah file project (*.mbp) dengan kode sebagai berikut:
[LINK]
Application=Gabung.mbx Module=Utama.mbo
Module=Tambah.mbo
Dengan file project ini maka prosedur Main dan fungsi Tambah dapat saling berhubungan menjadi satu kesatuan program. Untuk mencobanya silahkan klik menu Project kemudian Link Current Project, selanjutnya setelah berhasil klik Run.