温州网站链接怎么做保定seo网络推广
编者语:文章发表于2007年,有一定的时效滞后。已经有很多Arcpy工具具备转换的功能,学习其转换思路是关键——体会如何发现问题、找到问题,进而学会分析问题、解决问题的能力……
申胜利,李华
来源:测绘通报2007年第2期
摘 要:
空间数据的交互共享成为GIS中比较受关注的问题。介绍如何通过ArcEngine 来实现ArcGIS与AutoCAD在不同的存储机制上图形数据交互共享的方法。
关 键 词:
ArcGIS; AutoCAD ; 数据转换
目前GIS行业处于蓬勃发展的时期,优秀的GIS软件产品也越加丰富。许多以前在CAD系统上的工作已经由GIS替代,也有些GIS图形数据需要在CAD系统中另存为他用,这种多种系统中的图形数据交互一直是许多基层应用的一道障碍。随着ESRI公司的地理信息系统软件ArcGIS在国内土地、地质、测绘、交通、城市等行业中应用的不断深入, AutoCAD与ArcGIS直接的图形信息交互也越来越多,虽然ArcGIS系统带有读入和导出DWG文件的功能,但限于两种系统的区别,通过DWG转换往往不尽如人意,丢失很多宝贵信息。怎样最广泛、最有效地实现这两种系统之间的数据共享是当前共同关注的问题。本文就ArcGIS与AutoCAD之间的数据转换进行了方法和实现方式的探讨。
一、图形数据转换存在的问题
虽然GIS软件都提供了与AutoCAD进行图形数据相互转换的功能,但大部分都没有很好地解决两种系统中图形数据的交换共享问题。
1.数据应用目的差别
目前,AutoCAD对矢量数据的管理都侧重于图面表示效果和输出效果,对数据与GIS的结合使用考虑很少,既没有考虑地物的属性、编码、分层,也没有考虑到数据的拓扑关系。随着GIS技术的发展,对图形数据的管理有了更高的要求,比如ArcGIS基于图形数据的应用分析以及图属关联管理越来越强大。由于应用目的的不同导致了同样的数据很难在两种系统中实现共享,这种基于软件底层机制的不同决定了ArcGIS 和AutoCAD两种系统直接共享属性信息存在一定的困难。
2.几何表示与空间要素的一致性
AutoCAD与ArcGIS在数据结构上存在较大的差异,这使得AutoCAD的图形数据不能很好地满足ArcGIS的要求,图形数据不能完整转换,更谈不上在ArcGIS系统中进一步应用了。比如AutoCAD中的外部参照和复杂的块就无法顺利通过DXF文件转换,即使是线类型实体也只能够转换空间信息,仍会丢失线型及其他一些参数。AutoCAD 表示一个路灯可以通过各种图形表示方法来制作,只要模样符合标准就不影响输出工作,但在ArcGIS系统中要求要对点进行符号化。因此,空间要素的几何表示和内容相一致性的要求给图形数据的重复利用带来很大困难。
二、AutoCAD与ArcGIS图形数据转换
ArcGIS提供了对AutoCAD的DXF文件双向转换的功能,但限于DXF文件在结构描述上的限制以及两种系统底层结构的区别,多数情况下都不能很好地转换。利用ArcEngine可以解决这一问题。ArcEngine是ArcGIS提供的一个软件开发包,该开发包是一个组件化的产品,它提供了若干组件( MapControl,PageLayoutControl, TOCControl等)和一个庞大的类库。利用ArcEngine可开发定制的GIS业务以及地图应用服务。ArcEngine 支持多种开发工具,例如. Net,Java,C++,Visual Studio等。
1.图元分析
ArcGIS中基本的图元要素分为点、线、面、注记四种类型。点:ArcGIS 中点的类型很丰富,只要在表示方式上以一个点确定其位置的要素都可以认为是点。线:线是多点组成的线类实体,包括两点线、多义线、曲线等很多种类。面:面在ArcGIS中就是指严格封闭的区域,包括带洞或者岛的区域。注记:注记则是文字组成的点的图形要素,包含文字的空间位置、字体旋转角度等注记信息。AutoCAD中基本的图元要素有块、线、文本。块:块是一组CAD图元构成的集合体。线:线是多点组成的线类实体,包括两点线、多义线、曲线等很多种类。AutoCAD 和ArcGIS图形元索分类的对应情况见表1。
2.转换过程设计
(1)建立转换关系
分析表1, 可以看出AutoCAD和ArcGIS图形数据的互相转换可以转化为两个系统中图库资源的对应。从大的方面来看可以把AutoCAD中的块或块参考和ArcGIS中线型库对应,AutoCAD中的线型和ArcGIS中的线型库对应,AutoCAD中的填充图案和线的组合可以和ArcGIS中的面对应,图库之间的纽带即为图元参数对应表。程序转换过程只需要按照对照表进行图元替换就可以。
(2)转换对照表
为了使转换过程更精确、灵活,能够最大限度保持图形原貌,需要设计更加细致的图元参数对照表,如表2所示。
3. AutoCAD到ArcGIS的转换实现
AutoCAD到ArcGIS的转换分为块图元、线图元和文本图元三种。
(1) CAD块图元的转换
根据点对照表,在ArcGIS建立点图层,添加对照表中的属性字段,然后导入对应的CAD图元信息。如把图元类别对应到点图层的Entity属性字段,CAD横向比例对应到SacleX属性字段。空间信息直接赋值过去。
(2) CAD线图元的转换
根据线对照表,在ArcGIS建立线图层,添加对照表中的属性字段,然后导入对应的CAD图元信息。如把线型号对应到线图层的Trickness属性字段,颜色对应到Color属性字段。
线图元的空间信息要根据不同的线类型进行不同的处理。
1.两点线:直接赋值首尾节点坐标。
2.弧:由于CAD中存取的是凸度值,而ArcGIS不能直接获取弧的凸度值,所以需要进行转换。凸度是这样定义的:凸度=(2* H/D),(H,D的定义如图1)。如果圆弧起点到终点为逆时针,凸度为正;如为顺时针.则为负数。ArcGIS能获取到弧段的起点和终点值以及ChordHeight值。按照凸度计算公式进行转换。
3.圆:圆其实是圆心重合的椭圆,下面的方程式用来定义一个椭圆弧。
p(u)=e+ acos (u)+ bsin (u)
当为第一轴选定端点且为第二轴选定距离后,变量a,b和c值即被决定。a的值为长轴长度1/2的负值,b的值为短轴长度1/2的负值,c为椭圆的圆心。
因为此方程式是一个矢量方程,且变量c具有.X和Y值,所以它应该写成如下形式:
p(u)=(Cx + acos (u))i+ (Cy+ asin (u))j
式中,Cx是点c的X值;Cy是点c的Y值;a为长轴长度的1/2;b为短轴长度的1/2;i和j表示X和Y方向上的单位矢量。
在AutoCAD中,一旦确定了轴的端点和椭圆弧的起点及终点,那么椭圆也就确定了。选定起始参数和结束参数后,这些参数值将被代入方程式来求得椭圆的实际的起点和终点。椭圆的其他部分将从起点到终点以逆时针方向绘制。输入的u值被转换成度数以求得cos (u)和sin (u)。
4.多义线:多义线由两点线和弧混合组合,所以在导入时需要把多义线的每个线段拆开进行单独的处理。
(3) CAD文本图元的转换
根据注记对照表,在ArcGIS建立注记图层,添加对照表中的属性字段,然后导入对应的CAD图元信息。如把文本内容对应到注记图层的Text属性字段,颜色对应到Color属性字段。
以转换点对象为例,在VB里面的实现的代码
如下:
Set pDestFClass = pWS.OpenFeatureClass(" PT")
//连接点图层
Set pDestFCursor =pDestFClass. Inen(Tue) //创
建对象游标
Set pDestFPufer =pDstFClass. CreateFeatureBuffer
//创建插入缓存
pl2. PutCoords 12345, 67890//给点对象赋值
Set plstFBufer. Shape=p[2//创建点对象
pDestFBuffer.Value("Entity") = "Insert”1/写图元
类别属性
plDestFBuffer.Vale("Color)=255 //写颜色属性
… //其他属性
pDestFCursor. InsertFeaturepDestFBuffer //
完成该条记录插入
(4) ArcGIS 到AutoCAD的转换实现
根据图层所存储的属性信息,一一对应到DXF文件的定义中去。CAD中点、线图元在DXF中的组码如图2。.
具体的转换方法如下:
1.把CAD中所用到的块定义、线型、颜色、图层定义等写入到文件头,然后在文件中写入实体(即“ENTITIES")部分数据。
2.输出时,以“Layer"字段值写CAD图层名,保证输出后的图层名与原始CAD数据的图层名相同。
3.“点对象”在输出CAD数据时,如果ArcGIS .线图层中的“Text”字段值不为空,表明该对象为“块”,写CAD时,以属性中的X,Y为定位点坐标,在相应的位置写入块名,这样输出CAD时,在CAD中就是以块显示。.
4.“线对象”在输出CAD数据时,如果ArcGIS线图层中的“Text”字段值不为空,表明该对象为“块",则把该对象过滤掉,不写回CAD中。否则,按照不同线对象类型分别进行处理。
(1)两点线:写入两个端点的X, Y坐标。
(2)圆:写入圆心X,Y坐标和圆的半径。
(3)弧:写入圆心X, Y坐标和圆的半径,以及起始角和终止角,弧线方向。
(4)多义线:拆分成多个线段对象,分别写入CAD。
5.“注记”在输出CAD时,将ArcGIS中的注记点层按“Layer”字段值分别输出到对应的CAD图层中。
以写入点对象为例,在VB里面实现的代码如下:
file. WriteLine"0" + newline + "POINT" //声明一个点对象
nHandle = nHandle+ 1 //递增句柄号
file. WriteLine"5" + newline + Hex $ ( nHandle)//写入句柄号
file. WriteLine"100" + newline + " AeDbPoint"//写入CAD图元标记
Set pl = pSvrFeature. Shape//获取 ArcGIS点对象
file. WriteLine"10" + newline+pt.x //写入 X坐标
file. W riteLine"20"+ newline+pt.y //写入 Y坐标
三、结束语
该转换工作已在实际工作中进行了大量数据的转换,总体体现了以下几点特性:
1.转换过程实现以提高效率为目的,最大限度实现AutoCAD与ArcGIS图形数据共享,不再进行传统的矢量化和大量修改图形参数作业。
2.转换过程最大化地实现图形原样转换,保证转换后最小的编辑工作量。随着GIS技术的不断发展,各种GIS平台的数据转换也会越来越频繁,数据之间的共享将不再是应用中的阻碍。
参考文献:
[1] 吴信才.地理信息系统原理与方法[ M].北京:电子工业出版社,2002.[2] 徐源,等.AutoCAD2000二次开发[ M].北京:人民交通出版社,2001.[3]全国地理信息标准化技术委员会.地理信息国家标准手册[ M].北京:中国标准化出版社,2002.最后,小编提醒,由于微信修改了推送规则,没有经常留言或点“在看”的,会慢慢的收不到推送!如果你还想每天看到我们的推送,请将ArcGis爱学习加为星标或每次看完后点击一下页面下端的“赞”“在看”,拜托了! ▼ 往期精彩回顾▼ArcGis汇总2020(1玩转ArcGis、2文献阅览、3ESRI视频学习、4公号问题汇总、5学而思)
2、ArcGis中的地理坐标系和投影坐标系?
3、如何制作封面图?(鹰眼图制作)
4、范围指示器和格网示例