论文部分内容阅读
【摘 要】多源数据格式之间的无损转换是目前不同GIS系统之间数据共享的一个重要问题。本文深入研究了南方CASS软件的数据格式及读写交换方法,并以实例论述了数据读取及转换的具体过程。
【关键词】南方CASS;数据格式转换;二次开发;GIS
引言
南方CASS是基于AutoCAD平台开发的GIS前端数据采集系统。主要应用于地形成图、地籍成图、工程测量应用三大领域。它全面面向GIS,基本上实现了数字化成图系统与GIS的接口。使用骨架线实时编辑、简码用户化、GIS无缝接口等技术[1],已经成为了测绘行业最常用的GIS数据采集、图形输出软件之一。南方CASS在当前的测绘作业中已经占有很大的一部分市场,因此,研究它的数据格式及如何读取它值得探讨。
1南方CASS软件的数据格式
南方CASS软件支持AutoCAD的所有格式,常用的有*.DWG,*.DXF,*.CAS等,其中*.CAS是南方CASS的标准交换格式,是一种明码格式的文件,它用文本信息描述了空间数据的图形文件。它的数据格式是公开的,以ASCII形式存放,所以可以直接用程序对它进行读写操作。而*.DWG和*.DXF格式和AUTOCAD本身的数据格式是一致的,它实际是通过对AutoCAD二次开发,将图形属性存放在相应要素的扩展数据(XDATA)中,这部分内容可由命令XDLIST查看。
南方CASS软件在数据结构上与其他CAD软件存在着不同之处:第一,南方CASS自己定义了扩展代码,可以与空间地理要素进行转换;第二,对简单地物要素构块,复合地物要素编组表示;第三,可以按不同比例尺成图。但是,CASS软件也有其弊端,其一,形状、尺寸相同的多要素对应一个块名,这样不利于后期数据替换和修改;其二,組的概念不利于写块,也不利于GIS数据转换;其三,CASS内部代码不够详细,个别地物要素分类欠妥。为此,我们有必要研究CASS的数据记录格式,通过二次开发方式对CASS数据进行读写操作,对提高我们日常工作效率有很大帮助。
AutoCAD环境下提供了很多API,可以找到以下两个函数:SetXData、GetXData,其功能是读写图形对象的扩展属性数据。函数其参数表示方法为:SetXData(XdataType,XData)和GetXData(AppName,XDatafype,XDataValue)。
2数据读取及交换方法
2.1直接读取南方CAS交换格式
CASS系统的交换文件(*.CAS,以南方CASS6.1为例)的文件头是以“START”开始,第二行为X、Y的最小坐标(西南角的坐标),第三行为X、Y的最大坐标值(东北角坐标),这两行实际上表示了图形的范围。CASS交换文件中每一种地物都有唯一的实体编码,成图时系统会自动根据编码选择对应的符号或者线型,如果无对应线型,则默认为CONTINUOUS型,即实线型;文件正文从第四行开始,以图层为单位分成若干独立的部分,用中括号将层名括起来,作为该图层区的开始行,每个层内部又以实体类别划分开来,CASS交换文件共有POINT、LINE、ARC、CIRCLE、PLINE、SPLINE,TEXT、SPECIAL等八种实体类型,文件中每个层的实体类型部分以实体类型名开始,以字符串“nil”结束,中间连续表示若干个该类型的实体[2]。
由此,只需按照CASS文件的组织结构,利用编程语言对文本文件进行读写操作,将每个实体对应的图层、编码、坐标(串)以及其他扩展属性读入,通过二次开发的方式,便可以与其他GIS数据格式进行交换了。以VB.NET为例,其读取方法如下:
2.2直接读取AUTOCADDXF交换格式
DXF是DrawingExchangeFile的缩写,意思为图形交换文件,在工程制图中有广泛的应用,掌握了DXF文件的读写对编写数据格式转换软件时对图形信息的交换有重要意义。它有两种格式:一种是ASCIIDXF格式;一种是二进制DXF格式。ASCIIDXF文件格式是ASCII文本格式的AutoCAD图形的完整表示,这种文件格式易于被其它程序处理。二进制格式的DXF文件与ASCII格式的DXF文件包含的信息相同,但格式上二进制格式比ASCII格式更精简,能够节省25%的文件空间[3]。ASCII格式的DXF文件图元类型较为复杂,读写起来比较繁琐,其格式说明及读取方法有很多资料可以参考,这里就不再详细讨论了。
2.3基于VBA方式
VBA是一种通用的宏语言,与VB(VisualBasic)具有相似的语言结构。通过在AutoCAD的VBA设计器中编写VBA代码,遍历DWG图层中图元的图形及属性信息,存入到相应的变量组,然后根据需要写入对应的其他格式数据文件中。
2.4基于VLISP方式
VLISP是ATUOCAD的内部编程语言,利用它可以对CAD进行二次开发。它通过简单命令组合的方式实现强大的功能。CASS内部数据格式所带扩展属性在ATUOCAD软件中无法直接查看,通过VLISP编写代码便可以方便读取南方CASS数据的扩展属性信息。以一般房屋为例,其外部扩展属性格式为:(-3(“SOUTH”(1002,“{”)(1000,“141101”)(1002,“}”))))
其中“SOUTH”(南方)是外部扩展属性名称,“141101”是CASS内部代码,1000是内部标识,“-3”是外部扩展属性标志,(1002,“{”)和(1002,“}”)是起始和结束符[4]。
2.4基于OBJECTARX方式
ObjectARX是AutoDesk公司针对AutoCAD平台上的二次开发而推出的一个开发软件包,它提供了以C++为基础的面向对象的开发环境及应用程序接口,能真正快速的访问AutoCAD图形数据库。与以往的AutuCAD二次开发工具AutoLISP和ADS不同,ObjectARX应用程序是一个动态链接库(DLL),它共享AutoCAD的地址空间并直接调用AutoCAD的函数[5]。可以向ObjectARX程序环境添加新类,并将其输出以供其他程序使用,也可以通过向既有的AutoCAD类添加函数来扩充ObjectARX协议。ARX类库采用了标准的C++类库的封装形式,这也大大提高了程序员编程的可靠度和效率。另外,利用ObjectArx可以开发出界面美观、易于更新维护的应用系统,使ATUOCAD应用程序的商业化成为可能。南方CASS软件本身即是基于这一技术开发而成。随着ATUOCAD软件的不断升级,2006及以上版已支持Microsoft的.net环境。 2.5基于FMESUITE二次开发方式
FMESuite是加拿大SAFE公司的提供的一个多元数据转换、应用及共享的解决方案。可以用于读、写、存储和转换各种空间数据。它能实现各类GIS及CAD格式的数据相互转换。FME提出了一个数据转换引擎的概念,其实质是根据OpenGIS的规则,建立一个非常详尽的包含了以上所有内容的GIS数据模型。按照OpenGIS的数据模型与各类数据格式和数据模型的对应关系,在任意两种数据格式之间建立更宽的“数据通道”,使得任意两种数据格式和模型之间可以进行最大限度不丢失信息的相互转换和表达[6]。
2.6基于DWGdirectX二次开发方式
AutoCAD的DWG格式是一种非公开的二进制格式。OpenDWGToolkit(简称“ODT”)是OpenDWG联盟推出的一组开发工具,其中用来读写DWG格式文件的库DwgDirectX,通过DwgDirectX利用VB、VC等語言可在脱离AutoCAD的情况下直接对DWG读写,能够快捷地访问AutoCAD图形里的各种实体或对象类型,将DWG文件格式解读成为一种开放的工业标准文件格式,对外屏蔽了DWG的版本差异,支持处理AutoCAD2.5到最新版本DWG文件[7]。
DwgDirectX组织数据的方式与ObjectARX非常相似,包括图块(Block)、图层(Layer)、线型(LineType)、形文件(ShapeFile)、视图(View)、视口(ViewPort)、标注样式(DimStyle)、用户坐标系(UCS)、注册应用程序(RegApp)9个容器表,块表包括ModelSpace(模型空间)和PaperSpace(图纸空间)两种基本类型。需要检索扩展数据的实体包含在块表的ModelSpace或PaperSpace中,本文针对块表的ModelSpace进行操作。
3结语
南方CASS作为目前市场上最普及,最实用的测绘软件,其在制图方面的优势显而易见的。当今各个行业都针对专业数据特点基于CAD平台开发了行业标准数据处理平台,但希望通过简单的数据转换就能完全满足GIS的建库要求,是很困难的。这是由CAD在应用上的广泛性所决定的,各种形体、各种标准对制图可能毫无影响,但对数据内在的属性是有很大的区别,并且不同GIS数据本身的内部结构也有所不同,对地理信息的表达方式有很大的差异性。这些都造成了数据在交换过程中丢失信息或损失精度。所以,只有深入研究AUTOCAD格式的数据组织形式及读取方式,在数据的交换过程中才能做到游刃有余,针对不同的要求,采用合理的方法进行转换。
参考文献:
[1]CASS7.0数字化地形地籍成图系统参考手册.广州:南方测绘仪器公司.2006.
[2]郭瑞,杨敏华,祝汉峰.关于MAPGIS与南方CASS的数据共享技术研究[J].测绘与空间地理信息.2008年第2期.
[3]xacxd_bd.读取DXF文件[DB/OL].百度文库.2010.10.07
[4]刘希双,潘奕,王林.解析CASS扩展属性数据[J].测绘与空间地理信息.2009年第6期.
[5]周炤,刘海砚,赵鹏.基于ObjectARX技术的AutoCAD数据格式转换[J].地理空间信息,2006,4(6):30-32.
[6]李瑞霞,杨敏,邓喀中.基于FME的GIS到CAD数据无损转换[J].测绘通报.2009第5期.
[7]肖起年.基于DWGDirectX读写DWG图纸文件的实现[J].计算机系统应用.2009第3期.
【关键词】南方CASS;数据格式转换;二次开发;GIS
引言
南方CASS是基于AutoCAD平台开发的GIS前端数据采集系统。主要应用于地形成图、地籍成图、工程测量应用三大领域。它全面面向GIS,基本上实现了数字化成图系统与GIS的接口。使用骨架线实时编辑、简码用户化、GIS无缝接口等技术[1],已经成为了测绘行业最常用的GIS数据采集、图形输出软件之一。南方CASS在当前的测绘作业中已经占有很大的一部分市场,因此,研究它的数据格式及如何读取它值得探讨。
1南方CASS软件的数据格式
南方CASS软件支持AutoCAD的所有格式,常用的有*.DWG,*.DXF,*.CAS等,其中*.CAS是南方CASS的标准交换格式,是一种明码格式的文件,它用文本信息描述了空间数据的图形文件。它的数据格式是公开的,以ASCII形式存放,所以可以直接用程序对它进行读写操作。而*.DWG和*.DXF格式和AUTOCAD本身的数据格式是一致的,它实际是通过对AutoCAD二次开发,将图形属性存放在相应要素的扩展数据(XDATA)中,这部分内容可由命令XDLIST查看。
南方CASS软件在数据结构上与其他CAD软件存在着不同之处:第一,南方CASS自己定义了扩展代码,可以与空间地理要素进行转换;第二,对简单地物要素构块,复合地物要素编组表示;第三,可以按不同比例尺成图。但是,CASS软件也有其弊端,其一,形状、尺寸相同的多要素对应一个块名,这样不利于后期数据替换和修改;其二,組的概念不利于写块,也不利于GIS数据转换;其三,CASS内部代码不够详细,个别地物要素分类欠妥。为此,我们有必要研究CASS的数据记录格式,通过二次开发方式对CASS数据进行读写操作,对提高我们日常工作效率有很大帮助。
AutoCAD环境下提供了很多API,可以找到以下两个函数:SetXData、GetXData,其功能是读写图形对象的扩展属性数据。函数其参数表示方法为:SetXData(XdataType,XData)和GetXData(AppName,XDatafype,XDataValue)。
2数据读取及交换方法
2.1直接读取南方CAS交换格式
CASS系统的交换文件(*.CAS,以南方CASS6.1为例)的文件头是以“START”开始,第二行为X、Y的最小坐标(西南角的坐标),第三行为X、Y的最大坐标值(东北角坐标),这两行实际上表示了图形的范围。CASS交换文件中每一种地物都有唯一的实体编码,成图时系统会自动根据编码选择对应的符号或者线型,如果无对应线型,则默认为CONTINUOUS型,即实线型;文件正文从第四行开始,以图层为单位分成若干独立的部分,用中括号将层名括起来,作为该图层区的开始行,每个层内部又以实体类别划分开来,CASS交换文件共有POINT、LINE、ARC、CIRCLE、PLINE、SPLINE,TEXT、SPECIAL等八种实体类型,文件中每个层的实体类型部分以实体类型名开始,以字符串“nil”结束,中间连续表示若干个该类型的实体[2]。
由此,只需按照CASS文件的组织结构,利用编程语言对文本文件进行读写操作,将每个实体对应的图层、编码、坐标(串)以及其他扩展属性读入,通过二次开发的方式,便可以与其他GIS数据格式进行交换了。以VB.NET为例,其读取方法如下:
2.2直接读取AUTOCADDXF交换格式
DXF是DrawingExchangeFile的缩写,意思为图形交换文件,在工程制图中有广泛的应用,掌握了DXF文件的读写对编写数据格式转换软件时对图形信息的交换有重要意义。它有两种格式:一种是ASCIIDXF格式;一种是二进制DXF格式。ASCIIDXF文件格式是ASCII文本格式的AutoCAD图形的完整表示,这种文件格式易于被其它程序处理。二进制格式的DXF文件与ASCII格式的DXF文件包含的信息相同,但格式上二进制格式比ASCII格式更精简,能够节省25%的文件空间[3]。ASCII格式的DXF文件图元类型较为复杂,读写起来比较繁琐,其格式说明及读取方法有很多资料可以参考,这里就不再详细讨论了。
2.3基于VBA方式
VBA是一种通用的宏语言,与VB(VisualBasic)具有相似的语言结构。通过在AutoCAD的VBA设计器中编写VBA代码,遍历DWG图层中图元的图形及属性信息,存入到相应的变量组,然后根据需要写入对应的其他格式数据文件中。
2.4基于VLISP方式
VLISP是ATUOCAD的内部编程语言,利用它可以对CAD进行二次开发。它通过简单命令组合的方式实现强大的功能。CASS内部数据格式所带扩展属性在ATUOCAD软件中无法直接查看,通过VLISP编写代码便可以方便读取南方CASS数据的扩展属性信息。以一般房屋为例,其外部扩展属性格式为:(-3(“SOUTH”(1002,“{”)(1000,“141101”)(1002,“}”))))
其中“SOUTH”(南方)是外部扩展属性名称,“141101”是CASS内部代码,1000是内部标识,“-3”是外部扩展属性标志,(1002,“{”)和(1002,“}”)是起始和结束符[4]。
2.4基于OBJECTARX方式
ObjectARX是AutoDesk公司针对AutoCAD平台上的二次开发而推出的一个开发软件包,它提供了以C++为基础的面向对象的开发环境及应用程序接口,能真正快速的访问AutoCAD图形数据库。与以往的AutuCAD二次开发工具AutoLISP和ADS不同,ObjectARX应用程序是一个动态链接库(DLL),它共享AutoCAD的地址空间并直接调用AutoCAD的函数[5]。可以向ObjectARX程序环境添加新类,并将其输出以供其他程序使用,也可以通过向既有的AutoCAD类添加函数来扩充ObjectARX协议。ARX类库采用了标准的C++类库的封装形式,这也大大提高了程序员编程的可靠度和效率。另外,利用ObjectArx可以开发出界面美观、易于更新维护的应用系统,使ATUOCAD应用程序的商业化成为可能。南方CASS软件本身即是基于这一技术开发而成。随着ATUOCAD软件的不断升级,2006及以上版已支持Microsoft的.net环境。 2.5基于FMESUITE二次开发方式
FMESuite是加拿大SAFE公司的提供的一个多元数据转换、应用及共享的解决方案。可以用于读、写、存储和转换各种空间数据。它能实现各类GIS及CAD格式的数据相互转换。FME提出了一个数据转换引擎的概念,其实质是根据OpenGIS的规则,建立一个非常详尽的包含了以上所有内容的GIS数据模型。按照OpenGIS的数据模型与各类数据格式和数据模型的对应关系,在任意两种数据格式之间建立更宽的“数据通道”,使得任意两种数据格式和模型之间可以进行最大限度不丢失信息的相互转换和表达[6]。
2.6基于DWGdirectX二次开发方式
AutoCAD的DWG格式是一种非公开的二进制格式。OpenDWGToolkit(简称“ODT”)是OpenDWG联盟推出的一组开发工具,其中用来读写DWG格式文件的库DwgDirectX,通过DwgDirectX利用VB、VC等語言可在脱离AutoCAD的情况下直接对DWG读写,能够快捷地访问AutoCAD图形里的各种实体或对象类型,将DWG文件格式解读成为一种开放的工业标准文件格式,对外屏蔽了DWG的版本差异,支持处理AutoCAD2.5到最新版本DWG文件[7]。
DwgDirectX组织数据的方式与ObjectARX非常相似,包括图块(Block)、图层(Layer)、线型(LineType)、形文件(ShapeFile)、视图(View)、视口(ViewPort)、标注样式(DimStyle)、用户坐标系(UCS)、注册应用程序(RegApp)9个容器表,块表包括ModelSpace(模型空间)和PaperSpace(图纸空间)两种基本类型。需要检索扩展数据的实体包含在块表的ModelSpace或PaperSpace中,本文针对块表的ModelSpace进行操作。
3结语
南方CASS作为目前市场上最普及,最实用的测绘软件,其在制图方面的优势显而易见的。当今各个行业都针对专业数据特点基于CAD平台开发了行业标准数据处理平台,但希望通过简单的数据转换就能完全满足GIS的建库要求,是很困难的。这是由CAD在应用上的广泛性所决定的,各种形体、各种标准对制图可能毫无影响,但对数据内在的属性是有很大的区别,并且不同GIS数据本身的内部结构也有所不同,对地理信息的表达方式有很大的差异性。这些都造成了数据在交换过程中丢失信息或损失精度。所以,只有深入研究AUTOCAD格式的数据组织形式及读取方式,在数据的交换过程中才能做到游刃有余,针对不同的要求,采用合理的方法进行转换。
参考文献:
[1]CASS7.0数字化地形地籍成图系统参考手册.广州:南方测绘仪器公司.2006.
[2]郭瑞,杨敏华,祝汉峰.关于MAPGIS与南方CASS的数据共享技术研究[J].测绘与空间地理信息.2008年第2期.
[3]xacxd_bd.读取DXF文件[DB/OL].百度文库.2010.10.07
[4]刘希双,潘奕,王林.解析CASS扩展属性数据[J].测绘与空间地理信息.2009年第6期.
[5]周炤,刘海砚,赵鹏.基于ObjectARX技术的AutoCAD数据格式转换[J].地理空间信息,2006,4(6):30-32.
[6]李瑞霞,杨敏,邓喀中.基于FME的GIS到CAD数据无损转换[J].测绘通报.2009第5期.
[7]肖起年.基于DWGDirectX读写DWG图纸文件的实现[J].计算机系统应用.2009第3期.