吴阿丹,李胜乐,王鹏伟
(中国地震局地震研究所,湖北武汉 430071)
Mapinfo表数据转化为点数据的原理及应用
吴阿丹,李胜乐,王鹏伟
(中国地震局地震研究所,湖北武汉 430071)
利用程序将选定的等值线或闭合面对应的空间信息转化为格式统一的点数据,并把这些点数据存放在一个 TXT文件中;使用这些点数据可以很方便地在Mapsis、Mapinfo等地理信息软件中生成不同样式的矢量图形。
Mapinfo;Mapsis;表数据;点数据;数据转换
利用Mapinfo把栅格地图矢量化,Mapinfo会把配准信息保存到一个表文件中。Map Info的表一般包含*. ID、*.Dat、*.Map、*.Tab等4个文件[1]。为了能够获取Mapinfo表数据中等值线或者闭合面的空间信息,最好的办法是用Mapinfo输出M if、M id文件。M if文件保存了该 Mapinfo表的表结构及表中所有空间对象的空间信息(如每个点对象的符号样式、点位坐标,每个线对象的线样式、节点数据、节点坐标,区域对象的填充模式、每个区域包含的子区域个数及每个区域的节点数、节点数等);而M id文件则按记录顺序保存了每个空间对象的所有属性信息。这 2个文件都为文本性质的文件,用户可以通过相应的文件读写方法实现对文件内容的读写,但是它们包含的内容比较繁多且格式不够统一,这就给原始点数据的使用带来了不便。因此,本文通过编写程序,在Mapsis软件[2]中添加了“保存表为点数据”功能;利用该功能可以提取等值线或闭合面的点数据,这些点数据都存放在一个文本文件中。点数据不仅可以在Mapsis、Mapinfo中生成矢量图形,也可以在其他地理信息软件中应用。
Mapinfo中的数据可以分为:点数据、线数据和多边形数据[3]。
1)点数据。每个点数据有2行,第1行以Point开始,后为1对坐标数据,第2行以Symbol开始,后为符号的颜色。
2)线数据。数据体中包括2种类型的线:一种为无分叉的折线,PLINE后为该线的点数,随后是每个点的坐标 (每个点1行);另一种为有分叉的折线,如有支流的河流,这些支流可组合在一起作为一个线对象。后一类型以PLINE MULTIPLE为标志,后跟折线数,如PLINE MULTIPLE 5表示该线对象有5条折线,随后为每条折线的点数和点坐标。
3)多边形数据。多边形数据体以Region开头,后跟该多边形对象的多边形个数,然后是每个多边形的点数和各点的坐标。每个多边形对象后,可以有Pen、Brush和Center等数据,也可以没有。
本文中提到的点坐标是指用来描述图形对象的属性值,包括经纬度坐标值、等值线值、区域名称等,但不包括Point、Pline、Region、Pen、Brush等说明性的字符,这与 Mapinfo中的点数据概念略有不同。程序中选定的图形对象包括:点(point)、直线(line)、折线(polyline)、区域(region)、圆弧(arc)、文本(text)、矩形(rectangle)、圆角矩形(rounded rectangle)和椭圆(ellipse)。软件根据不同的选取对象进行不同的转换。
本程序主要的功能是将选定的图形转换为文本格式的点数据,同时也可以把这些点数据再次转换为矢量图形。它主要是通过 C#建立自动化控制器,传送MapBasic语言或命令,进而对Mapinfo进行操作。实际上,就是将 Mapinfo用作进程外服务器,在后台输出 OLE自动化对象,供控制器调用它的属性和方法,C#等开发的程序在前台运行。用C#语言可以高效、方便地制作用户界面及实现复杂的科学运算,并且能实现全部的Mapinfo功能。
首先将选定的图形对象转换为M if、M id格式[4,5],然后再转换为TXT文件。选择的对象主要为等值线和闭合区域面,本文中将重点讲述在闭合区域面内提取点坐标。本程序用c#语言编写[6-8],是对Mapsis软件功能的进一步完善。选择闭合区域面时可以选择一个或多个。
1)选取单个区域。如果选取的是单个区域,首先读取图形对象所对应的 M if格式数据,再提取经纬度等数据,其部分代码为:
2)选取多个区域面。其主要步骤为:
①计算所有选择的多边形的面积。假设某闭合区有N个结点,其结点坐标为xiyi,(i=1,2,3,…,N),则其面积的计算公式为[9]:
②将面积从大到小排序。当闭合区面积确定后,将其按照面积由大到小进行排序。
③判定每个小区域的直接父区域。如果有一个闭合区B的任一点被包含在另一个闭合区A中,那么B的所有点都包含在A内,即A包含B。如果A同时在所有包含B的区域中面积最小,则A被称为B的父区域,B被称为A的子区域。一个父区域可以有多个子区域,一个子区域只能有一个父区域。其部分代码为:
④按区域面积从大到小输出区域。输出内容包括区域名称、区域颜色、区域颜色模式、区域填充、边线颜色、边线宽度、文字信息和区域坐标等。
等值线和闭合面转换为点数据的过程完全一样,本文以闭合面为例加以说明。
1)打开Mapinfo表数据。在Mapsis中打开Mapinfo表文件“汶川地震烈度图”(见图1),选择最外层烈度为VI的区域(可以选择多个区域),该地震烈度图由Mapinfo4.0矢量化得到。
图1 汶川地震烈度图
2)生成点数据。点击“文件”按钮,选择“保存表为点数据”,程序会自动计算结果并以 TXT文件保存在默认目录中(见图2)。文件中X表示经度,Y表示纬度,同时还包括 Id(编号),name(名称),Areal(区域)及Ld(烈度值)。
图2 Mapsis软件生成的点数据文件
生成的TXT文件可以在Mapsis、Mapinfo等地理信息软件中再次生成矢量图形。
4.1 在Mapsis中的转换步骤
1)在Mapsis中打开TXT文件:点击“工具(空间)”-“空间标注(绘制城市符号)”在目录中找到计算结果。
2)点击“确定”后,点数据就添加到了“汶川地震烈度图”底图上(见图3),也可以单独打开点数据文件。这些添加的红色区域是由很多坐标点构成,每个坐标点均用红色的圆表示(见图4)。
图3 添加了点数据的汶川地震烈度图
图4 放大后的图形区域
4.2 在Map Info中的转换步骤
1)在Mapinfo中打开TXT文件中的原始数据,并且按图5进行参数设置。
图5 Mapinfo软件界面
2)在软件中点击“创建点”,然后“新建地图窗口(F3)”得到图6,黑色的区域是由很多黑色五角星构成的。图形的样式及颜色可以根据自己的需要进行更改。
图6 利用点数据在Mapinfo中生成图形文件
本文总结了现有 Mapinfo的数据转出功能,并在此基础上对Mapinfo功能进行拓展,从而很好地解决了Mapinfo表数据转化为点数据的问题。提取出的点数据可以在 Mapsis、Mapinfo中再次生成矢量图形。该方法可以提取地震震中、活动断层、地震危险区等区域的点数据,这将在地震分析研究及其他科研工作中发挥重要作用。
[1] 须春美.Mapinfo 6.0应用开发指南[M].北京:人民邮电出版社,2001
[2] 陆远忠,李胜乐.基于GIS的地震分析预报系统[M].成都:成都地图出版社,2002
[3] 张剑平,任福继,叶荣华,等编著.地理信息系统与Mapinfo应用[M].北京:科学出版社,1999
[4] 李胜乐,陆远忠.Mapinfo地理信息系统二次开发实例[M].北京:电子工业出版社,2004
[5] 王海军,张玉梅.Mapinfo二次开发的若干问题 [J].测绘信息与工程,2003(02):26-27
[6] 赵春江编著.数字图像处理算法典型实例[M].北京:人民邮电出版社,2009
[7] 王国胜,刘攀.C#基础与案例开发详解[M].北京:清华大学出版社,2009
[8] 李敏波.C#高级编程[M].北京:清华大学出版社,2006
[9] 李井冈,姚运生,李贤华,等.在Mapinfo中实现等值线图区域填充的快速算法[J].计算机工程与设计,2009(07):1781-1782
Principle and Application of Mapinfo Table Data Converting into Point Data
by WU Adan
Taking advantage of computer program,this paper converted the selected isoline or closed surface corresponding spatial information into unified point data format,and stored these point data in a TXT file.Using these point data could generate different types of Vector graphicsin geographyinformation software such as Mapsis,Mapinfo conveniently.
Mapinfo,Mapsis,table data,points datas,data conversion
2011-04-02
P208
B
1672-4623(2012)03-0111-03
吴阿丹,硕士,主要研究方向为地震与地理信息系统。