如何使用Python和GDAL访问文件地理数据库中的要素类?


21

我正在尝试使用Python + GDAL访问ESRI文件地理数据库中的矢量数据集。我已经使用文件地理数据库API成功编译了GDAL。自输入以来,FileGDB驱动程序正常工作

ogrinfo --formats

显示FileGDB驱动程序并输入

ogrinfo myfilegdb.gdb 

给我有关数据库内容的正确信息。

但是,我找不到如何在Python中访问内容本身的方法。为了访问shapefile,我会写:

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

访问FileGDB要素类时,我会假定使用以下命令:

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

但这似乎不起作用,因为它无法识别/定位数据集。有谁知道如何从ESRI FileGDB调用单个要素类。

我在Ubuntu 12.04 x64上使用Python 2.7,GDAL 1.9.1,filegdb api 1.2。感谢您的任何建议!


您能给我一些想法来安装OGR for FileGDB驱动程序吗?
giser

Answers:


18

你快到了。这是在Windows 7,Python 2.6.5 32位和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 '
>>>

打开FGDB后,请使用GetLayer来获取要素类。


一旦您知道它似乎很合逻辑:-)非常感谢,您的解决方案可以解决问题。
尼尔斯2012年


3

如果您使用fiona和Geopandas,则更加简单直观

import fiona 
import geopandas as gpd

# Get all the layers from the .gdb file 
layers = fiona.listlayers(gdb_file)

for layer in layers:
    gdf = gpd.read_file(gdb_file,layer=layer)
    # Do stuff with the gdf

注意:fiona使用gdal,geopandas使用fiona

另请参见在Python中读取地理数据库文件层的名称


先决条件:pip install“ GDAL-3.0.2-cp36-cp36m-win_amd64.whl” #see here lfd.uci.edu/~gohlke/pythonlibs,pip install wheels,pip install pipwin,pipwin install numpy,pipwin install pandas ,pipwin匀称安装,pipwin安装gdal,pipwin安装fiona,pipwin安装pyproj,pipwin安装6,pipwin安装rtree,pipwin安装geopandas,检查python是否在您的环境路径中,在GDAL CPx.y中显示了Python的版本32位系统中使用32位,逗号表示新行
MOHSEN HS
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.