Wechat: yu389741| Email: gisdqy@163.com

Shop:https://www.giserdqy.com/shop

Python+OGR库学习(一):读取点矢量文件属性值和坐标,并保存为TXT(一行一个要素值)



代码思路:

1、导入相关库包,切换到当前文件夹
2、注册驱动,打开点矢量文件,获取图层
3、打开待写入TXT文件
4、遍历要素:
(1)获取当前要素‘ID’和‘cover’字段属性
(2)获取当前点要素对应几何对象和其坐标值X,Y
(3)将ID、cover、X、Y写入TXT文件
(4)清除当前feature缓存并获取下一要素
5、清除DataSource并关闭TXT文件

关键点:遍历要素,对每一个要素进行读取同时写入TXT

代码:

#!/usr/bin/env python3
#-*- coding:utf-8 -*-

try:
    from osgeo import ogr
except ImportError:
    import ogr
import os,sys
#切换路径
os.chdir(r'F:\Python+gdal\7weeks数据\7weeks数据\ospy_data1\ospy_data1')
#注册驱动,打开文件和图层
driver = ogr.GetDriverByName("ESRI Shapefile")
ds = ogr.Open('sites.shp',0)#以只读方式打开矢量文件
if ds ==None:
    print("打开文件失败!")
    sys.exit(1)
layer = ds.GetLayer()
#为避免不能提前知道shp属性字段,这里读取属性表所有字段
featuredefn = layer.GetLayerDefn()#获取图层属性表定义
fieldcount = featuredefn.GetFieldCount()#获取属性表中字段数
for attr in range(fieldcount):
    fielddefn = featuredefn.GetFieldDefn(attr)
    print("%s:  %s"%(\
        fielddefn.GetNameRef(),\
        fielddefn.GetFieldTypeName(fielddefn.GetType())))
#layer = ds.GetLayerByIndex(0)
#打开TXT文件
outtxtfile = open('sites.txt','w')#以可写方式打开
#遍历所有要素,开始读取和写入
feature = layer.GetNextFeature()
while feature:
    #读取ID、cover字段值
    id = feature.GetFieldAsString('id')
    cover = feature.GetFieldAsString('cover')
    #获取要素几何
    geom = feature.GetGeometryRef()
    X = str(geom.GetX())#读取xy坐标,转为字符串,方便TXT写入
    Y = str(geom.GetY())
    #写入TXT文件
    outtxtfile.write(id +' ' + cover+' '+ X +' '+ Y +'\n')#这种写入方式如果第二次运行,会覆盖原TXT文件
    #清除缓存并获取下一个要素
    feature.Destroy()
    feature = layer.GetNextFeature()
#清除DataSource缓存并关闭TXT文件
ds.Destroy()
outtxtfile.close()

代码输出

1、字段属性
在这里插入图片描述
2、保存TXT
在这里插入图片描述
学习使用,如有意见,感谢指正

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