GEOG 490/590: GIS Programming
Lab3. File I/O and ArcMap
GUI Customization
Due Nov 1 before class.
Introduction:
You will first take the
Customizing ArcGIS Desktop course on ESRI Virtual
Campus to learn how to create tool bars and tools in ArcMap/ArcCatalog.
You will do all the modules (i.e., Modules 1 and 2) in the online course. The
second part of the exercise involve using the GxDialog
ArcObjects coclass and the QuickSort subroutine to create a tool that sorts a list of
numbers in an input file and write the result to an output file.
Make sure you put your lab data
in a folder in the C:\Users folder and regularly back up your data to your H
drive or portable device. Follow the instructions of the online course to download
the required dataset. Click here to down the files
needed for the second part of the exercise. You will need to unzip the files
after download.
The Lab3.zip file contains for
files:
Notepad.gif
Openfile.gif
QSort.txt
Lab3_input.txt
Please refer to
the Lab1 instructions to access your account on ESRI training website (http://training.esri.com)
and use the Access Code listed at the end of this document to add the Customizing
ArcGIS Desktop course to your account.
Now you can start
your online course. Make sure you experiment with the programming instructions
in ArcMap while reading the online document.
Sorting Tool:
After finishing the online modules, you will design and develop a simple AP that allows a user to select an input file containing a list of random integer numbers and sort the list of numbers to an output ASCII file specified by the user. A sample layout of the UserForm of the AP is shown in Figure 1. The form should have:
l two textboxes for showing the specified file paths and names,
l two command buttons for selecting input and output files,
l two command buttons for viewing the input and output files (Figure 2),
l two radio buttons (aka, option buttons) for specifying sorting order (i.e., descending or ascending),
l one command button to execute the sorting, and
l one command button to end the AP.
Picture
Command Buttons:
The command buttons for selecting and viewing the input and output files
will use pictures on the button face. You need to prepare an image file (e.g.,
gif or jpg) and put the image file to the “Picture” property. Use
the openfile.gif file as the picture for the file
selection buttons. Use the notepad.gif file as the
picture for the file viewing command buttons (Figure_2).
You will need to set the “Caption” property of those command
buttons to “” (i.e., empty strings) to remove the captions. All
these steps can be done in VBA IDE, without writing any code.
Enabled and
Visible Properties of Controls:
It’s clear that a user cannot
view the contents of a file before the file name has being selected. Also, only
when both input and output files have being selected can the sorting tool does
the sorting. We should use the Visible and Enabled properties of command button
controls to guide the sequence of using the sorting tool. If you set the
Visible (or Enabled) properties to “FALSE” in VBA IDE, then these
controls are invisible (or disabled) when the program is executed. You can
change the values of these properties during run-time as well. This can only be
done through VB code, for example,
IF Len(Trim(txtInput.text)) > 0
THEN cmbViewInput.Visible = True
GxDialog coclass:
Please refer to Week4’s lecture
notes for sample code.
Option (Radio)
Buttons:
You will provide the options of sorting ascendingly
or descendingly in the sorting tool. This can be done
through a set of option button. When the “Value” property of an option
button is True, then the option button is checked (or, if you check an option
button, then its Value property is set to True.) Only one option button can be
checked in a group of option buttons. VB controls such a mechanism for you, so
you don’t have to worry about setting the values of other option buttons
when one is checked. If you have more than one option categories, then you
should use a “Frame” control to group the option buttons into
categories.
Shell
Function:
You can use the Shell function to run an executable program. Please use the
online help to see what the function’s return values are. You will write a
VB procedure to view the input (or output) file using the notepad.exe program.
Here is an example of how this is done:
Dim commandstr As String, ReturnCode
commandstr = “Notepad.exe ” & txtInput.text
‘note
that there is a space after .exe
ReturnCode = Shell( commandstr, vbNormalFocus)
vbNormalFocus is a constant that controls the
behavior of window style so that, in this case, notepad window becomes the
active window with a normal size.
Input, Outpur File Format and File I/O:
The input (i.e., Lab3_input.txt) and
output (whatever name you specify) are both in ASCII format. That means you can
use notepad to see their contents. The input file has a list of random integer
number, each separated by a newline character. The output should include a list
of sorted numbers and their original line numbers in the input file, delimited
by commas.
If you plan to use dynamic arrays, which
is preferred, be sure to count the number of lines in the input first. This can
be done by using the EOF() function and a simple Do
While loop. Here is an example:
LineNo = 0
Do
While Not EOF(infile)
Input
#infile, LineString
If
Len(Trim(LineString)) > 0
Then LineNo = LineNo + 1
Close
#infile
ReDim inputArr( 1 to LineNo)
ReDim LineNumberArr(1 to LineNo)
Please refer to the lecture notes on the functions to open, read, write,
and close the files.
QuickSort
Subroutine:
We will use the QuickSort algorithm that we
talked about in the lecture to do the sorting. The Qsort.txt file contains the
source code of the algorithm.
Public Sub QuickSort(keyarr() As Long, dataarr() As Long, _
Optional ByVal numEls As
Variant, Optional ByVal descending As Variant)
Keyarr() stores the numbers
you want to sort. Dataarr() stores the numbers that are associated with the numbers
in Keyarr. In this exercise, you will put the
original line numbers in it, so when sorted, you still know the original line
numbers of each input integer number. numEls
indicates how many elements in the input arrays are sorted. In this exercise,
we don’t provide any value for this argument so the subroutine sorts
every element in the input arrays. Descending determines the sorting order. The
default value is False, that is, the output numbers are sorted ascendingly. If you want to do descending sorting, then
provide a True value to this argument. Here is an example of calling this
subroutine:
QuickSort InputArr, LineNumberArr, , optDescend.Value
Lab Deliverables:
Submit the documents listed below in a zipped file.
1.
The
pseudo-code of the sorting AP.
2.
Your mxd file that contains the following features:
1)
A UserForm of the Sorting Tool (see the instructions above
for the spec of the tool).
2)
An ArcMap ToolBar called
“Sorting Tools” containing a button that when clicked brings up the
Sorting Tool UserForm.
3)
Make sure
your code is properly commented.
3.
The output
of your sorting tool. Please use the Lab3_input.txt as the input file. The
output file should include the sorted integer numbers and their associated line
numbers in the input file.
Customizing ArcGIS Desktop Access Codes:
|
Student |
Access Code |
|
Alejandro |
VCGKRWPQLQLLCX |
|
Amarina |
VCWTEPXDVLVHNU |
|
|
VCWKHYRNGHTDVJ |
|
Charles |
VCLCKLHCELHUKX |
|
Chris |
VCLUHFJARRGHUY |
|
Craig |
VCFLMQEXEVQALG |
|
Heath |
VCECDCGNVDPYLB |
|
Jessica |
VCAQABNNRPPXET |
|
Loren |
VCTWBUYLJTBJWD |
|
Luis |
VCEVULTQGCPUFY |
|
Rob Menke |
VCBEEYTPYDDEEU |
|
Robert Chappell |
VCYAJUMETADUBN |
|
Ron |
VCCAQGJHGWCWAF |
|
Thomas |
VCPJWRNJYMDXNM |
|
|
VCEFYNALAVRGBP |