问题在于有弧线段的hatch,弧线段信息是由圆心、半径、两个角度一起组成的,而GIS中没有找到arcpy生成弧线段的方法,所以路径中断了。

然后就是方法2,

python怎么读取雷达numpy文件_数据

读取polyline信息在GIS生成面,

CAD得预先处理一下,把所有的填充面生成一个边界。

有同学会说生成闭合边界之后直接将polygon拉到GIS里就是面了,
对的,只是GIS就是会存在某些读不出来的polygon,所以这里选择用polyline生成面,不管闭合没有,即使开口pl线均可以生成面。

1读取dwg的polyline

dwg文件在GIS的python2.7中是无法直接读取的,需要通过arcpy读取
采用arcpy的da.SearchCursor游标的方式读取折点坐标
代码如下:

import arcpy
def read_cad_pl(cadfile):
    cadfile += '\\Polyline'
    # 获取所有线    
    datas = []
    with arcpy.da.SearchCursor(cadfile,['SHAPE@JSON','Layer','Color','Linetype','Elevation','lineWt']) as cursor:
        for row in cursor:        
            datas.append(list(row))
            datas[-1][0] = eval(datas[-1][0])['paths'][0]        
    		#第一个就是'SHAPE@JSON'形状数据,字符串格式,eval()转成字典,获取里面的坐标点
    		datas.append([eval(row[0])['paths'][0],row[1],row[2],row[3],row[4],row[5]])
    return datas

row里的格式如下

python怎么读取雷达numpy文件_图层_02

附带说下

pl线从cad到GIS就只带了这几个信息,[‘Layer’,‘Color’,‘Linetype’,‘Elevation’,‘lineWt’]
layer是图层信息,通常就是用地类型
color是CAD色号,哪怕是RGB的颜色,出来也是cad色号,坑爹的
然后还有三个字段可以携带某些信息从cad到GIS里,可以自行定义

2曲线的表达问题

画了一根曲线,这里读取一下的坐标,出现了28个折点,难道GIS储存曲线是靠折线?

python怎么读取雷达numpy文件_数据_03

3创建面

看代码

#判断路径
def out_path(save_path,newname):    
        if save_path[-3:] == u'gdb' or save_path[-3:] == u'mdb':
            return '%s\\%s'%(save_path,newname)
        else:
            return '%s\\%s.shp'%(save_path,newname) 
#创建空的面文件
def create_polygon(save_path,save_name):
    #创建有坐标系的面有两种方式
    #读图层坐标系
    #cr= arcpy.Describe(layername).spatialReference
    #直接指定如 CGCS2000_3_Degree_GK_Zone_40 WKID为 4528
    #cr = arcpy.SpatialReference(4528)  
    #有坐标信息的
    #arcpy.CreateFeatureclass_management (save_path, save_name,"POLYGON", "", "","", cr ) 
    arcpy.CreateFeatureclass_management (save_path, save_name,"POLYGON") #无坐标信息的面
    #添加字段
    fields=[["Layer","TEXT"],["Color","TEXT"],["Linetype","TEXT"],["Elevation","DOUBLE"],["LineWt","SHORT"],["RefName","TEXT"]]
    for name,f_type in fields:
        arcpy.AddField_management(save_file, name, f_type)#添加字段

cadfile = u'xx\\xx\\xx.dwg'
save_path = u'xx\\xx\\xx.gdb'
save_name = u'name'
#保存路径
save_file = out_path(save_path,save_name)
#读取CAD数据
datas = read_cad_pl(cadfile)
#创建面图层
create_polygon(save_path,save_name)

#坐标列表转换成面几何数据
for i in range(len(datas)):
    datas[i][0] = arcpy.Polygon(arcpy.Array([arcpy.Point(*coords) for coords in datas[i][0]]))

#用游标给图层添加数据,比新建面文件再添加数据方便
with arcpy.da.InsertCursor(save_file, ['SHAPE@','Layer','Color','Linetype','Elevation','lineWt','RefName']) as cursor:
    for row in datas:
        cursor.insertRow(row)

曲线面看着圆滑其实是很多个折线组成

属性表中添加了pl的其他属性

python怎么读取雷达numpy文件_字段_04