Fork me on GitHub

GDAL笔记-chapter4

ogr支持多图层的数据格式。

1.spatialite数据库

####支持多图层的数据格式
from osgeo import ogr
import ospybook as pb

def print_layers(fn):
    ds = ogr.Open(fn, 0)
    if ds is None:
        raise OSError('Could not open {}'.format(fn))
    for i in range(ds.GetLayerCount()):
        lyr = ds.GetLayer(i)
        print('{0}:{1}'.format(i, lyr.GetName()))
pb.print_layers(r'E:\桌面文件保存路径\gdal\osgeopy-data\osgeopy-data\global\natural_earth_50m.sqlite')

2.POSTGIS(数据库服务器)

pb.print_layers('PG:user=... password=... dbname=geodata')

3.文件夹作为数据源(shp/csv)

shp可以将文件夹作为数据源,其中一个shp文件一个图层。

而csv如果将文件夹作为数据源需要文件夹内只有csv文件。否则就只能按一个csv文件一个图层的形式打开。

4.ESRI文件地理数据库(.gdb)

(这里OpenFileGDB驱动只读、FileGDB驱动可读写。)

###Esri文件地理数据库(后缀.gdb),这里对于OpenFileGDB驱动只读,所以要修改的话需要先CopyLayer到新的shp文件中
gdb_ds = ogr.Open('E:\桌面文件保存路径\gdal\osgeopy-data\osgeopy-data\global\natural_earth.gdb')
gdb_lyr = gdb_ds.GetLayerByName('countries_110m')
shp_ds = ogr.open(r'D:\Temp', 1)   #读写模式打开临时文件,文件夹作为shp数据源
shp_ds.CopyLayer(gdb_lyr, 'countries_110m')
del gdb_ds, shp_ds

3.将源数据图层拷贝到文件地理数据库gdb

####导入图层到文件地理数据库gdb中
def layers_to_feature(ds_name, gdb_fn, dataset_name):
    in_ds = ogr.Open(ds_name)    #打开待拷贝的源计数据
    if in_ds is None:
        raise RuntimeError('Could not open datasource')
    gdb_driver = ogr.GetDriverByName('FileGDB')   #创建新的地理数据库,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('......')
    options = ['FEATURE_DATASET=' + dataset_name]  #设置要素数据集的名称,使得要素类保存到要素数据集中而不是文件地理数据库的最顶层
    for i in range(in_ds.GetLayerCount()):   #遍历源数据的所有图层
        lyr = in_ds.GetLayer(i)  #读取源数据图层
        lyr_name = lyr.GetName()  #读取图层名称
        print('copying...')
        gdb_ds.CopyLayer(lyr, lyr_name, options)  #拷贝到gdb中

5.WFS网络要素服务,暂不学习,后续再更。

 

posted @ 2020-03-23 11:35  Rser_ljw  阅读(493)  评论(0编辑  收藏  举报