python gdal读gdb文件

Gdb格式的文件,常见于各种比例尺的分幅地图。有需要会对它们进行读取拼接处理。

环境配置见:

https://blog.csdn.net/sinat_41310868/article/details/112210366

安装QGIS,直接使用QGIS带的python解释器,就不用了安装各种环境和配置了,很方便。

代码见:

注释写的非常详细。

# -*- coding: utf-8 -*-
try:
    from osgeo import gdal
    from osgeo import ogr
    from osgeo import osr
except ImportError:
    import gdal
    import ogr
    import osr
import sys
# 获取gdb文件的图层列表
def getGdbLayerList(gdb_path):
    # 使用ogr特定异常
    ogr.UseExceptions()
    # 获取驱动
    driver = ogr.GetDriverByName("OpenFileGDB")
   # 打开gdb文件
    try:
        gdb = driver.Open(gdb_path, 0)
    except Exception as e:
        print(e)
        sys.exit()
    # 存储图层名称的列表
    layerList = []
    # 获取图层名称
    for index in range(gdb.GetLayerCount()):
        layer = gdb.GetLayerByIndex(index)
        layerList.append(layer.GetName())
    # 清除文件
    del gdb
    return layerList
# 读gdb文件
def readGdb(gdb_path,layer_name):
    # 使用ogr特定异常
    ogr.UseExceptions()
    # 获取驱动
    driver = ogr.GetDriverByName("OpenFileGDB")
    # 打开gdb文件
    try:
        gdb = driver.Open(gdb_path, 0)
    except Exception as e:
        print(e)
        sys.exit()
    # 获取图层个数
    iLayerCount = gdb.GetLayerCount()
    print("图层个数 = ", iLayerCount)
    # 根据名称获取图层
    oLayer = gdb.GetLayerByName(layer_name)
    if oLayer == None:
        print("获取图层失败!")
        sys.exit()
    # 对图层进行初始化
    oLayer.ResetReading()
    # 输出图层中的要素个数
    num = oLayer.GetFeatureCount(0)
    print("要素个数 = ", num)
    result_list = []
    # gdb的layer中feature编号从1开始
    for i in range(1, num+1):
        ofeature = oLayer.GetFeature(i)
        if ofeature == None:
            continue
        id = ofeature.GetFieldAsString('id')
        name = ofeature.GetFieldAsString('name')
        geom = str(ofeature.GetGeometryRef())
        result_list.append([id,name,geom])
    gdb.Destroy()
    del gdb
    return result_list

 

 

 

 

你可能感兴趣的:(GIS算法)