日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

GDAL 矢量屬性數據修改方式(python)

瀏覽:97日期:2022-08-02 17:48:46

Case:需要給一個現有的shp數據創建一個字段,并將屬性表中原有的一個文本類型的屬性轉換為整型后填入新創建的字段。

Problem:新字段創建成功,但是賦值操作無效,即無法成功給字段寫入值。

solution:對字段進行賦值后需要,重新寫入Feature,否則賦值無效,即layer0.SetFeature(feature)。

特別注意:在對數據進行讀寫操作,一定要以讀寫的方式打開,即Open(filePath,1),該方法的原型為Open(pszName,int bUpdate = false),并且具有返回值,參數說明如下:

名稱 說明 pszName 需要打開文件或數據源的路徑 bUpdate 是否需要更新數據集,默認為只讀,如果需要對數據進行讀寫操作,需要給此參數賦值1 返回值 返回數據集的指針,如果為NULL,則表明打開數據集失敗

以下將給出創建字段和獲取字段值、子段賦值的實例。

1.為矢量數據創建字段

# 添加字段 defn = layer.GetLayerDefn() fieldIndex=defn.GetFieldIndex(’SSSS’) if fieldIndex<0: # 添加字段 fieldDefn = ogr.FieldDefn(’SSSS’, ogr.OFTInteger) fieldDefn.SetPrecision(9) layer0.CreateField(fieldDefn,1); fieldIndex2 = defn.GetFieldIndex(’SSSS’) if fieldIndex2>0: print('字段創建成功:',fieldIndex)

2.獲取字段值及字段賦值

feature = layer.GetNextFeature() indexA = defn.GetFieldIndex(’code’) indexB = defn.GetFieldIndex(’SSSS’) oField = defn.GetFieldDefn(indexB) fieldName = oField.GetNameRef() while feature is not None: valueA= feature.GetFieldAsInteger(indexA) if valueA is None: feature.SetFieldNull(indexB) continue feature.SetField2(fieldName, valueA) layer0.SetFeature(feature) feature = layer0.GetNextFeature() #feature.Destroy() ds.Destroy()

補充知識:Python批量修改shapefile屬性表字段名(arcpy增刪字段)

嘗試了3種方法,時間緊迫屢敗屢戰,最后終于成功。

方法1和2是失敗記錄,希望有類似經歷成功的同學分享下經驗。

方法3是成功記錄,修改 = 新增 + 計算 +刪除相關字段,因為沒有刪除改名前字段需求,故刪除部分沒有另做。

方法1 —— 【將shapefile的dbf文件按csv文件讀寫】

——失敗,dbf中有空值及編碼問題

不同文件間通過改后綴簡單粗暴改寫,操作方法存在風險

過于依賴熟悉的領域,由于時間緊迫沒有試用dbf第三方庫 GDAL 矢量屬性數據修改方式(python)

#-*- coding: utf-8 -*- import osimport shutilimport csv #批量修改shp中dbf文件中的字段名#LANE_WIDTH改為LANEWIDTHL#LANE_WID_1改為LANEWIDTHR#ORIGIN_LIN改為ORG_LINKID roadDir = r'D:20Q100DATAModifyTitleROAD_TEST'modifyRoadDir = r'D:20Q100DATAModifyTitleModifiedLink'csvDir = r'D:20Q100DATAModifyTitleROAD_CSV'fileList = os.listdir(roadDir) num = 0for file in fileList: #新建修改后的城市文件夾 city = file.split('_')[0] os.mkdir(csvDir + city) os.mkdir(modifyRoadDir + city) shutil.copy(roadDir + file + '/RD_LINK.dbf', csvDir + city + '/RD_LINK.csv') print('正在生成{}新dbf文件......'.format(city)) dbfData = [] #讀取dbf數據為csv文件,讀存內容部分 csvFile = open(csvDir + city + '/RD_LINK.csv',encoding=’gbk’,errors=’ignore’) csvReader = csv.reader(csvFile) for row in csvReader: titleLine = [] if csvReader.line_num == 1: titleLine.append(row) continue #跳過第1行——列名 dbfData.append(row) #生成正確的字段名行 newTitleLine = [] modifyDic = {'LANE_WIDTH':'LANEWIDTHL','LANE_WID_1':'LANEWIDTHR','ORIGIN_LIN':'ORG_LINKID'} for fieldName in titleLine: if fieldName in modifyDic: newTitleLine.append(modifyDic[fieldName]) else: newTitleLine.append(fieldName) #寫入新dbf文件 newDBF = open(modifyRoadDir + city + '/RD_LINK.dbf',’w’) csvWriter = csv.writer(newDBF) csvWriter.writerow(newTitleLine) for row in dbfData: csvWriter.writerow(row) newDBF.close() print('{}新dbf文件已生成!'.format(city)) print('{}城市全部完成'.format(num))

方法2——直接使用修改字段名函數——失敗,arcpy模塊沒有AlterField_management方法

——失敗,但發現直接探尋官方方法還是比網搜野路子要節約時間

GDAL 矢量屬性數據修改方式(python)

使用Arcgis10.2 - Advanced浮動版,符合許可信息但Arcpy調用函數失敗,存疑。附官網AlterField函數用法介紹:

https://pro.arcgis.com/zh-cn/pro-app/tool-reference/data-management/alter-field-properties.htm

#-*- coding: utf-8 -*- import osimport arcpy #批量修改shp中dbf文件中的字段名#LANE_WIDTH改為LANEWIDTHL#LANE_WID_1改為LANEWIDTHR#ORIGIN_LIN改為ORG_LINKID roadDir = r'D:20Q100DATAModifyTitleROAD_TEST'fileList = os.listdir(roadDir) num = 0for file in fileList: #截取城市名 city = file.split('_')[0] print('正在修改{}的shp字段......'.format(city)) #修改前后字段名對照字典 modifyDic = {'LANE_WIDTH':'LANEWIDTHL','LANE_WID_1':'LANEWIDTHR','ORIGIN_LIN':'ORG_LINKID'} #讀取shp數據 dbfFile = roadDir + file + '/RD_LINK.shp' fieldList = arcpy.ListFields(dbfFile) for field in fieldList: #遍歷字段名 if field.name.upper() in modifyDic: #找到待修改字段名 arcpy.AlterField_management(dbfFile, field = field.name, new_field_name = modifyDic[field.name]) print('{}字段修改成功!'.format(city)) print('{}城市全部完成'.format(num))

方法3——添加改名后新字段(字段屬性與前保持一致)、計算改名后字段值 = 改名前字段值,成功!

#-*- coding: utf-8 -*- import osimport arcpy #批量修改shp屬性表中的字段名#LANE_WIDTH改為LANEWIDTHL#LANE_WID_1改為LANEWIDTHR#ORIGIN_LIN改為ORG_LINKID roadDir = r'D:20Q100DATAModifyTitleROAD_TEST'fileList = os.listdir(roadDir) num = 0for file in fileList: city = file.split('_')[0] #截取城市名 print('正在添加和計算{}的shp正確字段......'.format(city)) #修改前后字段名對照屬性字典 modifyDic = {'LANE_WIDTH':['LANEWIDTHL','1'],#錯誤字段名:[正確字段名,長度] 'LANE_WID_1':['LANEWIDTHR','1'], 'ORIGIN_LIN':['ORG_LINKID','10']} #讀取shp文件 shpFile = roadDir + file + '/RD_LINK.shp' for wrongfieldName in modifyDic: correctfieldName = modifyDic[wrongfieldName][0] field_length = modifyDic[wrongfieldName][1] # Process: 添加字段 arcpy.AddField_management(shpFile, correctfieldName, 'TEXT', '', '', field_length) # Process: 計算字段字段 arcpy.CalculateField_management(shpFile, correctfieldName, '['+wrongfieldName+']', 'VB', '') ## # Process: 添加字段——LANEWIDTHL## arcpy.AddField_management(shpFile, 'LANEWIDTHL', 'TEXT', '', '', '1')## # Process: 計算字段字段——LANEWIDTHL## arcpy.CalculateField_management(shpFile, 'LANEWIDTHL', '['++]', 'VB', '')#### # Process: 添加字段——LANEWIDTHR## arcpy.AddField_management(shpFile, 'LANEWIDTHR', 'TEXT', '', '', '1')## # Process: 計算字段字段——LANEWIDTHR## arcpy.CalculateField_management(shpFile, 'LANEWIDTHR', '[LANE_WID_1]', 'VB', '')#### # Process: 添加字段——ORG_LINKID## arcpy.AddField_management(shpFile, 'ORG_LINKID', 'TEXT', '', '', '10')## # Process: 計算字段字段——ORG_LINKID## arcpy.CalculateField_management(shpFile, 'ORG_LINKID', '[ORIGIN_LIN]', 'VB', '')#### # Process: 刪除字段## #arcpy.DeleteField_management(in_table, 'LANE_WIDTH') print('{}修改完成!請確認!'.format(city)) num += 1 print('{}城市全部完成!'.format(num))

以上這篇GDAL 矢量屬性數據修改方式(python)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲尤物在线| 欧美一级二级视频| 四虎精品一区二区免费| 久久精品卡一| 精品国产乱码久久久久久樱花| 亚洲精品观看| 99国产精品一区二区| 国产视频一区二区在线播放| 日韩不卡在线观看日韩不卡视频| 尹人成人综合网| 亚洲手机视频| 亚洲成人精品| 亚洲伦乱视频| 免费成人网www| 久久青草久久| 亚洲成av在线| 久久久国产精品一区二区中文| 91亚洲人成网污www| 电影亚洲精品噜噜在线观看| 国产精品福利在线观看播放| 精品视频国内| 国产精品大片免费观看| 日韩和欧美一区二区| 日韩精品免费观看视频| 综合亚洲视频| 日韩avvvv在线播放| 欧美日一区二区在线观看| 国产欧美视频在线| 精品三级久久久| 国产一区福利| 国产精品成人a在线观看| 国产99精品一区| 伊人久久亚洲美女图片| 香蕉久久夜色精品国产| 综合一区二区三区| 喷白浆一区二区| 日韩av一二三| 国产亚洲欧美日韩精品一区二区三区 | 国产精品高潮呻吟久久久久| 午夜亚洲福利| 久久婷婷国产| 午夜精品亚洲| 国产精品乱战久久久| 日韩天堂在线| 蜜桃视频一区二区| 青青草91视频| 日韩中文在线播放| 日本一区二区中文字幕| 精品久久一区| 亚洲中午字幕| 国产精品magnet| 国产精品97| 欧美aaaaaa午夜精品| 欧美日韩第一| 国产美女精品视频免费播放软件| 日韩久久视频| 日本99精品| 99久久久久| 国产亚洲精aa在线看| 亚洲一级网站| 国产九九精品| 亚洲欧美日韩一区在线观看| 国产一区二区三区久久久久久久久| 99视频精品| 国产一区丝袜| 亚洲精品自拍| 亚洲不卡av不卡一区二区| 日本午夜精品久久久| 久久久久国产| 国产视频网站一区二区三区| 久久人人88| 国产精品videosex极品| 红桃视频国产精品| 精品国产91| 亚洲一区二区日韩| 国产精品二区不卡| 国产日韩在线观看视频| 欧美日韩国产一区精品一区| 国产精品大片免费观看| 亚洲欧美激情诱惑| 欧美日韩免费观看视频| 国产精品亚洲综合色区韩国| 国产精品丝袜xxxxxxx| 人人草在线视频| 国产乱论精品| 亚洲综合专区| 欧美午夜精品一区二区三区电影| 欧美激情 亚洲a∨综合| 亚洲精一区二区三区| 亚洲高清影视| 国产精品久久久久久久免费观看| 奇米狠狠一区二区三区| 亚洲一区日韩在线| 久久中文字幕av| 国产成人精品亚洲线观看| 国产欧美69| 日韩三级精品| 亚洲天堂日韩在线| 99在线观看免费视频精品观看| 日韩深夜视频| 国产精品99一区二区三区| 欧美国产先锋| 国产亚洲精品美女久久| 亚洲影院天堂中文av色| 99riav国产精品| 麻豆mv在线观看| 精品三区视频| 精品国产一级| 精品国产一区二区三区噜噜噜| 久久国产精品免费一区二区三区| 亚洲精品综合| 蜜桃传媒麻豆第一区在线观看| 国精品一区二区三区| 亚洲h色精品| 亚洲不卡av不卡一区二区| 日本精品在线中文字幕| 亚洲日本网址| 久久精品国产99久久| 午夜精品成人av| 蜜臀久久精品| 成人国产精品久久| 97精品一区二区| 成人国产精选| 人在线成免费视频| 韩国精品主播一区二区在线观看| а√天堂8资源中文在线| 国产成人a视频高清在线观看| 国产成人精品一区二区三区免费| 精品一区二区三区四区五区| 精品三级在线| 天堂а√在线最新版中文在线| 天堂√8在线中文| 久久久久.com| 免费国产自久久久久三四区久久 | 野花国产精品入口| 国产精品日韩久久久| 久久福利毛片| 视频一区日韩| 欧美精品97| 视频在线不卡免费观看| 欧洲一区二区三区精品| 欧美色图国产精品| 久久aⅴ国产紧身牛仔裤| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美日韩午夜电影网| 日韩av不卡在线观看| 国产极品模特精品一二| 动漫av一区| av亚洲一区二区三区| aa国产精品| 日韩不卡一区二区三区| 国产一区二区三区黄网站| 日韩高清中文字幕一区二区| 91精品国产调教在线观看| 免费看的黄色欧美网站| 日本强好片久久久久久aaa| 国产精品蜜月aⅴ在线| 97在线精品| 欧美日韩黑人| 欧美在线91| 日本精品在线中文字幕| 一区二区国产在线观看| 国产精品欧美日韩一区| 色婷婷精品视频| 中文字幕亚洲影视| 久久精品伊人| 午夜国产一区二区| 久久国产尿小便嘘嘘| 日韩欧美中文| 中文一区一区三区免费在线观 | 蜜桃tv一区二区三区| 亚洲啊v在线免费视频| 久久免费福利| 久久国产亚洲| 日韩专区视频网站| 亚洲国产欧美日本视频| 免费中文字幕日韩欧美| 久久99视频| 尤物在线精品| 麻豆一区二区在线| 亚洲精品中文字幕乱码| 国产精品一级在线观看| 免费精品国产的网站免费观看| 日韩国产一区二| 欧美日韩国产v| 日韩午夜视频在线| 精品成人免费一区二区在线播放| 婷婷亚洲成人| av在线最新| 日韩黄色av| 99久久久久久中文字幕一区| 欧美自拍一区| 欧美在线亚洲| 麻豆成人综合网| 免费日韩精品中文字幕视频在线| 久久不见久久见中文字幕免费| 先锋影音国产一区| av中文字幕在线观看第一页| 亚洲一区二区三区四区电影| 国产精品13p|