新建图层是通过self.feature.SetField("Layer",layername)来进行设置,整个类具体代码如下:
觉得有用的点个赞哦!!
# -*- coding: UTF-8 -*-
from osgeo import ogr
from osgeo import gdal
import os
class Txt2Dxf:
def __init__(self, txtpath, dxfpath):
self.txtpath = txtpath
self.dxfpath = dxfpath
self.txtdata=[]
def initTxt(self):
with open (self.txtpath) as txtData:
lines = txtData.readlines ()
for line in lines:
lineData = line.strip ().split (',') # 去除空白和逗号“,”
self.txtdata.append(lineData)
def initDxf(self):
ogr.RegisterAll ()
self.driver = ogr.GetDriverByName ('DXF')
gdal.SetConfigOption ("GDAL_FILENAME_IS_UTF8", "YES") # 支持中文
gdal.SetConfigOption ("DXF_ENCODING", "UTF-8")
# 读取dxf文件,获取数据源ds
# os.chdir ("r"+self.dxfpath)
if os.path.exists (self.dxfpath):
self.driver.DeleteDataSource (self.dxfpath)
self.ds = self.driver.CreateDataSource (self.dxfpath)
if self.ds == None:
print ('创建文件失败!')
# 创建图层Test
self.layer = self.ds.CreateLayer ("Layer", None, ogr.wkbPolygon)
# 创建要素
self.feature = ogr.Feature (self.layer.GetLayerDefn ())
def txtDrawDxf(self):
poly=[]
layername=""
contourLine = ogr.Geometry (ogr.wkbLineString)
for i in range(len(self.txtdata)):
linedata=self.txtdata[i][0]
splitdata=linedata.split ('\t')#用tab分割数据
if splitdata[0]=="路堤":
layername=splitdata[1]
self.feature.SetField("Layer",layername)
continue
#碰到空格或者文件结尾则画线
if len(splitdata[0])==0 or i==len(self.txtdata):
# 写入几何图形
self.feature.SetGeometry (contourLine)
# 要素写入图层
self.layer.CreateFeature (self.feature)
#self.feature.Destroy ()
#self.Close()
print(contourLine)
contourLine.Empty()
continue
if splitdata[0].isdigit()!=True and len(splitdata)==3 :
contourLine.AddPoint (float(splitdata[0]),float(splitdata[1]),float(splitdata[2]))
# print (i,splitdata)
continue
print (contourLine)
# 写入几何图形
self.feature.SetGeometry (contourLine)
# 要素写入图层
self.layer.CreateFeature (self.feature)
def Close(self):
# 销毁资源
self.feature.Destroy ()
self.ds.Destroy ()
print("DXF Closed!!")
#实例化示例
t2d = Txt2Dxf("E:\\PythonCode\\DataTransform\\userdata\\路堤工点表.txt", "E:\\PythonCode\\DataTransform\\userdata\\test1.dxf")
t2d.initTxt()
t2d.initDxf()
t2d.txtDrawDxf()
t2d.Close()