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同级目录中

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

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

将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)

 

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值