osgeo.ogr.Layer与我在GIS软件中看到的有什么关系?

问题描述 投票:0回答:0

我正在尝试使用以下代码访问 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中访问这个形状文件时,通过打开它的属性表,我知道它实际上有很多字段如下:fields in QGIS 因此,我开始怀疑我是否正在访问 shapefile 的正确部分,以及 gdal 层与我在 QGIS 中看到的内容之间的关系是什么。

环境:

  • QGIS:3.26.3
  • Python:3.7.9(64 位)
  • GDAL:3.0.4

实际上“Item_Code”字段是我以前代码的结果。那是我错误地使用 Driver.CreateDataSource 而不是 Driver 的时候。打开以尝试加载文件。那是我创建字段“Item_Code”的时候。所以,基本上我还没有得到正确的方法来访问我想要的数据,也就是说,QGIS 属性表中显示的数据。

python gdal qgis
© www.soinside.com 2019 - 2024. All rights reserved.