¿Cómo acceder a las clases de entidad en geodatabases de archivos con Python y GDAL?

18

Estoy tratando de acceder a un conjunto de datos vectoriales en una geodatabase de archivos ESRI usando Python + GDAL. He compilado GDAL con la API de geodatabase de archivos. El controlador FileGDB está funcionando correctamente desde que ingresó

ogrinfo --formats

muestra el controlador FileGDB y entra

ogrinfo myfilegdb.gdb 

me da la información correcta sobre el contenido de la base de datos.

Sin embargo, no puedo encontrar información sobre cómo acceder al contenido en Python. Para acceder a un shapefile, escribiría:

driver = ogr.GetDriverByName('ESRI Shapefile')
ds = driver.Open('shapefile.shp', 0)

Al acceder a una clase de entidad FileGDB, asumiría que usa los comandos:

driver = ogr.GetDriverByName('FileGDB')
ds = driver.Open('myfilegdb.gdb/feature_class', 0)

pero esto no parece funcionar ya que no puede identificar / localizar el conjunto de datos. Alguien sabe cómo llamar a clases de entidad individuales desde un FileGDB de ESRI.

Estoy usando Python 2.7, GDAL 1.9.1, filegdb api 1.2 en Ubuntu 12.04 x64. Gracias por cualquier sugerencia!

    
pregunta Niels 04.09.2012 - 12:47

2 respuestas

16

Ya casi estás allí. Esto está en Windows 7, Python 2.6.5 32bit y GDAL 1.9.0:

>>> from osgeo import ogr
>>> driver = ogr.GetDriverByName("FileGDB")
>>> ds = driver.Open(r"C:\temp\buildings.gdb", 0)
>>> ds
<osgeo.ogr.DataSource; proxy of <Swig Object of type 'OGRDataSourceShadow *' at 0x02BB7038> >
>>> ds.GetLayer("buildings")
<osgeo.ogr.Layer; proxy of <Swig Object of type 'OGRLayerShadow *' at 0x02BB7050> >
>>> b = ds.GetLayer("buildings")
>>> sr = b.GetSpatialRef()
>>> sr
<osgeo.osr.SpatialReference; proxy of <Swig Object of type 'OSRSpatialReferenceShadow *' at 0x02BB7080> >
>>> sr.ExportToProj4()
'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '
>>>

Una vez que abras la FGDB, usa GetLayer para llegar a tu clase.

    
respondido por el Chad Cooper 04.09.2012 - 15:33
4

Me gustaría agregar que "FileGDB" es un controlador privado que podría no estar incluido con su paquete GDAL enlace . Esto da como resultado que GetDriverByName devuelva None .

También existe el controlador "OpenFileGDB" que es de solo lectura y se incluye de forma predeterminada enlace

>>> from osgeo import ogr
>>> driver = ogr.GetDriverByName("OpenFileGDB")
    
respondido por el Alec 10.10.2017 - 17:30

Lea otras preguntas en las etiquetas