日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2023/12/15 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的python ogr_Python+OGR库学习(三):将含有字段值的TXT文件写入shpfile的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。