黄国强,魏金占,莫文通
(1.南宁市国土资源信息中心,广西南宁 530022; 2.南宁市勘察测绘地理信息院,广西南宁 530022)
AutoCAD 中自定义形文件数据转换方法分析
黄国强1∗,魏金占2,莫文通2
(1.南宁市国土资源信息中心,广西南宁 530022; 2.南宁市勘察测绘地理信息院,广西南宁 530022)
自定义形文件在入库和数据转换时多无法识别和显示,但形文件的定义一般遵循国家标准,数据多通过几何属性或扩展属性进行属性信息记录。因此本文结合工作实际,分析数据的属性信息组织特点,提出以地物编码结合地物几何属性信息方法,实现了自定义符号库的多元数据转换问题。通过两种信息的结合,最大化的保留转换前的信息,实现了几何图形与地物属性的一体化转换,为数据无损转换及入库提供一种新的转换思路。
形文件;数据转换;地物编码
AutoCAD平台在工程建设领域的多个方面都有广泛应用,作为一个通用平台,AutoCAD平台为满足各类工程差异化需求,提供快捷方便的字体和符号定义工具即自定义形文件。这种自定义形文件灵活多样,但也为数据交换及入库带来不少麻烦。为了在数据交换和入库时保证数据信息的完整性,就必须解决形文件转换及入库问题。
形文件主要为满足不同行业的个性化需求,提供各类符号(包括字体,下文不再注明)的自定义功能。自定义形文件编译前默认为SHP格式,以文本格式打开,如图1所示。
图1 形文件内容
SHP文件编译后,即为SHX格式,如图2所示。默认存放在∗∗\\Fonts目录下。为了正确显示包含自定义形文件的图形文件,就必须指定对应形文件的存放路径。
图2 形文件示例
形文件中的符号在GIS或其他CAD平台转入时,默认为文本对象,如图3所示,形文件无法被其他平台正确识别。
图3 形文件无法被其他平台正确识别
常见处理方法是将数据转换后形文件中对应的符号转换为对应平台的符号即可。转换程序通过对照表,以对应的符号代替自定义形文件中的符号,即可实现自动化数据转换了。
上文的方法虽然理论上可以解决问题,但GIS平台或其他CAD平台并未专门的转换接口。因此,若采用以上方法,其转换难度及工作量依然巨大。
虽然各个单位自定义不同的符号库,但是都必须遵守国家及行业标准,因此如果能直接将自定义形文件直接转换为符号文件,就可以省略必须另作一套符号库的工作,也为数据转换接口的编写提供不少便捷。
经分析,形文件主要是通过最基础的元素如线段、弧等,制作成各类复杂个性化的符号。如植被符号,由4条线段组成,因此只要能获取形文件中最基础的构成元素,既可以通过底层转换,实现符号的无损转换了。
经试验分析可知,经过上述方法处理后,符号可以正常显示,但存在符号属性信息丢失现象。如上文符号,转换后就是一个普通符号,没有名称和地物属性,为了解决以上问题,可间接采用几何属性来实现。
传统的CAD数据主要依靠样式,颜色等信息来区分不同对象,随着技术进步及需求升级,CAD平台多提供扩展属性接口,通过扩展属性,实现了几何对象与属性的一体化。以此,以上文分析入手,拟采用扩展属性结合对照表模式,实现形文件的无损转换。具体过程如图4所示。
图4 形文件类符号处理流程图
转换前,将待转换数据赋予地物属性,主要标明地物所有的几何信息和地物信息,如编码2111,表示第2图层,11号颜色,1号线型。此外,2还表示居民地类,11表示普通房屋,1表示线宽。通过此编码,将对象转移到对应的图层并按照以上说明的属性编码规则存放。之后,将符号转换为简单符号;最后再通过几何属性,恢复地物属性信息。
以甲单位数据为例,其采用自定义符号类型,在转入乙单位数据时,必须将甲单位数据转换为乙单位数据格式。其中甲单位以AutoCAD为平台,自定义符号为形文件格式。乙方采用MicroStaion V8 2004平台,亦采用自定义符号库,符号类型为SharedCell类型。
首先分析甲单位的自定义符号,符号样式与乙单位类似,其符号库参照国标GB/T 7929-1995,因此首先必须完成同比例尺下符号对照表,对照表内容示例如图5所示。
图5 符号对照表示例
其中,GS开头为甲单位地物编码,与乙单位地物编码具有一定的对照规律。乙单位的地物编码参照国标,对应关系为:第一位为大类,如1代表控制点类,对应国标中的大类为3;中间两位为子类,代表地物子类,如12代表土堆上的三角点,与国标一致,最后一位代表类别,如符号则为0,地物线代表线宽。以此4位编码为名,自定义线性和符号,构成了乙单位独有的自定义符号库(包括线型)。
代码实现过程如下:首先,通过CAD平台的VBA接口,将甲单位地物编码通过扩展属性写入地物;完成后,在V8平台通过读取扩展属性,参照对照表,按照一定的几何图层及颜色转换地物;最后通过扩展属性,几何属性将地物对应的乙单位地物编码写入,即完成了几何图形及属性的转换,如图6所示。
图6 甲方图形转换到乙方数据格式简单流程图
具体代码实现如下:
(1)写入甲方地物编码
此部分功能在CAD平台通过VBA完成,代码实现如下:
说明:设置扩展属性时,第一个为扩展属性的名称,如NNDWGIS。主要用于说明扩展属性的版权信息,如NNSI、NLIS、SOUTH等,而且此信息的数据编码必须为1001,设置地物扩展属性的代码示例如下:
Private Sub SetXdata(Names As String,Shp As Acad-Shape)
Dim DataType(0 To 1)As Integer
Dim Data(0 To 1) As Variant
If Names<>""Then DataType(0)=1001:Data(0)="NNDWGIS"
DataType(1)=1000:Data(1)=Names
'写入扩展属性
Shp.SetXdata DataType,Data
End If
End Sub
(2)读取扩展属性
读取扩展属性主要在V8平台,同样通过VBA接口。主要完成甲方地物编码的读取,再通过地物编码对照表,完成数据转换及乙方地物编码的写入,读取地物扩展属性的代码示例如下:
Private Function SetElementCode(Ele As Element)as String
Dim Names()As String
Dim XDT()As XDatum
If Ele.HasAnyXData Then
Names=Ele.GetXDataApplicationNames
If UCase(Names(0))="NNDWGIS"Then
XDT=Ele.GetXData(Names(0))
'读取扩展属性
SetElementCode=XDT(0).Value
End If
End If
End function
(3)读取编码对照表
读取编码对照表主要是为了在获取甲方地物编码后,通过地物编码对照表,获取乙方对应的地物编码,为数据转换及新地物编码写入做准备。读取地物编码对照表的代码示例如下:
Private Function OpenTxt(CodeFile as String)as String
Dim fs As FileSystemObject
Dim a As TextStream
Set fs=CreateObject("Scripting.FileSystemObject")
Set a=fs.OpenTextFile(CodeFile,ForReading,TristateFalse)
OpenTxt=a.ReadAll
End Function
(4)数据转换
因为两平台的图层定义、色表、线性库等皆不相同,转换前必须将转换数据的图层、色表及线性库按照乙方的要求设置正确。数据转换主要完成地物几何属性的转换,如将地物按照新的地物编码规则,按照新的图层,颜色及样式存放。
首先,图层定义对照,对照表如表1所示。
图层对照表示例 表1
图层的重新对照及定义关键代码如下(以相应图层转换为例):
Private Sub SetLevelsName()
Dim IAs Integer
For i=1 to application.ActiveDesignFile.Levels.count
If InStr(application.ActiveDesignFile.Levels(i).Name,"控制")>0 Then
Set application.ActiveDesignFile.Levels(i).Name"层1"
application.ActiveDesignFile.Levels.Rewrite
ElseIf InStr(application.ActiveDesignFile.Levels(i).Name,"建筑")>0 Then
……….'其他图层对照类似,限于篇幅不作详述
End If
End Sub
完成图转换后,甲方地物即按照图层对照表转换为对应图层。
其次,图层对照完成后,还必须完成色表对照。色表的对照有两种方式,一种是将CAD原有颜色转换为RGB值,通过颜色对照表,转换为乙方要求的颜色对应的RGB。另一种是通过地物属性,打开乙方使用的色表,再通过地物编码重新更新地物颜色及线型样式。
本文使用第二种方案,具体打开色表代码如下:
Private Sub OPenColorTable()
Dim modalHandler As New Macro1ModalHandler
AddModalDialogEventsHandlermodalHandler
' 下列语句打开模式对话框"色表"
CadInputQueue.SendCommand"DIALOG COLOR"
RemoveModalDialogEventsHandlermodalHandler
CommandState.StartDefaultCommand
End Sub
对应类模块的编码如下:
Private Sub IModalDialogEvents_OnDialogOpened
(ByVal DialogBoxName As String,DialogResult As MsdDialogBoxResult)
If DialogBoxName="色表"Then
'下列语句打开模式对话框"打开色表"
Cad InputQueue.SendCommand"ATTACH COLORTABLE C:\Program Files\Bentley\Workspace\system\data\color.tbl"
DialogResult=msdDialogBoxResultOK
End If '色表
End Sub
同样可以通过编码信息,设置地物的其他几何信息,完成数据转换。代码示例如下(以线型设置为例):
Private Sub SetStyles(Code As String,ele As Element)
Dim i As Long
Dim j As Long
Dim k As Long
Dim ColIdx As Long
Dim CorRGB As String
Dim LWeight As String
Dim LStyle As LineStyle
Dim LStyleName As String
Dim LevName As String
' 编码匹配
If Code<>""Then
For n=6 To 1 Step-1 Code=Left(Code,n)
i=InStr(1,TxtCont,Code)
If i>0 Then Exit For
Next n
' 编码匹配成功
If i>5 Then
j=InStr(i-6,TxtCont,",")
k=InStr(j+1,TxtCont,",")
ColIdx=Left(Right(TxtCont,Len(TxtCont)-j),4)
CorRGB=Right(Left(ColIdx,3),2)
LWeight=Right(ColIdx,1)
LevName=Left(ColIdx,1)
' 设置对象属性
ele.LineWeight=LWeight
ele.color=CorRGB
ele.LineStyle=application.ActiveDesignFile.LineStyles(" ColIdx")
ele.Redraw msdDrawingModeNormal
ele.Rewrite
End If
End Sub
(5)写入乙方地物编码
完成图层、颜色及样式转换后,就可以根据原有的地物属性及几何属性写入对应的乙方地物编码了。写入地物编码的关键函数如下:
Private Sub AddXdata(ele As Element,Ecode As String)
Dim SubEnu As ElementEnumerator
If Ecode<>""Then
Dim Xdata()As XDatum
AppendXDatum Xdata,sdXDatumTypeControlString,Ecode
ele.SetXData"NLIS",Xdata
Application.DeleteXDatum Xdata,0
ele.Redraw
ele.Rewrite
End If
End Sub
通过以上5个步骤,即完成了数据转换工作。转换前后图形对比如图7所示。
本方案通过几何信息和地物编码信息实现数据的无损转换,与传统的多元数据交换不同点在于通过地物属性辅助数据转换。其特点是转换准确率高,数据转换时属性没有丢失,是多元数据转换的一种快捷安全高效的转换方法。通过地物编码及几何信息,乙方将各类数据如不同样式,不同编码的数据全部统一转换为自己专用数据格式并添加了地物及版权信息,使得数据的转换效率、使用范围及版权保护等方面得到很好的提升。
图7 转换前后图形对比
[1] Autodesk.AutoCAD 2004帮助[Z].Autodesk公司,inc. 2004.
[2] MicroStation V8 2004帮助[Z].Bentley公司,inc.2004.
[3] GB/20257.1-2007.国家基本比例尺地形图图式第一部分:1∶500 1∶1000 1∶2000地形图图式[S].
[4] 张晋西.Visual Basic与AutoCAD二次开发[D].北京:清华大学出版社,2002.
[5] 胡德承,田鹏波.DGN到DWG地形图数据转换的实现[J].城市勘测;2001(1).
[6] 刘志辉,肖炜枝,郭朝晖.基于MGE的广州市1∶500地形图修测及入库方法探索[J].城市勘测;2006(5).
The Research of Custom ized Shape Object in AutoCAD During Data Transform
Huang Guoqiang1,Wei Jinzhan2,Mo Wentong2
(1.Nanning Land and Resources Information Center,Nanning 530022,China;2.Nanning Explore&Survey Geoinformation Institue,Nanning 530022,China)
User-defined Shape Files cannot be properly appeared and recognized during data transform,but these files are always defined by national standard,which are realized by proper usage of Geometry information or extended information.Together with practice,by analyzing the arrangement characters of different information,a new method was put up in this paperwhich helps datamanagers to realize data transformation by element code and geometry information.The best advantage of thismethod is to keep the consistence of former data,which means a new way for spatial dadamanagement.
shape files;data transformation;feature codes
1672-8262(2013)04-75-04
P208.1
B
2012—11—08
黄国强(1966—),男,高级工程师,注册测绘师,研究方向主要有国土资源管理信息化、地籍测绘、空间数据库管理、数据处理等。