117382994 Modul Final ArcGIS VBA
Transcript of 117382994 Modul Final ArcGIS VBA
PENGENALAN KEPADA PENGATURCARAAN ARC-OBJECT MENERUSI
VBA (ARCGIS-VISUAL BASIC FOR APPLICATION)
Oleh MUHAMAD FIRDAUS CHE AMAT
2
KANDUNGAN
PERKARA
M/S
1.0 KATA PENGHANTAR 4
2.0 PERSEKITARAN VISUAL BASIC 5
2.1 Membuka Persekitaran VBA 5
2.2 Memahami Persekitaran VBA 6
3.0 MEMBANGUN DAN MENYUSUN ATUR “COMMANDS” & “TOOLBAR” 7
3.1 Penentuan platform simpanan projek 7
3.2 Membina toolbar baru 8
3.3 Membina dan menyusun letak Commands 9
3.4 Membina UIControl 10
3.5 Menghapuskan (delete) toolbar 11
3.6 Menghapuskan (delete) commands 11
3.7 Mengunci blok suaipakai (Locking customization) 12
4.0 PEMBANGUNAN “DIALOG BOX” 13
4.1 Merekabentuk “UserForm” 13
4.2 Memasukkan “controls object” 14
4.3 Setting object properties 14
5.0 ASAS PENGATURCARAAN VBA 15
5.1 Membangunkan Kekotak Mesej (Message Box) 15
5.2 Membangunkan Kekotak Input (Input Box) 15
5.3 Pengaturcaraan Berdasarkan Elemen Spatial 16
5.4 Pengaturcaraan Berdasarkan Elemen Atribut 17
6.0 MENGATURCARA BERDASARKAN ANTARAMUKA PENGGUNA 19
6.1 Merekabentuk GUI 19
6.2 Mengaktifkan Control Object pada UserForm 19
6.3 Memasukkan pernyataan syarat dan membuat paparan di dalam kekotak
Mesej (Message Box)
20
6.4 Memanggil GUI menerusi UIButtonControl 21
7.0 MEMBANGUNKAN ANTARAMUKA PENGGUNA YANG MAMPU BERINTERAKSI 22
DENGAN SPATIAL DATABASE
7.1 Merekabentuk GUI 22
7.2 Mengaktifkan Object Control (Combo Box) 23
7.3 Memasukkan script pertanyaan (Query Statements)
24
3
8.0 MEMBANGUNKAN “AUTOMATED GEOPROCESSING TOOLS” 25
RUJUKAN
31
LAMPIRAN 1 32
LAMPIRAN 2
34
4
Pengenalan Kepada Pengaturcaraan ArcObjects Menerusi VBA (ArcGIS-Visual Basic For Application)
1.0 KATA PENGHANTAR
Modul ini diterbitkan untuk dijadikan sebagai rujukan asas di dalam
melakukan proses suaipakai antaramuka pengguna di dalam perisian ArcGIS
Desktop menerusi Visual Basic Editor. Bahasa dan pendekatan yang diambil
oleh penulis adalah sangat mudah supaya para pengguna lebih senang untuk
mengikut siri kursus yang dijalankan. Modul ini sangat berguna kepada
“beginner programmer” di dalam membantu untuk memahami prosedur asas
bagi melakukan proses suaipakai perisian ArcGIS menggunakan VBA. Modul
ini lebih mudah diikuti sekiranya para pengguna telah memahami dan sudah
biasa dengan persekitaran ArcMap.
Semua script yang digunakan di dalam modul ini juga disediakan di dalam
versi digital untuk memudahkan para pengguna merujuk dan melakukan
proses “try & error” bagi meningkatkan lagi pemahaman masing-masing.
5
2.0 PERSEKITARAN VISUAL BASIC
Bahagian ini mendedahkan para peserta untuk memulakan operasi suaipakai
di dalam ArcGIS –Visual Basic Editor. Peserta di beri gambaran serta
pengenalan asas untuk melakukan proses suaipakai tersebut.
2.1 Membuka Persekitaran VBA
2.1.1 Larikan (run) perisian ArcGIS
2.1.2 Klik Tools pada toolbar, kemudian klik menu Macros,
seterusnya klik Visual Basic Editor (Rujuk Rajah Di bawah)
2.1.3 Sila perhatikan persekitaran VBA ia seakan-akan VB6 (rujuk
rajah dibawah)
6
2.2 Memahami Persekitaran VBA
Pojects Code module Procedure
User Form
Toolbox
Object Properties
Object Control
7
3.0 MEMBANGUN DAN MENYUSUN ATUR “COMMANDS” & “TOOLBAR”
Bahagian ini memberi satu pendedahan awal kepada peserta untuk
melakukan proses suaipakai dari segi susun letak commands dan toolbar
sedia ada di samping membangunkan commands dan toolbar yang baru.
3.1 Penentuan platform simpanan projek
3.1.1 Buat pilihan direktori simpanan dan simpan projek dengan
nama <belajar1.mxd> kemudian klik butang Save
3.1.2 Buka Customize dialog box dengan klik toolbar Tools,
kemudian klik menu Customize… (rujuk rajah di bawah)
8
3.1.3 Tentukan platform simpanan projek pada platform
<belajar1.mxd> (rujuk rajah di bawah)
3.2 Membina toolbar baru
3.2.1 Klik tab Toolbars, klik butang New…
3.2.2 Masukkan nama toolbar <MyTools>
3.2.3 Lakukan Save in pada <belajar1.mxd>
3.2.4 Setelah berjaya disimpan, muncul satu toolbar baru yang
kosong pada map viewer seperti dibawah
3.2.5 Oleh itu satu toolbar baru berjaya dibuat
9
3.3 Membina dan menyusun letak Commands
3.3.1 Klik tab Commands, Scroll down Categories
3.3.2 Pilih [New Menu]
3.3.3 Drag & Drop Commands : New Menu kepada MyTools
3.3.4 Tukar nama menu yang dibuat dengan klik kanan pada New
Menu, Taip nama yang sesuai pada ruangan yang disediakan
dan kemudian press keybord enter (sila rujuk rajah di bawah)
10
3.4 Membina UIControl
3.4.1 Pilih Categories [UIControls]
3.4.2 Klik butang New UIControl…
3.4.3 Pilih UIButtonControl
3.4.4 Klik Butang Create
3.4.5 Seteleh Commands baru sudah muncul pada ruangan kanan,
drag & drop kepada MyTools (rujuk para 3.3.3)
3.4.6 Bagi menambah ideal, command tersebut boleh diubahsuai
dari segi simbol dengan membuat penukaran grafik.
Klik kanan pada UIControl baru > Change Button Image >
Buat pilihan grafik yang sesuai (sila rujuk rajah di bawah)
11
3.5 Menghapuskan (delete) toolbar
3.5.1 Klik tab Toolbars
3.5.2 Buat pilihan pada toolbar yang berkenaan
3.5.3 Kemudian klik butang Delete
3.6 Menghapuskan (delete) commands
3.6.1 Klik tab Commands
3.6.2 Klik kanan pada commands yang berkenaan
3.6.3 Klik delete
12
3.7 Mengunci blok suaipakai (Locking customization)
3.7.1 Klik tab Options
3.7.2 Tekan butang Lock Customization…
3.7.3 Masukkan password anda sebaiknya
3.7.4 Klik butang OK
3.7.5 Klik Butang Close
13
4.0 PEMBANGUNAN “DIALOG BOX”
Bahagian ini memberi sedikit pendedahan untuk melakukan proses
merekabentuk GUI bagi memudahkan pengguna mengendalikan sistem yang
akan dibangunkan. Ia merangkumi proses penyisipan UserForm, mengendali
control object dan membuat object properties setting.
4.1 Merekabentuk “UserForm”
4.1.1 Menyisip UserForm
Klik kanan Project > klik Insert > klik UserForm
14
4.2 Memasukkan “controls object”
4.2.1 Drag & drop control components (object control) daripada
toolbox ke dalam userForm
4.2.2 Susunkan kembali komponen tersebut mengikut kesesuaian
4.3 Setting object properties
4.3.1 Klik pada object control
4.3.2 Lakukan perubahan setting pada object properties
15
5.0 ASAS PENGATURCARAAN VBA
5.1 Membangunkan Kekotak Mesej (Message Box)
5.1.1 Bina satu UIButtonControl (rujuk para 3.4)
5.1.2 Masukkan namanya sebagai < Message box 1>
5.1.3 Klik Kanan UIButtonControl tersebut > View Source
5.1.4 Masukkan sampel script di bawah ke dalam code module :
MsgBox "Selamat Belajar VBA", vbInformation
5.1.5 Mesej terhasil
5.2 Membangunkan Kekotak Input (Input Box)
5.2.1 Bina satu UIButtonControl (rujuk para 3.4)
5.2.2 Masukkan namanya sebagai < InputBox1>
5.2.3 Klik Kanan UIButtonControl tersebut > View Source
5.2.4 Masukkan sampel script di bawah ke dalam code module :
16
5.3 Mesej terhasil
5.4 Pengaturcaraan Berdasarkan Elemen Spatial
5.4.1 Buka Customize dialog box melalui arahan klik toolbar Tools
> Customize…
5.4.2 Bangunkan satu UIToolControl dengan arahan yang berikut :-
i) Klik tab Commands
ii) Select [UIControls]
iii) Tekan Butang UIControl…
iv) Select UIToolControl
v) Tekan Butang Create
vi) Setelah muncul <UIToolControl1> dibahagian kanan drag
& drop <UIToolControl1> ke dalam toolbar MyTools
5.4.3 Masukkan set script dengan arahan yang berikut :-
i) Klik kanan pada UIToolControl yang telah di-drag pada
toolbar
ii) Klik View Source
5.4.4 Tukar Properties Cursor
i) Klik combo box procedure
ii) Select item <CursorID>
iii) Masukkan script seperti berikut :
UIToolControl1_CursorID = 3
iv) Save dan tutup VBA window
17
5.4.5 Masukkan script arahan untuk memaparkan nilai lokasi x dan y
seperti berikut :-
i) Klik combo box procedure
ii) Select item <MouseDown>
iii) Masukkan script seperti berikut :
iv) Save dan tutup VBA window
5.4.6 Tool tersebut sedia diuji dan digunakan
5.5 Pengaturcaraan Berdasarkan Elemen Atribut
5.5.1 Buka Customize dialog box melalui arahan klik toolbar Tools
> Customize…
5.5.2 Bangunkan satu UIToolControl dengan arahan yang berikut :-
i) Klik tab Commands
ii) Select [UIControls]
iii) Tekan Butang UIControl…
iv) Select UIToolControl
v) Tekan Butang Create
vi) Setelah muncul <UIToolControl2> dibahagian kanan drag
& drop <UIToolControl2> ke dalam toolbar MyTools
5.5.3 Masukkan set script dengan arahan yang berikut :-
i) Klik kanan pada UIToolControl yang telah di-drag pada
toolbar
ii) Klik View Source
18
5.5.4 Tukar Properties Cursor
i) Klik combo box procedure
ii) Select item <CursorID>
iii) Masukkan script seperti berikut :
UIToolControl1_CursorID = 3
iv) Save dan tutup VBA window
5.5.5 Masukkan script arahan untuk memaparkan sebahagian nilai
atribut yang terdapat di dalam table data yang berkenaan
i) Klik combo box procedure
ii) Select item <MouseDown>
iii) Masukkan script seperti berikut :
Rujuk LAMPIRAN 1
iv) Save dan tutup VBA window
5.5.6 Tool tersebut sedia diuji dan digunakan
19
6.0 MENGATURCARA BERDASARKAN ANTARAMUKA PENGGUNA
6.1 Merekabentuk GUI
6.1.1 Buka Visual Basic Editor dengan klik pada toolbar Tools >
Macros > Visual Basic Editor
6.1.2 Untuk merekabentuk GUI, anda boleh merujuk set arahan
pada para 4.0
6.2 Mengaktifkan Control Object pada UserForm
6.2.1 Menambah Item Pada Combo Box
i) Dwiklik pada UserForm berkenaan
ii) Setelah code module keluar klik pada combo box
procedure
iii) Pilih < Activate>
iv) Masukkan script seperti berikut :-
v) Klik Save project
20
vi) Buat pengujian script dengan klik butang Run
vii) Close Window VBA
6.3 Memasukkan pernyataan syarat dan membuat paparan di dalam kekotak
Mesej (Message Box)
6.3.1 Buka Visual Basic Editor dengan klik pada toolbar Tools >
Klik Macros > Klik Visual Basic Editor
6.3.2 Buka Userform dengan dwiklik UserForm1
6.3.3 Dwiklik butang Papar
6.3.4 Masukkan script yang berikut :-
Rujuk LAMPIRAN 2
6.3.5 Script sedia untuk diuji lari
21
6.4 Memanggil GUI menerusi UIButtonControl
6.4.1 Buka Dialog Box Customize dengan klik pada toolbar Tools
> Customize…
6.4.2 Klik kanan UIButtonControl > Klik View Source
6.4.3 Masukkan script seperti berikut :-
UserForm1.Show
22
7.0 MEMBANGUNKAN ANTARAMUKA PENGGUNA YANG MAMPU
BERINTERAKSI DENGAN SPATIAL DATABASE
Bahagian ini agak kompleks kerana terdapat gabungan pengaturcaraan yang
melibatkan data atribut dan data spatial. Untuk mewujudkan satu
permasalahan, satu senario carian telah dibuat iaitu untuk mencari lokasi lot
tanah. Langkah untuk menyelesaikan kes ini adalah seperti berikut :-
7.1 Merekabentuk GUI
7.1.1 Buka Visual Basic Editor dengan klik pada toolbar Tools >
klik Macros > klik Visual Basic Editor
7.1.2 Untuk merekabentuk GUI, anda boleh merujuk set arahan
pada para 4.0 tetapi rekabentuknya rujuk rajah dibawah
23
7.2 Mengaktifkan Object Control (Combo Box)
7.2.1 Dwiklik pada UserForm berkenaan
7.2.2 Setelah code module keluar klik pada combo box procedure
7.2.3 Pilih < Activate>
7.2.4 Masukkan script seperti berikut :-
Nota : script ini adalah untuk membaca senaraian rekod info
daerah di dalam external file untuk dijadikan item combo box.
7.2.5 Save project
7.2.6 Buat pengujian script dengan klik menu Run
24
7.3 Memasukkan script pertanyaan (Query Statements)
7.3.1 Dwi klik pada butang cari
7.3.2 Masukkan script seperti dibawah:-
7.3.3 Save dan close VBA
7.3.4 Call UserForm dengan UIButtonControl (sila rujuk para 6.4)
7.3.5 Buat pengujian script dengan klik menu UIButtonControl
yang telah di setkan
25
8.0 MEMBANGUNKAN “AUTOMATED GEOPROCESSING TOOLS”
Modul ini memberikan pendedahan kepada peserta didalam merekabentuk
dan membangunkan pemprosesan secara automasi menggunakan model
builder. Para peserta akan diberi tunjuk ajar melakukan proses suaipakai dan
membangunkan model builder bagi mengstrukturkan fungsi pemprosesan
secara automasi yang mengikut kehendak sesebuah organisasi.
Kajian Kes : Mengira nilai pampasan yang diperolehi oleh pemilik sekiranya
proses pengambilan balik hartanah dibuat
8.1 Buka persekitaran ArcToolbox pada ArcMap dengan klik pada icon yang
berikut
8.2 Klik Kanan pada ArcToolbox > klik pada New Toolbox
8.3 Ubah nama toolbox kepada <0_MyProcessing>
26
8.4 Klik kanan pada 0_MyProcessing > klik New > klik Model
8.5 Klik kanan pada model dan rename dengan nama yang sesuai <Kira
Pampasan>
27
8.6 Buka persekitaran model builder dengan klik kanan <Kira Pampasan>
kemudian klik edit
28
8.7 Buat carian fungsi yang dikehendaki dengan klik tab index pada
ArcToolbox , kemudian taipkan nama fungsi <add field > klik butang
locate
1. Klik tab Index
2. Buat Carian fungsi <add field>
3. Buat selection fungsi tersebut
4. Klik butang Locate
29
8.8 Setelah fungsi yang dikehendaki telah ditemui, sila drag & drop fungsi
berkenaan ke dalam persekitaran model builder
8.9 Drag & drop input features <Lot_clip> ke model builder
8.10 Aktifkan fungsi dengan dwi klik pada <Add Field>
8.11 Masukkan parameter yang berkenaan dan klik OK (rujuk rajah
dibawah)
30
8.12 Setkan input <Lot_Clip> sebagai parameter dengan klik kanan pada
objek berkenaan dan klik Model Parameter
Nota : Sekiranya berjaya abjab “P” akan muncul di sebelah Input
objek tersebut
8.13 Save dan tutup persekitaran model builder
8.14 Uji model berkenaan dengan dwi klik pada icon kira pampasan
8.15 Masukkan input ke dalam kekotak yang disediakan (rujuk rajah di
bawah)
8.16 Selesai
Selamat Maju Jaya
31
RUJUKAN 1. Robert Burke, (2003). “Getting To Know ArcObjects : Programming ArcGIS with
VBA.” California, USA.
2. ESRI, (2006). “ArcGIS Desktop Help.” California, USA.
32
LAMPIRAN 1
Private Sub UIToolControl2_MouseDown(ByVal button As Long, ByVal shift As _
Long, ByVal x As Long, ByVal y As Long)
Dim pMxDoc As IMxDocument
Dim pActiveView As IActiveView
Dim pPoint As IPoint
Dim pFeature As IFeature
Set pMxDoc = Application.Document
Set pActiveView = pMxDoc.FocusMap
Set pPoint = pActiveView.ScreenDisplay.DisplayTransformation. _
ToMapPoint(x, y)
Set pFeature = FindFeature(pMxDoc.SearchTolerance, pPoint, _
pMxDoc.FocusMap)
If Not pFeature Is Nothing Then
MsgBox "Nama Daerah : " & pFeature.Value(2) & " Keluasan : " & _
pFeature.Value(5), vbInformation, "Maklumat Negeri" '& _
pFeature.Class.AliasName
Else
MsgBox "Tiada Dalam Rekod", vbCritical
End If
End Sub
Private Function FindFeature(SearchTol As Double, pPoint As IPoint, pMap As_
IMap) As IFeature
Dim pEnvelope As IEnvelope
Dim pSpatialFilter As ISpatialFilter
Dim pEnumLayer As IEnumLayer
Dim pFeatureLayer As IFeatureLayer
Dim pFeatureClass As IFeatureClass
Dim pFeatureCursor As IFeatureCursor
Dim pFeature As IFeature
Dim pUID As New UID
Dim ShapeFieldName As String
If pMap.LayerCount = 0 Then Exit Function
'Expand the points envelope to give better search results
Set pEnvelope = pPoint.Envelope
pEnvelope.Expand SearchTol, SearchTol, False
'Create a new spatial filter and use the new envelope as the geometry
Set pSpatialFilter = New SpatialFilter
Set pSpatialFilter.Geometry = pEnvelope
pSpatialFilter.SpatialRel = esriSpatialRelIntersects
'Search each selectable feature layer for a feature
'Return the first feature found
pUID = "{40A9E885-5533-11D0-98BE-00805F7CED21}" 'IFeatureLayer
Set pEnumLayer = pMap.Layers(pUID, False)
pEnumLayer.Reset
Set pFeatureLayer = pEnumLayer.Next
Do While Not pFeatureLayer Is Nothing
'Only search the selectable layers
If pFeatureLayer.Selectable Then
ShapeFieldName = pFeatureLayer.FeatureClass.ShapeFieldName
Set pSpatialFilter.OutputSpatialReference(ShapeFieldName) = _
pMap.SpatialReference
pSpatialFilter.GeometryField = _
pFeatureLayer.FeatureClass.ShapeFieldName
Set pFeatureClass = pFeatureLayer.FeatureClass
33
Set pFeatureCursor = pFeatureClass.Search(pSpatialFilter, False)
Set pFeature = pFeatureCursor.NextFeature 'Get the first feature
If Not pFeature Is Nothing Then
Set FindFeature = pFeature 'Exit if feature is valid
Exit Do
End If
End If
Set pFeatureLayer = pEnumLayer.Next
Loop
End Function
34
LAMPIRAN 2
Private Sub cmdPapar_Click()
Dim bahasa, m, i, l As String
m = cb1.Caption
i = cb2.Caption
l = "pelbagai bahasa"
'satu syarat
If cb1.Value = True Then
bahasa = m
Else
End If
If cb2.Value = True Then
bahasa = i
Else
End If
If cb3.Value = True Then
bahasa = l
Else
End If
'Lebih daripada satu syarat
If cb1.Value = True And cb2.Value = True And cb3.Value = False Then
bahasa = m + " dan " + i
Else
End If
If cb1.Value = True And cb3.Value = True And cb2.Value = False Then
bahasa = m + " dan " + l + " yang lain"
Else
End If
If cb2.Value = True And cb3.Value = True And cb1.Value = False Then
bahasa = i + " dan " + l + " yang lain"
Else
End If
If cb1.Value = True And cb2.Value = True And cb3.Value = True Then
bahasa = m + " , " + i + " dan " + l + " yang lain"
Else
End If
' syarat jantina
Dim jantina As String
If ob1.Value = True Then
jantina = ob1.Caption
Else
End If
If ob2.Value = True Then
jantina = ob2.Caption
Else
End If
MsgBox "Nama saya adalah " & UserForm1.txtNama.Text & " yang berasal _
dari " & UserForm1.cmbAsl.Text & " boleh bertutur dalam " & bahasa & _
" yang mana merupakan seorang " & jantina, vbInformation, "Lokasi _
Semasa"
End Sub