Python+OGR庫學習(一):讀取點向量檔案屬性值和座標,並儲存為TXT(一行一個要素值)
阿新 • • 發佈:2019-01-01
程式碼思路:
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
學習使用,如有意見,感謝指正