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网络要素服务,暂不学习,后续再更。