封面图片来源: https://www. giscourse.com/
最近在做导出要素类到 CAD 文件遇到了 3 个问题:
(1) 如何让要素导过去之后都放在相关的图层;
(2)如何让要素导过去之后有符号;
(3)怎么实现要素导过去之后有文字标注;
这些问题在
https://desktop.arcgis.com/zh-cn/arcmap/10.4/manage-data/cad/exporting-features-to-specific-cad-layers.htm
有教程。但是操作起来还是会遇到各种问题。
本文结合实际操作经历编写,并给出相应的 ArcPy 代码。
本文涉及软件环境:ArcGIS 10.4 / AutoCAD 2016 。导出dwg文件版本为 2007 。
一、如何让要素导过去之后都放在相关的图层
默认情况下,要素类导入CAD之后,会以要素类名字为图层的名称创建新图层,要素类中的所有要素将放入新图层中。效果如下图。
![f53833cdd489cc52d170c2e973a03455.png](https://img-blog.csdnimg.cn/img_convert/f53833cdd489cc52d170c2e973a03455.png)
![f7cbf290b6aa6f5b078bd027c1b2c759.png](https://img-blog.csdnimg.cn/img_convert/f7cbf290b6aa6f5b078bd027c1b2c759.png)
![d4a84ec536a62c449977a73dc7d5bf38.png](https://img-blog.csdnimg.cn/img_convert/d4a84ec536a62c449977a73dc7d5bf38.png)
ArcGIS 要素转CAD工具支持通过添加相关的字段值实现将要素导入CAD的不同图层。操作步骤是:
(1)给要导出的要素类添加 Layer 字段(数据类型:文本,长度:50);
(3)给 Layer 字段赋值,这个值值将作为导入 CAD 之后的图层名;
通过设置不同的 Layer 字段值,要素将被放到不同的图层。
![121ed44743d76e0f5e6424c58a4359ff.png](https://img-blog.csdnimg.cn/img_convert/121ed44743d76e0f5e6424c58a4359ff.png)
![1f17207d5a2a425753b37ce2382badb7.png](https://img-blog.csdnimg.cn/img_convert/1f17207d5a2a425753b37ce2382badb7.png)
ArcPy 代码
# feature to cad: set layer name
还可以进一步设置图层颜色、图层状态、线宽、线型等。
![74c9429b8828926f11595a53cd69e087.png](https://img-blog.csdnimg.cn/img_convert/74c9429b8828926f11595a53cd69e087.png)
Reserved CAD fields for AutoCAD DWG/DXF formats
二、如何让要素导入CAD之后有符号
(1)给导入CAD的要素类添加字段。
添加 RefName 字段(数据类型:文本,长度:50),这里设置字段值为 ref1;
添加 Entity 字段(数据类型:文本,长度:50),这里设置字段值为 Insert;测试发现这里使用 CADType字段代替 Entity 字段也可以。
![ae60f392156c4cb66cbaf05c2bc44eb2.png](https://img-blog.csdnimg.cn/img_convert/ae60f392156c4cb66cbaf05c2bc44eb2.png)
(2)制作CAD种子文件
a. 绘制一个图形作为符号,如三角形;
![375fed5490e4c385aa66e06543299b07.png](https://img-blog.csdnimg.cn/img_convert/375fed5490e4c385aa66e06543299b07.png)
b. 创建一个块;命令 block。
设置名称为 ref1 (和ArcGIS属性表中 RefName 的值一致)。
设置基点,这里拾取三角形的中心。
设置对象,这里选择三角形。
![5caee390564459e5d66515159ff7d59b.png](https://img-blog.csdnimg.cn/img_convert/5caee390564459e5d66515159ff7d59b.png)
![1887fca15066a61d0c0cc9354edc83d7.png](https://img-blog.csdnimg.cn/img_convert/1887fca15066a61d0c0cc9354edc83d7.png)
c. 制作好块后保存文件为 seed.dwg,文件类型为:AutoCAD 2007/LT2007图形(*。dwg)。
![3de38d414755a2a551af2b0f605eaea3.png](https://img-blog.csdnimg.cn/img_convert/3de38d414755a2a551af2b0f605eaea3.png)
(3)执行要素转CAD
![3afd0a1eb75e294b173e3f09fb1b7a23.png](https://img-blog.csdnimg.cn/img_convert/3afd0a1eb75e294b173e3f09fb1b7a23.png)
![f8ab863bf1ccee7cb8276bc64d445f15.png](https://img-blog.csdnimg.cn/img_convert/f8ab863bf1ccee7cb8276bc64d445f15.png)
因为符号太大,显示效果并不好。可以添加 ScaleX 、 ScaleY 字段来调整符号大小。
![9ef6829670d5145df88f448b9e8e3b7e.png](https://img-blog.csdnimg.cn/img_convert/9ef6829670d5145df88f448b9e8e3b7e.png)
ArcPy 代码
# feature to cad: set symbol
feature = "D:/study/arcgis/ExportCAD/ExportCADdemo1.shp"
output_file = "D:/study/arcgis/ExportCAD/resultsym.dwg"
seed_file = "D:/study/arcgis/ExportCAD/seed.dwg"
arcpy.AddField_management(
feature,
"Entity",
"TEXT"
)
arcpy.CalculateField_management(
feature,
"Entity",
"'Insert'",
"PYTHON"
)
arcpy.AddField_management(
feature,
"RefName",
"TEXT"
)
arcpy.CalculateField_management(
f["feature"],
"RefName",
"'ref1'",
"PYTHON"
)
arcpy.AddField_management(
feature,
"ScaleX",
"DOUBLE"
)
arcpy.CalculateField_management(
feature,
"ScaleX",
0.00002,
"PYTHON"
)
arcpy.AddField_management(
feature,
"ScaleY",
"DOUBLE"
)
arcpy.CalculateField_management(
feature,
"ScaleY",
0.00002,
"PYTHON"
)
arcpy.ExportCAD_conversion(feature,
"DWG_R2007", output_file,
"Ignore_Filenames_in_Tables",
"OVERWRITE_EXISTING_FILES", seed_file)
还可以将要素的属性也导入导CAD里面,可以参考
准备种子文件 (注意链接文章中【定义属性】处的指令应该是 ATTDEF 而不是 ATTEDIT)
三、如何实现要素导入CAD之后有文字标注
(1)将线、面要素类转为点要素类;
(2)添加 CADType字段(数据类型:文本,长度:50),设置字段值为 TEXT;
(3)添加 TxtValue字段(数据类型:文本,长度:50),设置字段值为想显示的文本标注值(可利用字段计算器计算);
![11c41c25531d35bbcfb2ccc9890f6d40.png](https://img-blog.csdnimg.cn/img_convert/11c41c25531d35bbcfb2ccc9890f6d40.png)
(4)执行要素转CAD操作。
![6ca783f208957cafcbe822eed1395904.png](https://img-blog.csdnimg.cn/img_convert/6ca783f208957cafcbe822eed1395904.png)
如果中文文字显示为问号。可以在菜单栏单击【格式】-> 【文字样式】(或者使用 style 命令),设置字体。
![2cb43d9fd4cd9687d1cfb1437f9cec81.png](https://img-blog.csdnimg.cn/img_convert/2cb43d9fd4cd9687d1cfb1437f9cec81.png)
ArcPy 代码
# feature to cad: export att as text label
feature = "D:/study/arcgis/ExportCAD/ExportCADdemo1.shp"
output_file = "D:/study/arcgis/ExportCAD/resultxt.dwg"
arcpy.AddField_management(
feature,
"CADType",
"TEXT"
)
arcpy.CalculateField_management(
feature,
"CADType",
"'TEXT'",
"PYTHON"
)
arcpy.AddField_management(
feature,
"TxtValue",
"TEXT"
)
arcpy.CalculateField_management(
feature,
"TxtValue",
"'文本标注'",
"PYTHON"
)
arcpy.ExportCAD_conversion(feature, "DWG_R2007", output_file)
参考资料
【1】https://desktop.arcgis.com/zh-cn/arcmap/10.5/manage-data/cad/exporting-features-to-specific-cad-layers.htm
【2】https://desktop.arcgis.com/en/arcmap/10.4/manage-data/cad/reserved-cad-fields-for-dwg-and-dxf-files.htm
【3】https://zhidao.baidu.com/question/531449005.html