gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:2672回复:0

MicroStation到MapGis的数据转换实现

楼主#
更多 发布于:2008-06-16 09:16
邵燕霞
(华北电力大学图书馆,河北保定)
[摘  要]本文结合实际工作介绍了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。
 
喜欢0 评分0
游客

返回顶部