ogr多图层创建 python实例代码

新建图层是通过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()

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值