MapBaSiC语言及其应用
一、MapBasic概述
在上一篇中,我们已对MapInfo地理信息系统的使用作了具体介绍。虽然MapInfo系统对各种地图信息及数据提供了强大的处理功能,并且能够很好地与其他数据库进行连接,但毕竟MapInfo是面向专业人员的一个人—机交互式系统。要很好地使用它,必须具有一定的计算机水平和一定的地理信息系统知识,这对于普通用户显然过于苛刻。为了解决这个问题,MapInfo提供了一个用户系统开发工具MapBasic,人们可以用MapBasic来设计、建立符合自己工作特点和要求的纯用户化的应用系统。作为一种功能强大、易于使用的结构化程序设计语言,MapBasic提供了380多种函数和命令语句。与传统的GIS相比,良好的软件集成环境、面向对象和事件处理式的编程思想,都是MapBasic的显著特征。
1.MapBasic的集成环境与特征
MapBasic的软件集成环境主要包括文本编辑器(Editor)、程序编译器(Compiler)、程序链接器(Linker)和联机帮助(Help)四个部分。文本编辑器用于程序的编辑与修改;程序编译器用于源程序编译,以生成可执行程序:程序链接器用于将若干独立的模块链接成一个应用程序:联机帮助则为程序员在线提供MapBasic的每条语句或函数的详细说明资料。
针对各类用户的不同需求,用MapBasic可以迅速制定出用户所需的菜单、按钮或对话框等;用户不仅可以修改标准的MapInfo菜单,而且可以在原来的菜单栏上增加新的菜单项;利用MapBasic用户可以方便、准确地绘制经、纬线,避免手工绘制的烦琐以及可能引起的误差;此外,用户也可以自行设计各种新的图形符号。
MapBasic中提供了一系列SQL函数和许多非常实用的语句,大大增强了对数据库进行操作的能力。例如,仅用一条非常南单的Select语句,就可进行数据库的查询工作,实现对数据排序、求和、过滤等操作。此外,MapBasic还提供了一系列对MapInfo的表(Table)或其他类型的表格(如dBASE、FoxBASE、Lotus、ASCII或Excel的表格文件)进行操作的命令和函数,可完成对表的各种操作(如打开、新建或修改等),进行对数据对象的各种编辑操作。利用MapBasic还可以将多媒体技术引入地理信息系统,可以随时调动视频、声音、动画等媒体信息,使用户的应用系统更加形象、生动。
MapBasic提供了MapInfo系统与其他应用程序的接口功能,MapBasic的开放式体系,结构允许程序员调用外部函数中的例程。例如,MapBasic不仅可以利用
DDE(DynamicDataExchange)调用其他软件中的程序(例如C语言,VisualBasic的应用程序),还可以调用WindowsDLL(DynamicLinkLibrary)中的例程。用户可以通过运用MapBasic 编写的执行程序,来完成工作中复杂的例行工序。这样就可以将日常烦琐的例行工作交给计算机处理,不仅能够大大提高工作效率,而且还使管理人员从完全不必要的精力消耗中彻底解放出来。
2.MapBasic的安装
2.1软硬件要求
在安装MapBasic之前,必须保证计算机满足以下最低配置要求;任何80486或PentiumCPU,8MB以上内存(若使用WindowsNT则必须有16MB以上内存):6MB以上剩余硬盘空间:系统软件可以为MicrsoftWindows3.1、WindowsNT3.51或Windows95及以上版本。
2.2安装MapBasic
在安装MapBasic之前,必须首先安装好MapInfo系统,关于MapInfo的安装请参阅前面章节。下面是Windows95下安装MapBasic的步骤:
1)单击W1ndows95桌面上的[开始]按钮,然后再单击[运行]菜单,此时弹出一个命令行对话框。
2)把你的MapBasic1号盘插入A驱动器。
3)在对话框命令行中键入A:SETUP.EXE后单击“确定”按钮。
4)接着你可以根据屏幕上出现的提示来完成整个安装过程(见图9-1)。
如果在你安装之前已经装有较早的MapBasic版本,你会在硬盘上发现两个MapBasic.EXE文件。例如,你已经安装了MapBasic3.0,那么最好把MapBa3sic4.O安装在相同的目录下(如C:\MapInfo\MapBASIC.EXE),默认的MapBasic目录是在MapInfo 目录下(如C:\MAPINFO|MapBasic\MAPBAsic.ExE)。安装结束后可以将3.0版本的MAPBASIC.EXE删除以节省硬盘空间。
3.创建MapBasic的应用程序
安装好了MapBasic,就可以着手创建MapBasic的应用程序,具体步骤如下:
1)运行MapBasic开发环境。
2)选择[File]>[New]打开一个编辑窗口。
3)在编辑窗口中输入一个MapBasic程序。
例如,可以输入下面只有一行的一个MapBasic程序(见图9-2):
Note“WelcometoMapBasic”
4)选择[File]>[Save],将这个程序存储为一个磁盘文件,并为该文件输入一个文件名,例如Welcome.mb。
5)选择[project]>[CompileCurrentFile],MapBasic将编译你的程序(Welcome.mb),并自动生成一个相应的可执行文件(welcome.mbx)。
6)启动MapInfo系统。
7)选择Maplnfo主菜单中的[文件],[运行MapBasic程序],MapInfo提示你选择一个你想运行的程序。例如:若选择了Welcome.mbx,MapInfo将运行该程序。程序执行后会在一个对话框中显示一条信息“WelcometoMapBasic”。
这里已经包括了创建MapBasic应用程序的最重要的步骤:建立、编译和运行程序。当然,在实际应用中这个过程可能会更加复杂。
3.1MapBasic程序编辑
运行MapBasic,然后从[File]菜单中选择[Open]或[New]开始编辑—个MapBasic程序,前者是显示一个已经存在的程序文件,可以对它进行浏览及修改,后者是打开一个新的编辑窗口,可以在此输入一个新的程序。编辑修改结束后,选择[File]>[Save]进行保存。MapBasic 自动为程序文件追加一个文件扩展
名(.mb)。由于MapBasic是以标准的文本格式来保存程序文件的,所以如果你愿意的话,也可以用其他的文本编辑软件来编辑MapBasic程序。
在MapBasic编辑窗口中可以使用一些快捷键,以提高你编辑程序的效率。表9—1列出了一些主要的快捷键及其对应的功能。
表9—1MapBasic编辑器的常用快捷键
分类快捷键功能
光Home/End插入点移到行首/行末
标Ctrl-Home/Ctrl-End插入点移到文件为文件尾
移Ctrl-<;一/Ctrl-—>插入点向前向后移一个词
动Ctrl-T显示GoToLine对话框(插入点移到指定行)
文Ctrl-O打开一个文件
件Ctrl-N打开一个空的编辑窗口(新建一个文件)
操Ctrl-S保存当前文件
作Ctrl-P打印当前文件
Ctrl-A全部选中
编Ctrl-C将选择的内容复制到剪贴板
辑Ctrl-X将选择的内容剪切到剪贴板
操Ctrl-V粘贴
作Ctrl-Del删除光标后的一个词
Del删除选得的内容,不复制到剪贴板
寻Ctrl-F寻并替换
Ctrl-G重复最近的寻命令
替Ctrl-R替换选择的文本并继续寻换
MapBasic的文本编辑窗口所能编辑文件的大小是有限制的。如果你使用的操作系统是Windows95,那么这个限制是64KB,换言之,在一个文本窗口中你编辑的文件不能大于64KB。当你的应用程序比较大时,可能会超过64KB,那么可以用以下三种方法中的一种来解决64KB的限制问题:
·用其他的文本编辑器编辑程序文件,再用MapBasic的[File]>[CompileFromFile]编译该程序。
·把一个大的程序文件(.mb文件)分成两个或多个较小的文件,然后用MapBasic的Include语句把多个文件组合成一个应用程序。
·将一个大的程序文件(.mb文件)分成两个或多个较小的文件,然后通过一个项目文件(ProjectFile)把这些小文件连接成一个应用程序。在某种程度上它与方法二有些相似,但方法三使用起来更有效,因为它可以单独编译每个模块,这就意味着如果你只修改了其中的一个模块,那么你只要对该模块进行重新编译就可以了。
3.2MapBasic程序编译
先把你的程序调入到编辑窗口,接着从[Project]菜单中选择[CompileCurrentFile]菜单项。如果同时有多个编辑窗口打开,那么MapBasic只编译最前面那个窗口里面的程序。因此,如果有多个编辑窗口打开,在编译之前应先把合适的窗口作为活动窗口。
多文本编辑器editor什么意思MapBasic编译器会检查程序的语法。如果程序中包合语法错误,MapBaic会显示一个对话框窗口,指出发现了错误。然后在编辑窗口的下面显示错误的详细列表,每个错误信息由一个行号开始,它指出了该错误在程序中是第几行,只有更正程序中的全部错误,MapBasic才能正确编译程序。
有些类型的拼写错误,MapBasic编译器是检测不到的。例如,下面程序的第二行包含一个拼写错误(states错拼成tates):
OpenTable”states”
MapFromtates
MapBasic编译器不能识别第二行中的拼写错误,这并不是编译器的缺陷,因为一些变量和表只有到运行程序时才被计算。当用户运行前面的程序时,MapInfo试图去执行MapFromtates语句,此时,MapInfo会显示一个错误信息“Tabletatesisnotopen”,它说明表tates没有被打开。
如果你使用别的文本编辑器而不是用MapBasic来编辑你的程序,那么最好用[File]>[CompileFromFile]去编译你的程序。使用这种方法不需要把程序显示在MapBasic编辑窗口中。如果你在[File]菜单中选择了[CompileFromFile],MapBasic提示你选择一个文件去编译。
如果程序中有编译错误,MapBasic会把错误信息写到一个扩展名为.err的文本文件中。例如,我们用[Co
mpileFromFile]编译程序dispatch.mb,MapBasic则把错误信息写到文本文件中。可以选择[File]>[Open]显示这个错误文件。
3.3连接多个模抉成一个项目
项目文件(ProjectFile)是一个文本文件,它允许MapBasic把多个相互独立的程序文件连接成一个单一的应用程序。如果你正在开发一个大而复杂的应用程序,你的程序可能会包含上千条的代码,当然,你可以把这些代码都输入到一个文件中。但大多数程序员不喜欢管理十分庞大的程序文件,因为一旦程序超过干行,就很难到程序中你想的特定部分。因此,许多程序员把一个大的应用程序分成两个或多个较小的文件。这就需要建立一个项目文件。项目文件告诉MapBasic连接器如何把那些独立的模块组合成一个可执行的应用程序。
项目文件是MapBasic程序设计中的可选部分。你完全可以不使用项目文件而完成应用程序的建立、编译和运行工作。但是,如果你计划开发一个大型的应用程序,那么项目文件会给你带来一些好处:
·项目文件可以模块化你的程序。一旦你建立了一个项目文件,你就可以把程序分成多个小文件。模块化程序使你对程序的维护变得更加简单,还可以使你的程序文件变得较小,以便可以在MapBasic的编辑窗口对它们进行编辑。
·
项目文件使多个程序员同时为一个项目编写程序变得更加容易。每个程序员可以各自在独立的模块中工作,最后可以用项目文件把这些独立模块连接起来。
·项目文件可以减少重新编译应用程序的时间。如果多模块项目中的一个模块被修改,你只要重新编译该模块,然后重新连接这个项目就可以了。这比每次都要重新编译所有的源代码要快得多。
创建项目文件既然有这么多优点,那么如何来建立一个自己的项目文件?在具体介绍创建项目文件之前,让我们来看两个关于项目文件的例子。
下面是一个用项目文件(tbproj.mbp)建立文本框的例子:
[Link]
Application=textkx.mbx
Module=textbm.mbo
M0dule=Auto_lib.mbo
类似地,用项目文件(sbproj.mbp)建立的一个刻度条(ScalsBar)的例子如下:
[Link]
AppliCation=scalebar.mbx
Module=scalbar.mbo
Module=auto_lib.mbo;