1. 程式人生 > >Python+OGR庫學習(一):讀取點向量檔案屬性值和座標,並儲存為TXT(一行一個要素值)

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
在這裡插入圖片描述
學習使用,如有意見,感謝指正