datasource层次的拷贝
from osgeo import ogrimport os,mathinshp = "C:\tmp\test.shp"ds = ogr.Open(inshp)driver = ogr.GetDriverByName("ESRI Shapefile")outputfile = 'C:\tmp\test_copy.shp'if os.access( outputfile, os.F_OK) : #已经有该文件 driver.DeleteDataSource(outputfile) #删除pt_cp = driver.CopyDataSource(ds, outputfile) #根据数据源ds创建数据,返回指针pt_cp.Release() #释放指针,将数据写入到磁盘
layer层次的拷贝
from osgeo import ogrimport os,mathinshp = "C:\tmp\test.shp"ds = ogr.Open(inshp)driver = ogr.GetDriverByName("ESRI Shapefile")outputfile = "C:\tmp\test_copy2.shp"if os.access( outputfile, os.F_OK): driver.DeleteDataSourse( outputfile )layer = ds.GetLayer()newds = driver.CreateDataSource(outputfile) #首先得有数据源pt_layer = newds.CopyLayer(layer, 'abcd') #复制图层,返回指针newds.Destroy() #对newds进行Destroy()操作,才能将数据写入磁盘
feature层次的拷贝
from osgeo import ogrimport os,mathinshp = 'C:\tmp\test.shp'ds = ogr.Open(inshp)driver = ogr.GetDriverByName("ESRI Shapefile")outputfile = 'c:\tmp\test.shp'if os.access( outputfile, os.F_OK ): driver.DeleteDataSource( outputfile )newds = driver.CreateDataSource(outputfile) #按outputfile的数据源创建一个newdslayernew = newds.CreateLayer('worldcopy',None,ogr.wkbLineString) #创建一个图层layer = ds.GetLayer() #得到原数据源的图层extent = layer.GetExtent() #图层范围# 遍历旧图层的所有feature,进行复制feature = layer.GetNextFeature()while feature is not None: layernew.CreateFeature(feature) feature = layer.GetNextFeature()newds.Destroy() # 包括了将数据flush到磁盘