您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 成都理工大学-3S-GIS-第八章――MapBasic程序设计基础
MapBasic程序设计MapBasic基础什么是MapBasic语言?Mapbasic是一种高级脚本语言,是MapInfo地理信息系统二次开发语言,它通过高级语言来描述、定制和调用Mapinfo的功能来完成用户的需要。它和Mapinfo集成于一体,在MapInfo环境中运行。Mapbasic版本1.04.05.05.56.57.07.88.0MapBasic基础MapBasic集成环境MapBasic提供一个集成开发环境,使用该集成环境,用户能完成MapBasic程序的编辑、编译、调试和运行并提供良好的在线帮助。MapBasic集成开发环境由以下几部分组成文本编译器连接器在线帮助MapBasic基础MapBasic安装文件名和后缀*.mb源程序*.mbx编译后的程序*.mbp工程文件*.mbo对象文件*.err错误文件MapBasic基础建立和运行MapBasic程序(1)运行MapBasic集成环境(2)创建新程序(3)编辑程序(4)编译(5)运行程序MapBasic基础一个最简单的MapBasic程序MapBasic集成开发环境MapBasic语法MapBasic语法一般语法规则注释:单引号,编译时单引号后的字符被忽略字母大小写:不区分跨行输入:Ifcounter=55orcounter=34thenNote“Counterisinvalid”EndIfMapBasic语法嵌入Mapbasic.defMapbasic文件是一文本文件,它定义了一些标准的Mapbasic代码,如果要使用Mapbasic定义的标准变量,需要包含Mapbasic.def文件在程序开头加入includemapbasic.def变量、数据类型和数组变量声明及赋值用Dim语句声明局部变量。每一个变量必须在使用之前声明。使用“=”给变量赋值。DimCounterAsIntergerDimx,y,langitude,latitudeAsFloatDimstart_date,end_dateAsDate,First_name,last_nameAsStringCounter=10X=12.01Start_date=“01/10/2005”变量、数据类型和数组变量命名规则•每个变量名最长不能超过31个字符•变量名中不能有空格•变量名必须以字母或者“_”开头•变量名由字母、数字、“#”、“_”组成,可以用下列字符结尾$,@,%,&,!•不能使用Mapbasic的关键字作为变量名Dim、As、call、Sub、If、End、Interger、Float…变量、数据类型和数组Mapbasic数据类型类型意义SmallInt短整型,2字节,范围从–32767~32767Integer整型,4字节,范围从–20亿到20亿Float实数(小数),8字节String可变长字符串,最长32767个字符String*n定长字符串,n表示固定的长度Logical逻辑变量,TRUE或者FALSEDate日期型,如dd/mm/yyyymm-dd-yyyy等ObjectMapInfo的图形对象,如圆或者直线等Alias数据库表列变量,用于读数据库列表的值Pen线型设置Brush填充设置Font字体设置Symbol符号(点)类型设置变量、数据类型和数组字符串变量变长字符串Dimfull_nameasstring定长字符串Dimfull_nameasstring*8,用空格补足不够的字符。Dims_var_lenAsStringDims_fixed_lenasstring*10s_var_len=“testing”s_fixed_len=“testing”Ifs_var_len=s_fixed_lenthenNote“字符串相等”ElseNote“字符串不相等”Endif变量、数据类型和数组数组变量(1)声明一维数组,变量名后加(数字)Dimstart_date(10)asdatestart_date(1)=“6/11/93”Mapbasic下标从1开始起算。(2)改变数组长度ReDim,可以用Ubound()函数返回当前数组长度DimcounterAsIntegerDimname_list(5)Asstringcounter=UBound(name_list)ReDimname_list(counter+10)变量、数据类型和数组局部变量/全局变量(1)局部变量:用Dim声明,只在定义它的过程中起作用(2)全局变量,Global声明,在程序任何过程中都起作用。DeclareSubMain‘声明函数DeclareSubInitialize_globals‘‘声明函数Globalgx,gyAsFloat‘定义两个全局变量Globalstart_dateAsDate‘定义日期型全局变量SubMain‘定义函数MainDimx,y,zAsFloatCallInitialize_globalsEndSubSubInitialize_globals‘定义子函数gx=-1Gy=-1start_date=CurDate()EndSubMapInfo运算符算术运算符加减乘除+-*/x=10*(a+b)/c整除\x=a\bx=99\10=9取余Modx=11Mode10=1乘方^x=a^bx=10^2=100比较运算符等于=ifa=bthen不相等ifabthen小于ifabthen大于ifabthen小于或者等于=ifa=bthen大于或者等于=ifa=bthen在范围之内Between…And…ifxbetweenAandBMapInfo运算符逻辑运算符(与、或、非)And两个条件同时成立ifa=bAndc=dthenOr两个条件至少1个成立ifa=bOra=cthenNot条件不成立ifnota0thenAMapInfo运算符地理运算符Contains:第1个对象包含第2个对象的中心ContainsPart:第1个对象包含第2个对象的部分ContainsEntire:第1个对象包含第2个对象的全部Within第1个对象的中心在第2个对象中PartlyWithin第1个对象的中心在第2个对象中EntirelyWithin第1个对象全部在第2个对象中Intersects两个对象相交BAContainsBBAAContainsPartBBAAContainsEntireBMapInfo流控制语句分支语句If…Then、GoTo、DoCase循环语句For…Next、Do…Loop、Do…While其他EndProgramMapInfo流控制语句If…ThenIf条件then语句else语句EndIfDimA,BAsIntegerA=100B=10IfABthenNoteA小于BElseNoteA不小于BEndIfMapInfo流控制语句If…ThenIf条件then语句else语句EndIfDimA,BAsIntegerA=100B=100IfABthenNoteA小于BElseIfABthenNoteA大于BElseNoteA等于BEndIfMapInfo流控制语句DoCase:测试一系列条件值是否与某个期望值相等。DoCase表达式case条件1语句1‘满足则执行case条件2语句2‘满足则执行…case条件n语句n‘满足则执行caseelse‘该条可选语句n+1EndCaseMapInfo流控制语句DoCaseDimCurrent_MonthAsSmallIntDiminfoAsStringCurrent_Month=Month(CurDate())DoCaseCurrent_Monthcase1,2,3info=第1季度case4,5,6info=第2季度case7,8,9info=第3季度caseelseinfo=第4季度EndCaseNoteinfoMapInfo流控制语句For…Next循环语句For变量=开始值to结束值语句Next变量必须是数字型,默认步长是1,当变量=结束值执行最后一次循环。DimTotal,CountAsIntegerTotal=0ForCount=1to10Total=Total+CountNextNoteTotalMapInfo流控制语句Do…Loop循环语句:只要测试条件为True则循环语句执行。两种表达方式(1)执行语句前检查条件DoWhile条件表达式语句Loop(2)执行语句后检查条件Do语句LoopWhile条件表达式MapInfo流控制语句Do…Loop循环语句DimTotal,CountAsIntegerTotal=0Count=1DowhileCount=10Total=Total+CountCount=Count+1LoopNoteTotal-----------------------------------------------------------DimTotal,CountAsIntegerTotal=0Count=1DoTotal=Total+CountCount=Count+1LoopwhileCount=10NoteTotalMapInfo流控制语句While…Wend循环语句GoTo跳转语句EndProgram结束程序EndMapInfo结束程序退出MapInfo过程和函数过程:包含主程序和子程序。一个典型的MapBasic程序由许多过程组成,每个过程包含一组完成特定任务的语句。主过程与子过程:每个MapBasic程序至少有一个过程(主过程),其余的过程都由主过程或者子过程来调用过程声明:显式声明/隐式声明DeclareSubMainDeclareSubPrintInfoSubMainCallPrintInfoEndSubSubPrintInfoNote子程序被调用EndSub过程和函数带参数的过程调用:DeclareSubMainDeclareSubcheck_date(first_dateAsDate)'子函数SubMaindimstart_dateAsDate'开始日期start_date=20050101callcheck_date(start_date)'检查日期EndSubSubcheck_date(first_dateAsDate)dimused_daysAsSmallIntused_days=CurDate()-first_date'使用天数Ifused_days=180thenNote已经过期+used_days+天elseNote已经使用+used_days+天EndIfEndSub过程和函数形参和值参形参作为一个变量传递值给子过程值参直接传递值给子过程,使用关键词ByVal,相当于c语言中的const语言,带ByVal声明的函数可以传递形参.DeclareSubMainDeclareSubcheck_date(ByValfirst_dateAsDate)SubMaincallcheck_date(20050801)'检查日期EndSubSubcheck_date(ByValfirst_dateAsDate)dimused_daysAsSmallIntused_days=CurDate()-first_date'使用天数Ifused_days=180thenNote已经过期+used_days+天elseNote已经使用+used_days+天EndIfEndSub过程和函数带返回值函数Function声明:DeclareFunction函数名(参数)As类型定义Function函数名(参数)…EndFunction过程和函数带返回值函数(用户自定义函数)DeclareSubMainDeclareFunctionmoney_format(ByValnumAsFloat)AsStringSubMainDimdollar_amountAsStringdollar_amount=money_format(123456789
本文标题:成都理工大学-3S-GIS-第八章――MapBasic程序设计基础
链接地址:https://www.777doc.com/doc-6332155 .html