欢迎来到天天文库
浏览记录
ID:5419644
大小:951.09 KB
页数:3页
时间:2017-12-10
《cad文件转arcgis要素》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、ArcGIS技术殿堂CAD文件转GIS要素文/彭剑西安代表处技术部AutoCAD软件作为工程建设的一个基础平台,有着非常广泛的应用,其图形要素的属性都以外挂数据库方式管理。为了使工程建设与地理信息进行对接,对CAD数据进行GIS转换是非常必要的。由于CAD的符号(以块的形式组织),完全不同于GIS的符号组织格式,这些都要求找到一套较好的方案进行批量无缝的转换。对于上述情况,ArcGIS提供了CAD转换到FeatureClass的几种实现方法,每种方法都有其适用的场景、优势。转换分析在此可将单个图层导出为shp
2、文件,分层要求可以通过设置图层的DefinitionQuery实现。CAD文件是由诸如颜色、线型、线宽、符号等静态图形特征组织后的图层集合,其图层并没有象GIS中的图层那样组织严密,实体/元素都包含在一个单一的文件中,属性数据的主要描述图层和注记。ArcGIS在读取CAD文件的时候,没有按照CAD的数据组织方式分层,而是根据要素类型分层。将所有同一类型的要素放置到一个图层上来。图层信息存储在layer字段。在CAD转换为FeatureClass的时候要素在转换过程中,除了要素CAD的数据转化为FeatureC
3、lass,还要将属于同一图层的要素打散,按照Layer字段值再次分层。在ArcGIS下有多种方式实现CAD转featurecclass。现有的功能包括:数据互操作扩展提供的exportdata功能,gp以及gp提供的示例。Exportdata在ArcMap中打开CAD文件,点击图层右键exportdata,弹出如下窗口:ArcGIS中国通讯39ArcGIS技术殿堂这种做法比较繁琐,分层导入每次都要去设置过滤属效,不需要太多的人工干预,就能实现数据转换的自动性,效率比较低下,全手工操作。建议在转换单个的小型化?
4、整个过程中,最重要的点在于按属性分层转化后的要CAD文件时使用这种方法。素类。按属性分层过程:MakeFeatureLayer做个循环批处理,读取layer字段的唯一值集合,然后循环makefeaturelayer再CopyFeatures导出为图层即可。ArcGIS提供了多GP工具种的实现途径,下面一一展开测试这些方法。ArcInfo提供了一个现成的CAD数据转换工具,位置在在AO的接口列表中,有三种方案可以实现读取唯一值ToolBox-Sample-CADtoFeatureClass。列表IDataSta
5、tistics接口,设置FeatureCursor后,可以通过其UniqueValues属性获取唯一值列表。通过IFeatureWorkSpace的CreateQueryDef方法,创建一个查询,设置SubFields属性为DistinctFieldName,执行后获取结果集ICursor,此结果集就是唯一值列表。最简单的办法就是通过FeatureCoass的Search方法获取所有值列表,循环抽取出唯一值列表。上述三个方法中,最慢的是3,这个方法就是硬读取,这个工具基本反映了导入的整个流程,使用三个工循环抽
6、取唯一值,需要将整个列表循环一遍。其次是1和具组合而成:SelectData、MakeFeatureLayer、Copy3。3是一个SQL查询,但当前的文件类型不支持此操作。Features。这个工具对比exportdata自动化程度更高了一最后使用IDataStatistics接口先试验了一下。在C#写了小工些,而且MakeFeatureLayer可以使用filter,在导入之前设具完成。置filterexpression,实现按图层分类的要素C#代码片段:先选择一个cad文件-设置输出的图层文件、提取数据
7、IDataStatisticspDataStatic=newDataStatisti-的类型、filterexpreesion,输出字段等属性,导出的是一个csClass();按Filterexpreesion分类的图层。pDataStatic.Field=FieldName;//要统计的字段pDataStatic.Cursor=pFeatureCursorasICursor;//输入System.Collections.IEnumeratorpEnumvar=pDataStatic.UniqueValues
8、;while(pEnumvar.MoveNext();){objectpObj=pEnumvar.Current;uvList.Add(pObj);//定义数组存储唯一值pNext=pEnumvar.MoveNext();这个工具基本上实现了转换功能,但是在按图层输出}上还是要手工输入,一次执行只能输出一个图层。在图层上面是在ArcEngine下的实现方法,对于对接口比较比较多的时候不适合使用此工具
此文档下载收益归作者所有