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()