亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2020年03月10日 15:25:40   作者:Martian.Alien  
這篇文章主要介紹了GDAL 矢量屬性數(shù)據(jù)修改方式(python),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

Case:需要給一個現(xiàn)有的shp數(shù)據(jù)創(chuàng)建一個字段,并將屬性表中原有的一個文本類型的屬性轉換為整型后填入新創(chuàng)建的字段。

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

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

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

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

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

1.為矢量數(shù)據(jù)創(chuàng)建字段

# 添加字段
 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("字段創(chuàng)建成功:",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種方法,時間緊迫屢敗屢戰(zhàn),最后終于成功。

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

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

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

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

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

過于依賴熟悉的領域,由于時間緊迫沒有試用dbf第三方庫

#-*- coding: utf-8 -*-
 
import os
import shutil
import csv
 
#批量修改shp中dbf文件中的字段名
#LANE_WIDTH改為LANEWIDTHL
#LANE_WID_1改為LANEWIDTHR
#ORIGIN_LIN改為ORG_LINKID
 
roadDir = r"D:\20Q1\00DATA\ModifyTitle\ROAD_TEST\\"
modifyRoadDir = r"D:\20Q1\00DATA\ModifyTitle\ModifiedLink\\"
csvDir = r"D:\20Q1\00DATA\ModifyTitle\ROAD_CSV\\"
fileList = os.listdir(roadDir)
 
num = 0
for 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數(shù)據(jù)為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——直接使用修改字段名函數(shù)——失敗,arcpy模塊沒有AlterField_management方法

——失敗,但發(fā)現(xiàn)直接探尋官方方法還是比網(wǎng)搜野路子要節(jié)約時間

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

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

#-*- coding: utf-8 -*-
 
import os
import arcpy
 
#批量修改shp中dbf文件中的字段名
#LANE_WIDTH改為LANEWIDTHL
#LANE_WID_1改為LANEWIDTHR
#ORIGIN_LIN改為ORG_LINKID
 
roadDir = r"D:\20Q1\00DATA\ModifyTitle\ROAD_TEST\\"
fileList = os.listdir(roadDir)
 
num = 0
for file in fileList:
 #截取城市名
 city = file.split("_")[0]
 print("正在修改{}的shp字段......".format(city))
 
 #修改前后字段名對照字典
 modifyDic = {"LANE_WIDTH":"LANEWIDTHL","LANE_WID_1":"LANEWIDTHR","ORIGIN_LIN":"ORG_LINKID"} 
 
 #讀取shp數(shù)據(jù)
 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 os
import arcpy
 
#批量修改shp屬性表中的字段名
#LANE_WIDTH改為LANEWIDTHL
#LANE_WID_1改為LANEWIDTHR
#ORIGIN_LIN改為ORG_LINKID
 
roadDir = r"D:\20Q1\00DATA\ModifyTitle\ROAD_TEST\\"
fileList = os.listdir(roadDir)
 
num = 0
for 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 矢量屬性數(shù)據(jù)修改方式(python)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Pip install和Conda install的使用

    Pip install和Conda install的使用

    本文主要介紹了Pip install和Conda install的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • python基于openpyxl生成excel文件

    python基于openpyxl生成excel文件

    這篇文章主要介紹了python基于openpyxl生成excel文件的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Python BautifulSoup 節(jié)點信息

    Python BautifulSoup 節(jié)點信息

    這篇文章主要介紹了Python BautifulSoup 節(jié)點信息,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • Python 爬蟲之超鏈接 url中含有中文出錯及解決辦法

    Python 爬蟲之超鏈接 url中含有中文出錯及解決辦法

    這篇文章主要介紹了Python 爬蟲之超鏈接 url中含有中文出錯及解決辦法的相關資料,出現(xiàn)UnicodeEncodeError: 'ascii' codec can't encode characters,的錯誤解決辦法,需要的朋友可以參考下
    2017-08-08
  • python使用scrapy解析js示例

    python使用scrapy解析js示例

    這篇文章主要介紹了python使用scrapy解析js的示例,大家參考使用吧
    2014-01-01
  • 關于NumPy中asarray的用法及說明

    關于NumPy中asarray的用法及說明

    這篇文章主要介紹了關于NumPy中asarray的用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • python unittest實現(xiàn)api自動化測試

    python unittest實現(xiàn)api自動化測試

    這篇文章主要為大家詳細介紹了python unittest實現(xiàn)api自動化測試的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 使用Scrapy爬取動態(tài)數(shù)據(jù)

    使用Scrapy爬取動態(tài)數(shù)據(jù)

    今天小編就為大家分享一篇關于使用Scrapy爬取動態(tài)數(shù)據(jù)的文章,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Pandas統(tǒng)計重復的列里面的值方法

    Pandas統(tǒng)計重復的列里面的值方法

    今天小編就為大家分享一篇Pandas統(tǒng)計重復的列里面的值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Scrapy將數(shù)據(jù)保存到Excel和MySQL中的方法實現(xiàn)

    Scrapy將數(shù)據(jù)保存到Excel和MySQL中的方法實現(xiàn)

    本文主要介紹了Scrapy將數(shù)據(jù)保存到Excel和MySQL中的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02

最新評論