python ogr_Python+OGR库学习(三):将含有字段值的TXT文件写入shpfile

代码任务

已知有一个TXT文件,每行格式:country_name:X1 Y1,X2 Y2,…Xn,Yn,其中,Xn,Yn指折点坐标,把它导出为shp文件,TXT如下:

代码思路

1、导入相关库包,切换到当前文件夹

2、注册驱动,创建矢量文件,获取图层

3、创建输出文件,并获取图层(没有属性定义)

4、定义输出图层字段属性:

(1)TXT文件中只能得到一个字段,命名为name,设置属性

(2)打开TXT,读取遍历每一行:

创建ring类型geom,分割每行内容为两部分(name和x,y值),将这行所有x,y值添加为ring坐标点

创建polygon,将含有坐标的ring添加进去构成一个polygon

创建这一行对应的一个要素,并写入name字段值

要素写入图层

清除此循环中ring、polygon及feature缓存,便于下次循环

(3)清除DataSource并关闭TXT文件

关键点

每行创建一个要素

polygon创建思路:ring-addpoint to ring -polygon–addring to polygon

split分割字段和坐标点

代码

#导入相关库包

import osgeo,gdal,os,ogr,osr

#创建输出shp

driver = ogr.GetDriverByName('ESRI Shapefile')

os.chdir(r'F:\PQ\python_exercise\7weeks数据\ospy_data2\ospy_data2')

if os.path.exists('country.shp'):

driver.DeleteDataSource('country.shp')

outds = driver.CreateDataSource('country.shp')

if outds == None:

print('创建文件失败!')

#创建图层

dst_osr = osr.SpatialReference()

dst_osr.ImportFromEPSG(4326)

outlayer = outds.CreateLayer('country',dst_osr,geom_type = ogr.wkbPolygon)

#设置字段属性

fieldDefn = ogr.FieldDefn('name',ogr.OFTString)

fieldDefn.SetWidth(50)

#图层创建属性

outlayer.CreateField(fieldDefn)

#读取要素统一属性

featuredefn = outlayer.GetLayerDefn()

#读取TXT

txtfile = open('ut_counties.txt','r')

#print(txtfile)

#遍历每一行,对每一行创建一个要素,创建polygon对象,写入对象及属性

for line in txtfile:

#print(line)

#创建polygon对象的ring

ring = ogr.Geometry(ogr.wkbLinearRing)

#获取TXT中的点坐标,用于ring的坐标点

tmp = line.split(':')

name = tmp[0]

coords = tmp[1]

coordslist = coords.split(',')#得到坐标点对

print(coordslist)

for coord in coordslist:

xy = coord.split()#获取坐标点

x = float(xy[0])

y = float(xy[1])

#给ring添加点坐标

ring.AddPoint(x,y)

#创建polygon对象

polygon = ogr.Geometry(ogr.wkbPolygon)

polygon.AddGeometry(ring)

#创建要素(使用要素统一属性),写入几何图形,字段属性

feature = ogr.Feature(featuredefn)

feature.SetGeometry(polygon)

feature.SetField('name',name)

#要素写入图层

outlayer.CreateFeature(feature)

#每次写入完,销毁ring,polygon和feature

ring.Destroy()

polygon.Destroy()

feature.Destroy()

#TXT文件关闭和DataSource清除

txtfile.close()

outds.Destroy()

结果

学习使用,如有意见,感谢指正*

转载自:https://blog.csdn.net/weixin_42924891/article/details/85333559

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值