Python 读写ESRI文件地理数据库.gdb

       使用Python和GDAL读取ESRI文件地理数据库.gdb(FileGDB) 默认情况下,它使用GDAL的“ OpenFileGDB”(只读)驱动,如果您对编辑GDB要素类感兴趣,则应使用“ FileGDB”(读写)驱动程序,该驱动程序依赖于ESRI FileGDBAPI。 UCLA的内部测试表明,对于只读操作,ESRI的FileGDB驱动程序比OpenFileGDB的性能慢。 因此,请根据您的需要选择驱动程序。

注意:没有添加依赖ESRI FileGDBAPI时ogr.GetDriverByName('FileGDB') returns None

1、ESRI FileGDBAPI的依赖下载https://github.com/Esri/file-geodatabase-api选择对应的版本

2、将FileGDB_API_1_5_VS2015.zip依赖包中的Esri.FileGDBAPI.dll,FileGDBAPI.dll(注意区分x86和x64)复制到gdal30X.dll同级目录中

Python 读写ESRI文件地理数据库.gdb_第1张图片

 3、此时通过ogrinfo.exe --formats 显示filegdb可读写

4、编辑 python    【安装目录中】/Lib\site-packages\osgeo\__init__.py 文件

Python 读写ESRI文件地理数据库.gdb_第2张图片

将17行的注释去掉

# uncomment the next line to enable plugins
 os.environ['GDAL_DRIVER_PATH'] = os.path.join(_here, 'gdalplugins')

注意选择对应版本!

# 将ds数据源的图层导入到gdb里面的dateset数据集中
# 需要导入的源数据,目标数据源,目标数据源中的数据集
from osgeo import ogr
import os
def layers_to_feature_dataset(ds_name,gdb_fn,dataset):
    """Copye layers to feature dateset in a file geodatabase."""
    in_ds =ogr.Open(ds_name)
    if in_ds is None:
        raise RuntimeError('Could not Open dataSource')
     #创建文件Gdb驱动器只读
    gdb_read_driver=ogr.GetDriverByName("OpenFileGDB")
    #创建文件Gdb驱动器读写
    gdb_driver=ogr.GetDriverByName("FileGDB")
    if os.path.exists(gdb_fn):
        #打开存在的地理数据库
        gdb_ds=gdb_driver.Open(gdb_fn,1)
    else:
        gdb_ds=gdb_driver.CreateDataSource(gdb_fn)
    if gdb_ds is None:
        raise RuntimeError('Could not open file geodatabse')
    options=['FEATURE_DATASET='+dataset]
    for i in range(in_ds.GetLayerCount()):
        lyr=in_ds.GetLayer(i)
        lyr_name=lyr.GetName()
        print('Copying'+lyr_name+'.....')        
        gdb_ds.CopyLayer(lyr,lyr_name,options)

 

你可能感兴趣的:(GDAL,Python,Python,GDAL,WebGIS,Ogr,Ogr读写FileGDB)