ArcView GIS Avenue培训教程Word格式.docx
《ArcView GIS Avenue培训教程Word格式.docx》由会员分享,可在线阅读,更多相关《ArcView GIS Avenue培训教程Word格式.docx(46页珍藏版)》请在冰豆网上搜索。
编译和运行Script
点击编译(Compile)按钮,AVENUE将检查源代码的语法错误。
如果没有错误,用户就可以执行该Script。
如果Script语法有错,用户必须根据错误信息,修改并再次编译,一直到编译没有错误。
点击运行(Run)按钮,将执行经编译的Script。
以下是一个Script及运行后的结果。
Script的调试
Script编辑器提供了一些调试按钮,用于帮助用户调试Script代码。
逐步追逐调试按钮:
当Script已经正确编译,利用该按钮可以使用户逐步跟踪Script的运行。
断点按钮:
可以通过设置断点中止Script的正常运行。
如果Script在编译过程中出错,光标会停留在Script出错的地方。
这时。
可以在此行之前设置一个断点,然后编译并运行Script,并在断点处检查变量的值。
该按钮是开关按钮。
显示变量值的按钮:
可以显示全局和局部变量的值。
1.3事件(Events)与Script的运行
当用户点击一个按钮、在某个文档窗口使用一个工具或更新一个文档,都称为事件的发生。
AVENUE支持三种类型事件:
点击(Click)、应用(Apply)和更新(Update)。
点击:
当用户点击一个按钮、一个菜单子项或工具时,就发生了一个点击事件,这个事件会立即引起相应的Script的执行。
应用:
当用户在某个窗口中使用某个工具,就发生了一个应用事件。
同样,该事件也会立即引起相应的Script的执行。
更新:
当文档的状态发生变化(例如,向视图中加入主题,激活表格中的某个字段)时,就会发生一个更新事件。
不同的控制单元识别不同类型的事件。
按钮和菜单子项识别点击和更新事件。
工具识别应用、点击和更新事件。
菜单仅识别更新事件。
菜单菜单子项按钮工具更新点击点击点击更新更新应用更新
在ArcView应用程序的总体设计和建立符合用户需求的ArcView界面时,必须考虑到这些差异。
例如,如果编写的Script需要用户从视图中选择时,Script必须与某个工具的Apply事件相联。
1.4定制对话框(CustomizeDialogBox)
定制对话框提供了可视化的框架,用户可以利用它,按照自身的要求安排ArcView的菜单、按钮、和工具。
Arcview提供了两种方法打开定制对话框:
从项目的Project菜单中选择Customize项,或者两次点击按钮或工具条的空白区。
双击空白处
定制对话框有6个部分:
文档类型(DocumentType)用户可以在此选择具有所需控制单元的文档类型。
控制单元的分类(ControlCategory)在此选择用户所需的控制单元集合。
用户作出选择后,对应的控制单元集合就会显示在控制单元编辑器(ControlEditor)。
控制单元属性列表(PropertiesList)与选中的控制单元及当前的设置相关的所有属性信息显示在控制单元属性列表中。
通过属性列表可以修改和设置菜单、按钮、工具的事件响应程序及属性信息。
Reset按钮“Reset”按钮用于将当前文档类型重新设置为初始的安装设置。
初始设置存在ArcView的安装目录的ECT子目录下的default.apr文件中。
MakeDefault按钮使用“MakeDefault”按钮将当前文档设置为用户的缺省设置。
它替代用户家目录下default.apr文件。
控制单元编辑器中有一系列的按钮,它随着文档类型和控制单元的不同而不同。
然而有三个按钮保持不变,New、Separator、Delete。
New按钮是新建一个控制单元,Separator是分割不同类的控制单元,Delete是删除控制单元。
下面以View文档为例来介绍控制单元编辑器的操作。
上图是《上海市河网演变系统》的一个界面,是通过定制对话框用户化和汉化的结果。
汉化操作是对控制单元Label属性修改的结果,由于Arcview地理信息系统软件的内核支持双字节,所以只需在Label中输入汉字即可。
首先选中“File”,双击其Label属性,输入“文件”,如图所示,确定后就可得到上图所示的结果。
在《上海市河网演变系统》中没有Graphics菜单,我们可以通过两种方法达到这一结果。
一种是选中此菜单按Delete钮删除,这样同时删除其子菜单,且无法恢复,因此一般不推荐此方法;
第二种是选中此菜单修改其Invisible属性,把“False”改为“True”即隐藏此菜单,这种方法可以再次修改Invisible属性而恢复原先的情况。
New按钮可以在选中的控制单元之后创建一个新的控制单元。
选中Graphics按NewMenu,则产生一个新的菜单,在其Label属性中输入“图层”,选中“图层”按NewItem生成子菜单。
如图所示:
以上是对菜单的操作,对按钮(Buttons)和工具(Tools)的操作与之相类似。
不同的是按钮有一个Icon(图标属性),双击弹出图标管理器,从中选择或导入所需图标。
至于快捷菜单(Popups)除了本身响应右击事件外,与一般菜单的设计完全相同。
建立Script与控制单元的关联
建立Script与控制单元关联的方法是双击控制单元属性列表中的事件属性,并从出现的Script管理器中选择当某个事件发生时需要执行的Script。
一个Script可以同时与多个控制单元建立关联。
例如,诱发更新事件(如使控制单元生效或无效)的Script可以为多个控制单元所共享。
建立Script和项目的关联
在项目属性表中可建立Script与项目的启动(Startup)与关闭(Shutdown)事件的关联。
当项目文件打开时,StartUp事件执行一个Script,而关闭项目文件时,ShutDown事件执行另一个Script。
这类事件可用于项目的环境初始化,例如,数据库联结,删除临时文件或表格。
视图、表格、图表等其它一些文档打开或关闭时也执行Script。
2AVENUE是如何工作
2.1理解对象
AVENUE是面向对象的程序设计语言。
面向对象程序设计实际上是把复杂的问题分解成很多单元(称为对象),这些对象是封装的,包含了数据和数据操作的代码。
编程人员不需要去了解对象内部情况,如果要操作这些对象,只要发送相应请求。
如要制造汽车,不需要了解汽车如何生产,只要发送命令。
对象有特性(properties)、动作(Actions)和状态(States)。
如汽车,型号、颜色、车门数等特性;
有启动、停车、左转、右转等动作;
有方向(北)、速度(60mph)等状态。
一个对象可以以很多方式与其它对象联系。
一个对象可以包含其他对象,如汽车可以有音响、方向盘和座位等。
一个对象也可以利用其他对象,如汽车使用燃料运行。
对象也可以被其他对象利用,如某人驾驶汽车。
在ArcView,我们操作的每一事都是对象,打开一个视图,我们就操作视图对象;
增加一个主题到视图,我们就操作主题对象;
增加按钮到界面,我们就操作按钮对象;
利用用户界面的操作实际上就操作ArcView对象。
面向对象的编程就是操作对象。
在ArcView中,除了项目、视图和主题是对象外,还有一些我们原先可能不认为是对象,如数字和文本,Nil—空对象,布尔值。
具有相同特性的对象被组织成类。
在某一类中的所有对象被定义成有相同特性,同一类中产生的对象是类的例子(instances),如图中下面两辆车是车这一类型的例子,具有车这个类型的特性(如,有轮子、车门等)。
同样,在ArcView,View1、View2、View3都是View这一类型的例子。
类分抽象类和具体类。
抽象类没有直接的例子,它仅用于组织所有下级类共有的特性。
具体类有自己直接的例子。
类可以通过层次图(classhierarchy)进一步组织,定义类之间关系。
类关系可以以三种方式描述:
继承、集合和关联。
演示这些关系的一种方式是通过对象模式图。
对象模式图的基本组成是方框(表示类)和线(连接类显示类之间关系)。
通过分析类模式图,我们可以类及对象之间的关系。
继承表示一个类型,轿车是汽车的一个类型。
汽车是一个超类,定义了所有汽车的一些特性。
子类可以继承超类定义的特性。
通过继承,层次中的特性只需要定义一次,没有继承的特性在类本身中定义。
继承的符号是一个开放的三角形。
汽车
轿车卡车救护车
同样,ArcView中,视图是文档的一种类型,视图继承文档的特性,如包含在一个窗口,有图形用户界面等,但它也定义了自己的特性,如视图有主题和内容表。
集合表示组成关系,一辆汽车包括一个发动机,四个轮胎,一个汽车音响,座位。
当然,一辆有很多东西组成,在示意图显示所有内容是不可能的。
在ArcView关系图上,实际上只显示最重要的关系。
集合的符号是菱形。
另外,一个实心圆表示不止一个,空心圆表示可选。
关联表示类之间物理上或概念上的联系;
汽车用汽油来运行,同样,汽车需要人来驾驶。
单一线指示一个相关对象。
对象模式图显示了类之间的关系。
一旦理解了这些关系,就可以操作属于某一类的对象。
如放大音响声音,首先确定音响所在的汽车,然后确定音响进行操作。
同样,通过我们要控制视图中的一个主题,首先要确定包含这个主题的视图。
当然,关键是确认正确的对象,要求它做一些它所知道如何做的事情。
例如,我们不能要求汽车座位对象放大声音,但我们可以要求它倾斜(只要它能倾斜)。
发动机轮胎汽车音响座位
调音器磁带
2.2对象请求(Requests)
在ArcView中,对对象的操作实际上是对对象提出请求。
当我们按一个按钮或点击菜单,ArcView将发送请求给对象。
一个请求可能将产生一个新的对象,如一个新的主题;
也可能提取一个对象的信息,像当前视图名;
也可能改变一个对象的属性,如改变主题名或使它成为活动主题。
大多数请求是提取或修改已有的对象。
这些请求称为例子请求。
如显示或隐藏图例。
另一种请求称为类请求,类请求一般是产生新的目标类对象或返回影响类的事情信息。
如增加一个主题对象。
在AVENUE中,定义了很多类以及对这些类的请求,对象的请求实际上是按照它所属类的请求方式进行操作,如汽球可以定义一个类,不同的汽球有共同的特性,当我们用针刺汽球,汽球就会爆炸;
当我们松开汽球,汽球将会升上天。
这些请求及结果在类中已经定义,对具体对象的请求将产生相应的结果。
不同的类支持不同的请求,如视图可以有放大请求,但数据表不能理解这个请求。
AVENUE请求命名一般是以动词开始指示它的动作,如,GetProject、FindScript、AddDoc和Setvalue,这里Get、Find、Add和Set是动作,Project、Script、Doc和value接受动作。
下表显示了一些关键词以及它们的作用
关键词作用例子
Add增加对象aView.AddTheme
As对象类型转换aNumber.AsString
Can确认对象是否可操作aTheme.CanEdit
Find搜寻指定对象aView.FindTheme(“Roads”)
Get返回一个参考给对象aView.GetThemes
Has指示对象是否有指定的条件或状态aScript.HasError
Is返回“真”或“假”aButton.IsVisible
Make产生一个新例子View.Make
Return产生一个新对象并返回一个参考给它aFileName.ReturnDir
Set给对象赋特征aButton.SetIcon
2.3对象请求语句
Avenue语句包含两个部分:
对象和对这些对象提出请求。
其中,请求可以带参数,这些参数使请求更加明确。
Avenue语句执行的结果是产生一个新的对象。
用一个赋值符号(=)可以将产生的对象赋给一个变量。
如theName=theView.GetName
对象请求的标记方式有三种:
后缀式标记、内缀式标记和前缀式标记。
后缀式标记:
这是对象请求最常用的方法,是在对象和请求之间加一个圆点,如theView.Print,请求在对象之后。
内缀式标记:
数字对象请求的标记,请求放在数字对象之间,如25+15。
前缀式标记:
这种标记方式用于布尔对象,请求防在对象之前,如NotTrue。
2.4变量
许多程序设计语言要求在使用变量之前必须确定变量的数据类型(例如:
整数、浮点数、字符串)。
AVENUE的变量不需要事前定义,也不需要事先确定数据类型。
变量定义是通过一个赋值语句来完成,变量出现在赋值号(=)的左边。
例如:
Variable=Statement
TheNumber=45
AString=“abcdefg”
变量名必须以字母开头,其中可以包括数字。
变量名的长度没有限制。
AVENUE不区分大小写,但采用一定的大小写规范有助于程序的清晰和保持统一的风格。
AVENUE编译器会自动识别变量名与类名和请求的冲突。
以下划短线(_)开头的变量称全局变量。
一旦定义了全局变量,在应用程序处于活动状态时,任何项目的任何Script均可使用这些变量。
全局变量会占用很多内存,因此,如果在一个项目中需要用到全局变量,一定要在项目关闭后使用av.RemoveGlobalVars删除全局变量,否则全局变量仍然占有分配给它的内存空间。
2.5类和请求在线帮助
对于初学者来说类和请求在线帮助可能用处不大,但是对于Avenue编程人员来它是不可缺少的。
因为它包含了Avenue所有的类和请求,内容丰富,而且通过目录和索引可以方便的获取所需信息。
如果你想知道视图类有那些请求,那么你只要打开帮助,在索引中键入“view”按回车,就可得到所有有关视图的请求。
3Avenue的组成要素
3.1字符串
有两种方法可以产生字符串对象:
将双引号括起来的字符串赋给一个变量,如Var=“Shanghai”;
或将请求返回的字符串对象赋给一个变量,如Var=theView.GetName。
用“+”或“++”请求可以拼接字符串。
其中,用“++”时串之间包括一个空格。
如:
Var1="
Sahnghai"
Var2="
China"
Var=Var1++Var2
MsgBox.Info(Var,"
"
)
Avenue有一些特殊的字符串,NL、TAB、CR,分别表示换行符、制表符和回车符。
可以使用“=”、“<
”、“>
”、“<
=”、“>
=”、“<
>
”等比较算符进行字符串的比较,在条件语句中常用到这种比较。
用关键词As打头的转换请求可以将字符串转换为其它类,例如,可以用AsNumber这个请求将一个字符串转换为数字。
还有许多其他的字符串操作请求,可以用这些请求实现大小写转换、互换字符串等。
3.2数字
数字可以直接赋给一个变量,也可以通过请求赋值。
Avenue所支持的标准运算包括+、-、*和/、Max、Min、Cos、Sin、Ln、Sqrt、Mod、Round等。
+、-、*和/等请求采用标准的数学标记方式(中缀式标记)。
但Cos、Sin、Tan和Round等以通用标记方式表示。
TheNumber=7+12TheNumber=35.Cos
除非使用括号,否则Avenue算子的优先级是从左到右。
x=2+3*3x=15x=2+(3*3)x=11
利用以关键字As打头的请求,可以将数字转换为其他对象。
例如,三角函数需要以弧度作参数,这时就可以使用AsRadians和AsDegrees两个请求实现度数与弧度之间的变换。
利用格式化(formatting)字符串可以控制数字的格式。
例如“D.DD”使数字的格式在小数点左边至少有一位,而在小数点右边则必须有两位数字。
3.3布尔对象
布尔类有两个例子:
True和False。
可以直接将True或False赋给一个变量,如:
done=false
也可以利用请求的返回值,如:
status=aTable.HasSelections
布尔表达式要么为True要么为False,而且布尔表达式必须出现在括号中。
利用AND、OR和NOT可以构造出复合表达式。
布尔表达式可以构成分支和循环语句的条件判断部分。
3.4NIL
NIL类只有一个例子,即NIL对象。
NIL对象表示缺值。
大多数请求返回NIL表示一个错误。
在AVENUE中,通常根据一个返回值是否为NIL来判断一个对象是否存在。
theView=av.GetActiveDoc
theTheme=theView.FindTheme("
Canada.shp"
if(theTheme=Nil)then
MsgBox.Info("
Nothemes"
"
else
thethemeis"
+thetheme.getname,"
end
3.5枚举(enumerations)
枚举是一组关键词或选项,每一选项称为枚举元素(EnumerationElt)。
如要产生一个文件,我们可以指定以下文件允许的操作:
#FILE_PERM_READ
#FILE_PERM_WRITE
#FILE_PERM_MODIFY
#FILE_PERM_APPEND等
在指定枚举时,关键词前加“#”号,所有字母大写。
第一部分代表类,第二部分代表枚举,第三部分代表元素。
3.6日期、时间和时间段
Avenue的日期类支持日期、时间和时间段。
日期信息包括年、月、日,时间包括小时、分钟和秒,时间段指日期或时间的跨度。
可以用Now这个请求将当前的日期和时间赋给日期对象:
today=Date.Now
也可以将特定的时间和日期赋给一个日期类:
christmasday=Date.Make(“12/25/94”,“M/d/y”)
可以用设定日期和时间的缺省格式,还可以用指定某个特定的日期或时间格式。
时间段,两个日期对象相减就生成一个时间段类。
DaysTilChristmas=today–christmasDay
时期和时间的增量也可以通过增加时间段来获得:
payday=today+3.AsDays
curfew=time.now+6.AsHours
3.7列表
列表是不同类对象的有序集合。
列表中可以包括多种类型的对象。
字符串、主题和数字都可以成为同一个列表的成员。
生成列表的方法是将括在大括号({})中的一组元素赋给一个变量。
myList={"
red"
34,av.GetActiveDoc,av.GetProject}
foreachiinmylist
msgbox.info(i.AsString,"
List"
)
一些请求返回列表:
theListOfTheme=theView.GetThemes
theview=av.getactivedoc
thelist=theview.getthemes
thecount=thelist.count
msgbox.info(thecount.asstring,"
theTheme=theView.GetThemes.Get(0)
theThemeName=theTheme.GetName
MsgBox.Info(theThemeName,"
也可以利用Make这个请求生成列表。
Make这个请求生成一个空的列表,可以用Add和Insert这两个请求向列表中增加元素。
Add在列表尾部增加一个新元素,Insert在列表头部增加一个元素。
通过索引号使用列表元素。
第一个元素的索引号为0,最后一个元素的索引号为元素数减1。
Get这个请求根据元素索引号检索元素,Set这个请求可以设置特定索引号(索引号必须在列表元素个数的范围内)的元素的值,Find这个请求返回特定元素的索引号。
Empty请求可以把列表置为空。
3.8AV
AV是ArcView对象模式图的根,称为ArcView应用程序。
当我们启动ArcView时,将产生一个一个应用程序的例子。
3.9词典(Dictionary)
词典是键和值对的集合。
词典必须保证各键唯一。
键和值可以是任何一个类对象,也可以是不同类的对象。
下面是一个词典的例程:
theList={"
View"
Table"
Chart"
Layout"
Script"
}
d=Dictionary.Make(theList.Count-1)’创建新词典
n=0
foreachlintheList
n=n+1
d.Add(n,l)’增加词典的键和值
msgbox.info(d.Get(3),"
DictionarySample"
)’返回与键相关的值
词典的定义和列表不同,它必须指定初始大小。
这个初始值要与你想插入词典的元素个数相近。
因为当元素的量大大超过词典的大小的时候,检索就会花费大量的时间。
3.10堆栈(Stacks)