济南大学学报(自然科学版)第18卷第2期2004年6月Vol.18No.2JOURNALOFJINANUNIVERSITY(Sci.Tech1)Jun.2004:1671-3559(2004)02-0174-02用mapbasic在mapinfo下开发GIS应用系统批量文件名的处理方法段琪庆1,赵军1,赵帅2(1.济南大学土木建筑学院山东济南250022;2.山东财政学院计算机系,山东济南250014)摘要:论述了用mapbasic在mapinfo下开发应用系统过程中对于批量文件数据的读取遇到的问题,并提出了解决的办法。关键词:mapinfo表;mapbasic;变量表名据项的特定类型的信息,栅格表与数据表不同,它没有记录字段和索引等表结构,他只是一种能在地图窗口中显示的图像(对元数据的分析与链接除外)1。本文探讨在mapinfo中的单纯的数据表或者是图形和数据的结合表,在mapinfo中创建一个表,将会产生以下五个文件:①文件名.tab扩展名为tab的文件,描述表的数据结构。:TP317.4文献标识码:A计算机最大的优势是对相同数据结构类型的数据利用统一程序进行处理,区别不同的数据是表名(文件名)和数据内容的不同。一般情况下,表名是预先知道的,在程序编写时可认为是常量,表中的大量记录和数据项是变化的,可以用数组变量或自定义数据结构进行读写,对批量表进行处理时,会遇到不同表名,要保持程序的通用性,其表名(文件名)的设置也应该是变化的,这是编程的基本问题,在用mapbasic编程时,这个问题就比较麻烦。本文在工程实践中,探索出三种解决办法。②文件名.map扩展名为图形对象与数据关联的文件,也可以是纯数据文件。③文件名.dat/wks/dbf/xls。④文件名.id图形对象文件的索引,作用是链接数据和图形对象。⑤文件名.ind索引文件。1.2mapinfo表的数据构成形式2mapinfo纯数据表的结构形式如表1,以管道管理系统为例。1mapinfo表的基本构成1.1mapinfo表的文件构成mapinfo是对地图进行处理、分析、查询、编辑的平台工具,也是近几年来在GIS应用与开发中应用较为广泛的系统。他首先是处理地图(或地理)对象,而后是对地理对象的属性进行处理,所以mapin2fo表的概念不同于日常所说的表,也不同于数据库中的表。表可分为数据表和栅格表,数据表又分为包含图形对象的数据表和不包含图形对象的数据表,包含图形对象的数据表是图形和数据的有机结表1纯数据表格X坐标Y坐标管材管径30高程64.7埋深1.264056.884356.4钢管这种数据表格和通常意义的数据表格(如DBASE、FOXPRO等)相同,这种表格可以用常规的作业工具(Edit、Excel等)修改,一旦修改,在地图窗口必须重新进行地理编码而使其能够地图化,当然如果本表格只是为了分析地理数据也可以用OpenFile从句打开,不必将数据进行地理化。表2比表1多了一项OBJ,这是用于连接的图形对象。X坐标Y坐标管材管径高程埋深OBJ收稿日期:2003-10-31作者简介:段琪庆(1964-),男,山东栖霞人,济南大学土木建64056.884356.4钢管3064.71.2LINETYPENATIVECharset”WindowsSimpChinese”OpenTablecatalog$+”表.tab”Browse3From表N=TableInfo(表,TAB-INFO-NROWS)FORI=1TONFetchrecIFrom表2用mapbasic在mapinfo下开发时对于从表中读数据项遇到的问题mapbasic是由mapinfo公司开发的一种十分想的语言工具,它是一种完全结构化和模块化的语言,它能够满足数据库、图形操作的要求,在很多领域内有广泛的应用。2.1用mapbasic对mapinfo开发对表中读取数据的限制用mapbasic在mapinfo下开发GIS应用系统时,对于批量表格不能用字符串变量来表示文件名,这在应用中十分不便。如:表名为“给水管线”,一般用下列语句处理:name$=“给水管线”,“给水管线”是字符串常量。OpenTablename$②充分利用不定表的变量alias3,4DimA,B,C,DASaliasC=CD$(R)+”.”+”COL”+4上例中A,B,C,D的变量是随着表中列类型的变化而变化的,CD$(R)是目录名+表名的字符串也就是说可以用此变量读取任意类型的数据,而不必担心类型的不匹配问题。③充分利用mapbasic语言规则中的别名来处理变量文件名的问题OpenTablefile-nameasnameInteractiveTable-alias=name.col1{name.col2}file-name:表名1name:表别名以上三种方法是利用mapbasic开发GIS比较实用的解决变量文件名的方法。Ifnot(TAB-INFO-TYPE,TAB-INFO-OPEN)Note”文件没有打开”elseFetchFirstFromname$O...