通过python把DWG文件转DXF文件并转为WKB格式

DWG文件转DXF

dwg文件转dxf文件主要用到的是ezdxf模块(ezdxf-addons-odafc配置),该模块支持R2018以下所有dwg格式文件的转换以及读取,非常好用。
下面是odafc读取和转换dwg文件的代码:

from ezdxf.addons import odafc
# 读取dwg文件
doc = odafc.readfile('**.dwg' # dwg文件名或者路径)

# 转换dwg文件。replace=true允许覆盖已有文件。
# 输出文件可用空字符代替'',转换后文件会默认输出到输入文件所在目录,与输入文件同名。
 odafc.convert('input.dwg', 'out.dxf', version='R2000', replace=True)

未知版本的dwg文件转为dxf后,就可利用ogr模块对dxf文件进行操作,通过geometry的ExportToWkb或者ExportToWkt把几何要素转为对应的字符串格式。完整代码如下:

from osgeo import ogr
import sys
from ezdxf.addons import odafc


class file2geo:
    def __init__(self, filepath, layername):
        self.filepath = filepath
        self.layername = layername

    def dwg2wkb(self):
        # dwg文件转换为2000格式的dxf文件, 因为ogr不支持读取高版本dwg
        odafc.convert(self.filepath, 'out.dxf', version='R2000', replace=True)  
        geometry_list = []
        # 图形类型列表
        geomtype_list = ['AcDbEntity:AcDbPolyline', 'AcDbEntity:AcDb3dPolyline', 'AcDbEntity:AcDbCircle:AcDbArc',
                         'AcDbEntity:AcDbLine', 'AcDbEntity:AcDb2dPolyline']
        driver = ogr.GetDriverByName('DXF')
        datasource = driver.Open('out.dxf')

        if datasource is None:
            sys.exit('无法打开文件{0}.'.format(self.filepath))
        layer = datasource.GetLayer()  # dxf文件只有一个图层
        feature = layer.GetFeature(0)
        for key in feature.keys():
            print(key, end='         ')
        print()
        for feature in layer:
            # 根据图层名和图形类型过滤feature(图层在dxf文件中只是一个字段)
            if feature.GetField('Layer') == self.layername and feature.GetField('SubClasses') in geomtype_list:
                for key in feature.keys():
                    print(f'{feature.GetField(key)}', end='         ')
                print()
                geom = feature.geometry()
                geometry_list.append(geom.ExportToWkb())  # 转为wkb二进制文件,如果用WKT则转为文本文件
        return geometry_list
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值