百度快速收錄技術(shù)青島seo全網(wǎng)營(yíng)銷
鶴壁市浩天電氣有限公司
2026/01/24 08:30:18
百度快速收錄技術(shù),青島seo全網(wǎng)營(yíng)銷,網(wǎng)站的建設(shè)與運(yùn)維,網(wǎng)站建設(shè)找哪些平臺(tái)前言
?
TXT 作為一種文本格式#xff0c;可以很方便的存儲(chǔ)一些簡(jiǎn)單幾何數(shù)據(jù)。在 GIS 開發(fā)中#xff0c;經(jīng)常需要進(jìn)行數(shù)據(jù)的轉(zhuǎn)換處理#xff0c;其中常見的便是將 TXT 轉(zhuǎn)換為 Shp 數(shù)據(jù)進(jìn)行展示。本篇教程在之前一系列文章的基礎(chǔ)上講解如如果你還沒(méi)有看過(guò)#xff0c;建議從以…前言?TXT 作為一種文本格式可以很方便的存儲(chǔ)一些簡(jiǎn)單幾何數(shù)據(jù)。在 GIS 開發(fā)中經(jīng)常需要進(jìn)行數(shù)據(jù)的轉(zhuǎn)換處理其中常見的便是將 TXT 轉(zhuǎn)換為 Shp 數(shù)據(jù)進(jìn)行展示。本篇教程在之前一系列文章的基礎(chǔ)上講解如如果你還沒(méi)有看過(guò)建議從以上內(nèi)容開始。1. 開發(fā)環(huán)境本文使用如下開發(fā)環(huán)境以供參考。時(shí)間2025年系統(tǒng)Windows 11Python3.11.7GDAL3.11.12. 數(shù)據(jù)準(zhǔn)備TXT純文本文件是一種最基本的文件格式僅存儲(chǔ)無(wú)格式的文本數(shù)據(jù)適用于各種場(chǎng)景如數(shù)據(jù)交換、日志記錄、配置文件等。如下是全國(guó)省會(huì)城市人口 TXT 文本結(jié)構(gòu)ID,Name,Longitude,Latitude,Population1,Beijing,116.40,39.90,2171萬(wàn)2,Shanghai,121.47,31.23,2487萬(wàn)3,Guangzhou,113.26,23.12,1868萬(wàn)4,Shenzhen,114.05,22.55,1756萬(wàn)5,Tianjin,117.20,39.08,1373萬(wàn)6,Chongqing,106.50,29.53,3205萬(wàn)7,Chengdu,104.06,30.67,2094萬(wàn)8,Wuhan,114.30,30.60,1121萬(wàn)9,Hangzhou,120.15,30.28,1194萬(wàn)10,Nanjing,118.78,32.04,931萬(wàn)11,Xian,108.93,34.27,1295萬(wàn)12,Changsha,112.97,28.20,839萬(wàn)13,Zhengzhou,113.62,34.75,1260萬(wàn)14,Harbin,126.63,45.75,1076萬(wàn)15,Shenyang,123.43,41.80,831萬(wàn)16,Qingdao,120.38,36.07,1007萬(wàn)17,Dalian,121.62,38.92,745萬(wàn)18,Xiamen,118.08,24.48,516萬(wàn)19,Ningbo,121.55,29.88,854萬(wàn)20,Hefei,117.28,31.86,937萬(wàn)21,Fuzhou,119.30,26.08,829萬(wàn)22,Jinan,117.00,36.67,920萬(wàn)23,Taiyuan,112.55,37.87,530萬(wàn)24,Changchun,125.35,43.88,906萬(wàn)25,Kunming,102.72,25.04,846萬(wàn)26,Nanning,108.37,22.82,874萬(wàn)27,Lanzhou,103.82,36.06,435萬(wàn)28,Yinchuan,106.27,38.47,285萬(wàn)29,Xining,101.77,36.62,263萬(wàn)30,Urümqi,87.62,43.82,405萬(wàn)31,Lhasa,91.11,29.65,86萬(wàn)32,Haikou,110.20,20.05,287萬(wàn)3. 導(dǎo)入依賴TXT作為一種矢量數(shù)據(jù)格式可以使用矢量庫(kù)OGR進(jìn)行處理以實(shí)現(xiàn)TXT數(shù)據(jù)從文本格式轉(zhuǎn)換為Shp格式。其中還涉及坐標(biāo)定義所以還需要引入osr模塊。from osgeo import ogr,osrimport osimport csv4. 數(shù)據(jù)讀取與轉(zhuǎn)換定義一個(gè)方法Txt2Shp(txtPath,shpPath,encodingUTF-8)用于將TXT數(shù)據(jù)轉(zhuǎn)換為Shp數(shù)據(jù)。說(shuō)明將 TXT 文件轉(zhuǎn)換為 Shapfile 文件參數(shù)-txtPathTXT 文件路徑-shpPathShp 文件路徑-encodingTXT 文件編碼def Txt2Shp(txtPath,shpPath,encodingUTF-8)在進(jìn)行TXT數(shù)據(jù)格式轉(zhuǎn)換之前需要檢查數(shù)據(jù)路徑是否存在。# 檢查文件是否存在ifos.path.exists(txtPath):print(TXT 文件存在。)else:print(TXT 文件不存在請(qǐng)重新選擇文件)return通過(guò)GetDriverByName獲取Shp數(shù)據(jù)驅(qū)動(dòng)并使用os.path.exists方法檢查Shp文件是否已經(jīng)創(chuàng)建如果存在則將其刪除。# 注冊(cè)所有驅(qū)動(dòng)ogr.RegisterAll()# 添加Shp數(shù)據(jù)源shpDriver ogr.GetDriverByName(ESRI Shapefile)ifos.path.exists(shpPath):try:shpDriver.DeleteDataSource(shpPath)print(文件已刪除)except Exception as e:print(f文件刪除出錯(cuò){e})returnFalse接著創(chuàng)建Shp數(shù)據(jù)源和空間參考數(shù)據(jù)坐標(biāo)系這里定義為4326。# 創(chuàng)建Shp數(shù)據(jù)源shpDataSource shpDriver.CreateDataSource(shpPath)ifshpDataSource is None:print(無(wú)法創(chuàng)建Shp數(shù)據(jù)源請(qǐng)檢查文件)returnfalse# 創(chuàng)建空間參考spatialReference osr.SpatialReference()spatialReference.ImportFromEPSG(4326)之后通過(guò)數(shù)據(jù)源方法CreateLayer創(chuàng)建Shp圖層使用圖層方法CreateField添加屬性字段需要定義屬性名稱以及屬性字段類型。# 創(chuàng)建圖層shpLayer shpDataSource.CreateLayer(points,spatialReference,ogr.wkbPoint)# 添加圖層字段shpLayer.CreateField(ogr.FieldDefn(ID,ogr.OFTString))shpLayer.CreateField(ogr.FieldDefn(Name,ogr.OFTString))shpLayer.CreateField(ogr.FieldDefn(Longitude,ogr.OFTReal))shpLayer.CreateField(ogr.FieldDefn(Latitude,ogr.OFTReal))shpLayer.CreateField(ogr.FieldDefn(Population,ogr.OFTString))讀取TXT數(shù)據(jù)并將其轉(zhuǎn)換為Shapefile數(shù)據(jù)在打開數(shù)據(jù)時(shí)根據(jù)TXT文件屬性使用逗號(hào)分隔符進(jìn)行讀取并跳過(guò)表頭行數(shù)據(jù)。之后根據(jù)行數(shù)據(jù)進(jìn)行屬性遍歷將讀取的字段值和幾何屬性寫入到要素對(duì)象中。# 讀取TXT文件with open(txtPath,r,encodingencoding) as txtFile:# 根據(jù)逗號(hào)分隔符進(jìn)行讀取reader csv.reader(txtFile,delimiter,)# 跳過(guò)表頭header next(reader)# 遍歷記錄forrowinreader:print(f要素記錄{row})# 創(chuàng)建要素feature ogr.Feature(shpLayer.GetLayerDefn())# 根據(jù)圖層字段寫入屬性feature.SetField(ID,str(row[0]))feature.SetField(Name,str(row[1]))feature.SetField(Longitude,float(row[2]))feature.SetField(Latitude,float(row[3]))feature.SetField(Population,str(row[4]))# 創(chuàng)建幾何對(duì)象wkt fPOINT({float(row[2])} {float(row[3])})pointGeom ogr.CreateGeometryFromWkt(wkt)feature.SetGeometry(pointGeom)# 將要素添加到圖層shpLayer.CreateFeature(feature)feature NoneCreateCpgFile2Encode(shpPath,encoding)# 釋放數(shù)據(jù)資源shpDataSource None其中CreateCpgFile2Encode方法用于創(chuàng)建字符編碼文件后綴名為.cpg。說(shuō)明創(chuàng)建.cpg文件指定字符編碼參數(shù)-shpPathShp文件路徑-encodingShp文件字符編碼def CreateCpgFile2Encode(shpPath,encoding):fileName os.path.splitext(shpPath)[0]cpgFile fileName .cpgwith open(cpgFile,w,encodingencoding) as f:f.write(encoding)print(f成功創(chuàng)建編碼文件: {cpgFile})程序成功轉(zhuǎn)換數(shù)據(jù)顯示如下使用ArcMap打開顯示結(jié)果如下