阅读:2825回复:0
MicroStation到MapGis的数据转换实现
邵燕霞
(华北电力大学图书馆,河北保定) [摘 要]本文结合实际工作介绍了MicroStation 到MapGis数据转换的解决办法。以线和点数据为例,详细介绍了数据转换过程:以Mapinfo格式的*.MIF、*.MID文件为中间转换格式,利用MapGis二次开发功能实现MicroStation 到MapGis的数据转换。 [关键词] MicroStation MapGis 数据转换 地理信息系统(Geographic Information System,简称GIS)是融合计算机图形和数据库于一体,用来存储和处理空间信息的高新技术,GIS作为计算机科学、地理学、测量学、地图学等多门学科综合的一种边缘性学科已深入到各行各业。GIS有不同的软件平台,数据格式也多种多样,用户可以根据自己的需求选择不同的GIS软件平台和数据格式。不同格式的数据可以通过数据格式转换实现数据共享,但各个GIS软件平台自身具有的数据格式转换功能很有限,很难实现任意两种数据格式之间的直接转换。下面结合实践简单介绍MicroStation 中的数据如何转换为MapGis格式数据。 1. MicroStation 、MapGis MicroStation是一个功能强大的2D/3D辅助设计工具软件。其专用格式是DGN,并兼容AutoCAD的DWG/DXF等格式。它的主要功能是制图,图形元素分为点、线、面、文本四大类,数据文件可分层存储各种图形元素。 MapGis是一个优秀的国产GIS平台软件。与MicroStation相比MapGis侧重于空间信息的存储和管理,它的图形数据元素分为点、线、面三类,可以分层存储在点、线、面文件类型中,利用工程文件把各种文件组织在一起。具有制作点符号、线型、面填充符号的功能。点符号和线型也有缩放比例,文本放置方式只有一种。 2. MicroStation 到MapGis的数据转换过程 在MicroStation中矢量化图形后不能直接转换为MapGis格式。我们可以借助Mapinfo格式的*.MIF、*.MID文件为中间转换格式,首先MicroStation将图形数据转换为Mapinfo格式的*.MIF、*.MID文件,然后将*.MIF、*.MID文件转换为MapGis格式数据。但是如果直接用MapGis转换*.MIF、*.MID文件,转换结果并不能直接使用,转换后还需要进行修改图形参数,属性赋值等工作。对于重叠地物编码等特殊情况,还需要进行大量后期矢量化工作。针对上述情况,利用MapGis二次开发功能实现*.MIF、*.MID文件转换为MapGis格式,并在转换进程中,依据某些特征属性直接赋予相应参数。 2.1 建立参数表文件 对线状地物、零星地物、注释等不同的图形数据我们分别建立了相应的参数表文件。LINE.TXT为线状地物参数表文件,SUB.TXT为零星地物参数表文件,TEXT.TXT为注释参数表文件。文件内容以一行为基数,一行为一种代码参数。下面分别列举三种参数表格式并举例说明参数表内容,每个参数表最后一行定义代码为空的属性参数值。 线状地物参数表格式如下(LINE.TXT): 代码,名称,线型,颜色,线宽,X系数,Y系数,图层 E01,地类界,1,905,4,5,5,84 301,等高线,1,906,5,5,16 ,-9999,1,5,3,5,5,219 零星地物参数表格式如下(SUB.TXT): 代码,名称,子图号,高度,宽度,颜色,图层 F01,零星地物,326,6,7,1,200 ,-9999,1,5,3,5,219 注释参数表格式如下(TEXT.TXT): 代码,名称,字高,字宽,字体,颜色,字间距,图层 X01,图斑编号,2,2,3,1,0,230 X02,权属单位,3,3,2,1,0,231 ,-9999,1,5,3,5,5,219 2.2 MicroStation数据转换为Mapinfo格式 在MicroStation中,建立特征属性结构,矢量化过程中,对线型数据输入相应特征属性,对于注释和零星地物只需填写代码即可。矢量化完成后,以Mapinfo格式的*.MIF、*.MID文件转出。 特征属性结构(MicroStation中) 字段名字段类型长度小数位数 代码文本15 地物编号文本15 地类码文本15 宽度双精度156 *.MIF文件内容为空间图形数据。由于我们根据用户需求只转换了线和点,所以*.MIF文件内容分为直线、折线、子图、注释、闭合折线等几种情况。 *.MID文件内容为代码值和它的属性记录。*.MID文件中代码与上面定义的LINE.TXT、SUB.TXT、TEXT.TXT中代码对应。 *.MID文件中属性记录格式如下: MSLINK,MAPID,代码,地类码,地物编号,宽度 163,1,517,77,1,24.0000000000000 2.3 Mapinfo格式转换为MapGis数据 MapGis直接转换*.MIF、*.MID文件,空间图形数据可以显示但图形参数、属性值都会丢失,数据利用率太低,还需要重新进行修改参数,属性赋值等工作。对于重叠地物编码等特殊情况,还需要进行大量后期矢量化工作。为了很好地解决以上数据转换存在的问题,我们利用MapGis二次开发功能,使用VC++开发了一个应用程序可以实现批量转换矢量化数据,转换结果为MapGis格式,按MapGis内部格式*.WL、*.WT、*.WP存放,转换过程中自动完成图形参数对应,并将特征属性带入MapGis。 代码为重叠地物编码的属性记录,需将重叠编码分离出来分别处理。重叠地物编码只出现在线对象属性记录中。下面举例说明: 代码C3501表示该对象为单线常年河,有一条省界与之重叠,且方向相反,但图上没有该省界图形对象,需要程序执行中自动绘制一条折线做为省界,获取坐标值需与获取单线常年河坐标值顺序相反。应用程序根据*.MIF文件读取记录坐标值,绘制图形对象,并且根据*.MID文件赋属性值,根据LINE.TXT、SUB.TXT、TEXT.TXT赋绘图参数。 部分程序代码如下: if (MidFieldLen >= 5)//重叠地物编码 { cddwbm = true; cdfx = dmstr.Left(1); if(cdfx == "C")//反向 { cdpdat = new F_DOT[linenum]; for ( syx = linenum - 1; sy = 0 ; sy-- ) //取折线坐标 { cdpdat[linenum - sy].x = pdat[sy].x; cdpdat[linenum - sy].y = pdat[sy].y; } } if(cdfx == "A" || cdfx == "B")//B/A正向/无向 { cdpdat = new F_DOT[linenum]; for ( sy = 0;sy < linenum ; sy++ ) //取折线坐标 { cdpdat[sy].x = pdat[sy].x; cdpdat[sy].y = pdat[sy].y; } } bjlx = dmstr.Mid(1,1); //赋重叠编码 if(cdfx == "A" && bjlx == "3") { cddmstr = "Y01";//省界 } if(cdfx == "B" || cdfx == "C") { if (bjlx == "5") { cddmstr = "M02";//县界 } } dmstr = dmstr.Right(MidFieldLen - 2); } //绘制重叠折线,填加属性记录 long k = _AppendLin(lai,pdat,linenum,lininfo); _GetLinAtt(lai,k,&attstru,&att); _SetFld(att,attstru,"线状要素编码",(char *)LPCTSTR(dmstr)); _SetFld(att,attstru,"线状地物编",(char *)LPCTSTR(dwbhstr)); _SetFld(att,attstru,"地类号",(char *)LPCTSTR(dlmstr)); _SetFld(att,attstru,"宽_m_",(char *)&MidWidth); _WriteLinAtt(lai,k,attstru,att); 不同的GIS软件平台,数据格式也多种多样,实现数据共享可以有效的节省用户采集数据的时间和成本,但受限于数据格式之间的直接转换,会给用户造成很大的不便。本文所介绍的MicroStation到MapGis的数据转换方法只是针对点和线进行,而且所转换的地物类型数据也很有限,如果地物类型有变化,参数表有变化,程序需要进行相应修改,所以GIS平台之间实现数据转换最终还需要软件生产厂商来解决。 [参考文献] [1]郭洪利,刘艳芳,杨素凤.MicroStation J 到MapGis的数据转换方法研究与实践[J].铁道勘察,2007(1) [2]黄福洪,刘康. 将其他空间数据格式转成MAPGIS文件格式的若干问题的探讨[J ]. 计算机与农业, 2003 (7) [作者简介] 邵燕霞(1976-),女,华北电力大学图书馆电子阅览室助理工程师,研究方向GIS。 |
|
|