我正在尝试使用以下代码访问 shapefile:
import os
from osgeo import gdal
from osgeo import ogr
from osgeo import osr
shp_path = "xxxxxxxx"
if __name__=='__main__':
ogr.RegisterAll()
gdal.SetConfigOption("SHAPE_ENCODING", "UTF-8")
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")
oDriver = ogr.GetDriverByName("ESRI Shapefile")
path_list= os.listdir(shp_path)
for dir in path_list:
if dir.endswith('.shp'):
oDS = oDriver.Open(dir, 0)
iLayerCount = oDS.GetLayerCount()
out_lyr = oDS.GetLayerByIndex(0)
print(dir, iLayerCount, out_lyr.schema.len(), out_lyr.schema[0].name)
我得到这样一个结果:
"GBZ2012371002CZ.shp",1,1,'Item_Code'
但是,当我在QGIS中访问这个形状文件时,通过打开它的属性表,我知道它实际上有很多字段如下: 因此,我开始怀疑我是否正在访问 shapefile 的正确部分,以及 gdal 层与我在 QGIS 中看到的内容之间的关系是什么。
环境:
实际上“Item_Code”字段是我以前代码的结果。那是我错误地使用 Driver.CreateDataSource 而不是 Driver 的时候。打开以尝试加载文件。那是我创建字段“Item_Code”的时候。所以,基本上我还没有得到正确的方法来访问我想要的数据,也就是说,QGIS 属性表中显示的数据。