基于MapInfo的线对象编辑工具

2022-10-05

MapInfo在地理信息方面的应用, 为公众提供了一个良好的途径。它拥有强大的桌面化地理信息处理功能, 灵活的OLE (动态链接与嵌入) 和ODBC (开放式数据库连接) 远程访问特性, 做为一个平台, 给每个使用该软件的用户留下了深刻的印象。

从微观上讲, MapInfo提供了一些点线面及注记工具, 进行一些图形对象的基本编辑操作。然而, 在地质测绘行业中, 大多数电子地图数据生产的从业人员都是“半路出家”, 用惯了其他图形编辑软件, 总感觉MapInfo的图形编辑工具过于单调, 不如其他图形软件得心应手, 笔者从生产实践出发, 用MapInfo的开发工具—MapBasic扩展了一些线对象编辑工具, 得到了生产实际的肯定。

1 工具的主要功能

该工具参考MapGis等矢量图形软件的线编辑功能编写, 主要包括:生成格网线、生成多边形和星形线、造平行线、改线方向、剪断线、相交线剪断、连接线、靠近线和线端点平差, 下面介绍其主要实现过程。

2 主要实现过程

2.1 声明子过程和全局变量并添加到工具箱

本部分的代码如下:

全局变量是软件开始执行时就被定义并一直有效到卸载软件时的变量, 它可以应用于软件的各个子过程中。

Sub Main和End Sub之间的部分是向MapInfo界面中加入一个标题为“线工具”的工具箱, 该功能由Create ButtonPad完成, 其宽度由Width子句定义为1。MapBasic允许定义三种类型的按钮。

第一种:ToolButton工具按钮, 当用户单击它时, 它处于激活状态直到选择了另一个工具, 这种工具按钮被激活时, 用户单击一个MapInfo窗口将调用对应的处理程序。Icon子句指定按钮图案, 在MapBasic的安装盘中搜索名为ICONDEMO.MB的文件并在MapBasic中编译执行, 将为MapInfo添加一个Icon Sampler菜单项, 依次选取其下的子菜单打开各种工具箱, 选中合适的按钮图标后单击之, 将出现一个对话框, 任取该对话框中的两个参数之一置于Icon之后均可以指定相应的按钮图案;Cursor子句定义工具处于激活状态时的鼠标形状, DrawMode子句指定该工具在地图窗口中的绘图方式, 这两个子句的类型定义可以参考MapBasic的联机帮助;Calling子句指定与按钮对应的子过程名, 即按钮的处理程序;HelpMsg子句指定提示文本的内容, 文本内容前加“n”使鼠标在按钮上停留时显示该提示文本。

第二种, PUSHButton触发式按钮, 用户鼠标左键点击它时, 与它连接的子过程立即被执行。

第三种, ToggleButton开关式按钮, 当用户单击这类按钮时, 按钮会在按下/非按下之间来回变换, 同时程序会调用相应子过程。

PUSHButton和ToggleButton都没有Cursor和DrawMode子句。

2.2 典型子过程例说

本程序包含的子过程中, 造平行线使用PushButton按钮, 其他均使用ToolButton按钮, 两种按钮相应的子过程应用方法略有不同, 下面分别介绍。

2.2.1 ToolButton按钮的处理程序

以剪断线为例说明。

剪断线的通常操作方法是用鼠标在地图窗口中单击一条线, 该线选中的同时被在单击位置一分为二, 单击位置成为其中一个结果对象的末节点和另一个结果对象的首节点 (此点实际应与原线对象某片断的两个端点共线, 并非是鼠标单击的位置, 否则, 结果对象将各有一个片断改变走向) 。本工具使用的是ToolButton按钮, 当ToolButton按钮被按下后, Create ButtonPad命令的Cursor子句和DrawMode子句被执行, 但其对应的实际过程不执行而是处于待命状态, 只有当用户在地图窗口中单击叶, 程序才开始进入对应过程。以后每次单击窗口, 该过程就被调用一次, 直至选择其他工具。

剪断线工具的一般工作过程是:

单击屏幕→获取单击点坐标→如果发现线对象立即获取其所在的表名、行号、线图形属性→以单击点坐标为中心构造一个足够小的圆形线对象→计算该圆对象与选中线对象的交点坐标→两交点之中点即为分割原线对象的剪断点→判断该点所在的线片断→构造两个与原线具有相同图形属性的空线对象→分别读取原线对象的部分坐标并与剪断点分别构成折线→将其中之一更新至原线对象, 同时将另一条添加至原表

2.2.2 PushButton按钮的处理程序

以造格网线为例说明。

对多数投影而言, 比例尺较大的图形, 纵横坐标网均为直线, 造格网线工具主要是为生成坐标网服务的, 其通常操作方法是用鼠标点击工具图标后, 程序弹出对话框要求选择将格网插入哪个表文件, 左下和右上角坐标以及格网分划密度, 确认后即在地图窗口中绘制格网线。本工具使用的是PushButton按钮, 当PushButton按钮被按下后, 其对应的实际过程立即执行。

造平行线工具的一般工作过程是:

单击工具图标→弹出对话框→指定表名及格网参数→循环绘制并向表中插入各线

3 MapBasic代码的编译与执行

3.1 编译

简单的MapBasic程序直接用“Project/Compile CurrenFile”菜单命令编译为Mbx文件即可。由于MapBasic是以标准的文本格式来保存程序文件的, 所以也可以用其它的文本编辑软件 (例如:Windows的记事本) 来编辑MapBasic程序, 编辑完成后有两种方法形成可执行的Mbx文件, 第一种, 将文本复制后贴入MapBasic窗口, 再执行前述编译命令;第二种, 执行“File/Compile From File”菜单命令, 在出现的对话框“文件类型”中选“All Files (*.*) ”, 双击此前保存好的文本文件名。

3.2 执行

3.2.1 在MapBasic环境下直接运行

程序编译成功后, 在MapBasic窗口下执行“Project/Run”菜单命令, 如果此时MapInfo已经启动, 程序将立即在MapInfo界面内工作;如果MapInfo尚未启动, 程序将自动启动MapINfo并运行刚刚编译好的MapBasic程序。

3.2.2 在MapInfo环境下运行

执行MapInfo窗口下的“工具/运行MapBasic程序”菜单命令, 选择要运行的Mbx文件。

3.2.3 添加工具

执行MapInfo窗口下的“工具/工具管理器”菜单命令, 点选增加工具并为工具指定标题和位置, 确定后勾选“已装入”复选框并确定, MapBasic程序即可运行。如果同时勾选“自动装入”复选框, 下次启动MapInfo时本程序将自动运行。

4 结语

MapBasic对MapInfo功能的扩展应用是相当广泛的, 如果编程人员能够熟悉MapInfo具体项目的规范要求和作业过程, 从实际工作入手写工具, 一可以大幅度的提高生产效率, 二可以最大限度地减少人为错误。作为编程人员, 以下两点应予关注:第一, 要尽量保证程序的稳定性, 如果工作过程经常意外中断, 就会增加许多重复劳动和机时, 甚至会造成数据丢失;第二, 适当兼顾程序的通用性, 实现通用性、建立用户界面以及提供适时提示的代码行必须写, 不可忽视。

摘要:结合几个具体实例介绍MapBasic在扩展MapInfo线编辑工具中的应用, 同时包括MapBasic程序的编译和执行技巧。

关键词:MapInfo,线编辑,工具

参考文献

[1] 赵玲, 等.动态分段思想在MapInfo中的实现[J].测绘学报, 2005, 2.

[2] 刘光.地理信息系统二次开发教程——语言篇[M].清华大学出版社, 2004.

上一篇:WGS湿法烟气脱硫技术在催化裂化装置上的应用下一篇:网络远程继续教育存在的问题及对策探讨