作者:朱慧卿 单位:中国石油天然气管道工程有限公司 一、摘要利用FME软件编写Shapefile数据转换为Dwg数据的工具。通常ArcMap中的点、线、面等shp数据各自分布在类型相同的数据图层中,而AutoCAD中的dwg数据,每个图层有可能包含许多种类型的数据。此工具将shp数据中点、线、面等空间数据转换为dwg中的非空间数据,并将shp属性表里的Name信息在dwg中以文本注记的形式显示。根据管道勘察测量的专业性,我们对AutoCAD进行二次开发,重新定义更加适用于管道勘察的线形和块儿实体等要素的属性,考虑专业的特殊性在数据输出时将利用FME中的转换器对这些固定的数据模板进行调用,使数据输出后更加利于我们使用。 二、问题背景在管道勘察的过程当中我们需要对管线周围的地形进行测量,以便于后期管道的布设。根据某项目的需求,我们把某天然气管道选线周边的地形数据以dwg的形式向分包商进行展示。但由于此范围内的地形数据我们当前只存储了shp格式数据,所以我们利用FME软件对shp数据进行了转换。 三、模板截图
四、技术路线1)Shapefile读模块(Add Reader) 在此处默认读模块参数设置,进行shp数据的写入。 2)暴露要素属性(AttributeExposer) 根据转换需求,在此处暴露我们需要用到的要素属性。在shp数据转换为dwg数据后拥有文字标注信息需求下,我们只需暴露fme_feature_type属性即可。 3)要素重投影(Reprojector) 根据项目需求,在此处设置原始数据的投影坐标系。 4)属性过滤(AttributeFilter) 为避免数据冗余,根据属性值将要素分流到不同地输出端口,过滤shp数据中的default, Empty, Missing, Null等无效数据。 5)按要素类型分类输出(FeatureTypeFilter) 项目中的shp数据只包含:点、线、面数据,转换器在进行设置时将shp数据的点、线、面要素分类输出,方便后续的操作。 6)用几何要素的中心点去替换几何要素(CenterPointReplacer) 针对shp数据中的面要素,如果我们想让shp数据属性字段里面的Name信息在dwg数据里以文本标注的形式显示,就需要运用转换器CenterPointReplacer,用几何要素的中心点去替换几何要素,再将替换后的点赋予坐标信息,最终确定标注位置。在对转换器进行参数设置时,如果我们想要生成一个面状要素的标注点,我们更趋向于将点的位置放于面状要素的中间位置,所以Mode选择Center Point of Bounding Box。 
7)坐标提取(CoordinateExtractor) 在属性表里添加坐标信息字段,以便于确定坐标点的位置。对于线要素来说,在对Coordinate Index进行参数设置时要考虑线的长度。而对于点和已经生成中心点的面要素来说直接把Coordinate Index设置为“0”即可,同时为X、Y坐标新建属性字段名称。 
8)将坐标附加到几何对象上(VertexCreator) 通过此转换器可以将我们在上一步生成的坐标附加到一个点上,这个点的位置即为放置文本标注的位置。 
9)将几何要素设置为文本(TextAdder) 用shp数据属性字段中的Name信息替换已经生成的标注位置点,最终在dwg数据中生成文本标注,同时可以根据需求设置文本大小等信息。 10)DWG数据输出准备(DWGStyler) 通过转换器,可以设置dwg数据输出的样式。通过添加模板文件,将块儿要素、线要素和面要素都设置为模板文件里面的样式。 11)DWG 写模块(TextAdder) 在对写出模块进行参数设置时,根据此项目的需求不对写出模块进行参数设置的修改,直接默认写出就可以。 五、转换前后数据对比截取原始shp数据与转换后的dwg数据进行对比: 1)原始shp数据 
2)转换后dwg数据 
本文转载来自CSDN作者:fmechina 版权归作者所有 原文链接:https://blog.csdn.net/fmechina/article/details/105532393
|