CAD转GIS工具路径2——python/arcpy读取dwg用地边界的polyline生成面

上一篇说的python/arcpy读取dxf获取用地hatch生成面

问题在于有弧线段的hatch,弧线段信息是由圆心、半径、两个角度一起组成的,而GIS中没有找到arcpy生成弧线段的方法,所以路径中断了。
然后就是方法2,
在这里插入图片描述

读取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里的格式如下
在这里插入图片描述

附带说下

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

2曲线的表达问题

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

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的其他属性
在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

规划酱

谢谢鼓励!一起自动化!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值