CAD文件导入arcmap后,有5个子文件
转换思路:
1、建立数据库
2、将CAD文件导入数据库
3、要素类转SHP
4、MultiPatch一般不能完全绘制,需要修复几何,删除空白要素
5、批量定义投影
6、将SHP文件显示到数据视图窗口
7、显示Annotation图层的标注
8、将脚本导入工具箱
arcpy可以在arcmap界面自带的python窗口,或者下载arcmap同时下载的idle中写代码。
使用的是arcmap10.2和python2.7版本
在引用arcpy和定义工作空间后,1、建立数据库:
# Import system modules
import os
import sys
import arcpy
# 设置工作空间,路径尽量使用\,或者//,使用\的路径最后一个\会不识别
env.workspace = r"C:\..."
# 设置文件地理数据库输出路径,输出名
out_folder_path = r"C:\..."
out_name = "myfgdb.gdb"
# Execute CreateFileGDB
arcpy.CreateFileGDB_management(out_folder_path, out_name)
2、CAD导入数据库
# Name: CADtoGeodatabase.py
# Description: Create a feature dataset
# Import system modules
import arcpy
# Set workspace
arcpy.env.workspace = "C:/..."
# dwg集合的路径
input_cad_dataset = "C:/.../Data.DWG"
#输入要用作注记参考的比例。注记中的所有符号及文本的大小都会参考此处设置的参考比例。默认为1000
reference_scale = "1000"
#可选的空间参考,按需求可以改变,若不确定,则删除下面一行,在功能中的空间参考有默认值
spatial_reference = "NAD_1983_StatePlane_California_VI_FIPS_0406_Feet"
# 执行前提是存在数据库,空间参考一般默认,可以改,不能删,不能“”,{}代替
arcpy.CADToGeodatabase_conversion(input_cad_dataset, 数据库的路径,
数据库的名, reference_scale)
3、要素类转SHP
#inFeatures是输入要素类或要素图层的列表,是集合,批量操作
#outLocation是自定义输出SHP的文件夹路径
arcpy.FeatureClassToShapefile_conversion(inFeatures, outLocation)
4、修复几何
arcpy.RepairGeometry_management("需要修复的图层的路径")
5、批量定义投影
import arcpy
#将进行处理的图层路径
infc = r"C:\...\Data.shp"
#投影的坐标系,可以直接引用坐标系名称,或者自定义坐标系
sr = arcpy.SpatialReference("NAD 1983 UTM Zone 11N")
#自定义的坐标系,选其一,详细参数可以百度,无非是参考椭球,投影方法,中央子午线,是否偏移
sr = "PROJCS['坐标系名称',GEOGCS['坐标系名称',DATUM['D_China_2000',SPHEROID['CGCS2000',6378137.0,298.257222101]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]],PROJECTION['Gauss_Kruger'],PARAMETER['False_Easting',500000.0],PARAMETER['False_Northing',0.0],PARAMETER['Central_Meridian',117.0],PARAMETER['Scale_Factor',1.0],PARAMETER['Latitude_Of_Origin',0.0],UNIT['Meter',1.0]]"
#实现批量操作,加一个for
arcpy.DefineProjection_management(infc, sr)
6、将SHP文件显示到数据视图窗口
import arcpy
#输入mxd文件路径,这里绝对路径容易出错,建议打开arcmap后,使用"current",大小写都行
mxd = arcpy.mapping.MapDocument(r"C:\...\Data.mxd")
#df是数据框,打开arcmap(汉化)默认是"图层",[0]是第一个此命名的图层
df = arcpy.mapping.ListDataFrames(mxd, "图层")[0]
#添加的图层路径
addLayer = arcpy.mapping.Layer(r"C:\...\Data.lyr")
#AddLayer是唯一一个能够向空数据框添加图层的函数
#第三个参数是AUTO_ARRANGE —自动放置图层、BOTTOM —在数据框底部放置楼层、TOP —在数据框顶部放置图层。默认为AUTO_ARRANGE,是根据点线面放置
arcpy.mapping.AddLayer(df, addLayer, "BOTTOM")
7、显示Annotation图层的标注
图层有这个属性,只需要选中图层,然后=True:
import arcpy.mapping as mapping
#mxd和df为地图和数据框路径的变量,选择图层为以A开头的图层,此为图层集
layers = mapping.ListLayers(mxd,'A*',df)
#for循环选择图层集中一层,标注bool打开true
ly.showLabels=True
8、将脚本导入工具箱
注:脚本应为py文件,在脚本中的路径变量改为arcpy.GetParameterAsText(0),才能在arcmap里成功生成窗口,自定义参数:
脚本中设置了几个arcpy.GetParameterAsText(0),可以在这设置几个变量名称和类型
最后,设置为通用功能:如
如果有任何问题或者更好的解决方法,欢迎讨论