使用OGR拷贝创建新的矢量数据集的方法其实就是将数据读取的顺序再重复一遍。总体来说这个过程就是构建数据源->构建层->构建要素->构建几何形状->关闭数据源。

在OGR的矢量数据模型中,矢量数据分为datasource,layer,feature三个层次,在这三个层次上,OGR均有不同的复制数据的方法。

1.在datasource层次创建数据

>>> from osgeo import ogr
>>> import os,math
>>> inshp = '/gdata/GSHHS_c.shp'
>>> ds = ogr.Open(inshp)
>>> driver = ogr.GetDriverByName("ESRI Shapefile")
>>> outputfile = '/tmp/xx_world_borders_copy.shp'
>>> if os.access( outputfile, os.F_OK ):
>>>     driver.DeleteDataSource(outputfile)
>>> pt_cp = driver.CopyDataSource(ds, outputfile)
>>> pt_cp.Release()
>>> dir(pt_cp)[:6] + ['... ...'] + dir(pt_cp)[-3:]
['AbortSQL','CommitTransaction','CopyLayer','CreateLayer','DeleteLayer','Dereference','... ...','name','this','thisown']

在这里,我们使用了CopyDataSource()的方法来对数据进行复制。这个函数的第1个参数是要进行复制的数据源,第2个参数是要生成的数据路径,并且返回一个指针。为了将数据写入磁盘,必须使用Release()方法释放此数据。

2.在layer层次拷贝数据

>>> from osgeo import ogr
>>> import os,math
>>> inshp = '/gdata/GSHHS_c.shp'
>>> ds = ogr.Open(inshp)
>>> driver = ogr.GetDriverByName("ESRI Shapefile")
>>> outputfile ='/tmp/xx_world_borders_copy2.shp'
>>> if os.access( outputfile, os.F_OK ):
>>>          driver.DeleteDataSource( outputfile )
>>> layer = ds.GetLayer()
>>> newds = driver.CreateDataSource(outputfile)
>>> pt_layer  = newds.CopyLayer(layer, 'abcd')
>>> newds.Destroy()
>>> dir(pt_layer)[:6] + ['... ...'] + dir(pt_layer)[-3:]
['AlterFieldDefn','Clip','CommitTransaction','CreateFeature','CreateField','CreateFields','... ...','schema','this','thisown']

若想对layer进行拷贝,首先得有数据源。使用newds的CopyLayer()方法对图层进行拷贝,以创建newds数据源。值得注意的是,当图层拷贝完之后,需要对newds进行Destroy()操作,将数据写入磁盘。

CopyLayer()的第1个参数是OGR的Layer对象,第2个参数是要生成图层的名称。对于Shapefile来说,这个名称是没有用的,但必须给这个字符串赋变量值。

3.在feature层次拷贝数据

>>> from osgeo import ogr
>>> import os,math
>>> inshp = '/gdata/GSHHS_c.shp'
>>> ds = ogr.Open(inshp)
>>> driver = ogr.GetDriverByName("ESRI Shapefile")
>>> outputfile ='/tmp/xx_world_borders_copy3.shp'
>>> if os.access( outputfile, os.F_OK ):
>>>     driver.DeleteDataSource( outputfile )
>>> newds = driver.CreateDataSource(outputfile)
>>> layernew = newds.CreateLayer('worldcopy',None,ogr.wkbLineString)
>>> layer = ds.GetLayer()
>>> extent = layer.GetExtent()
>>> extent
(-180.0, 180.00000000000023, -89.99999999999994, 83.53036100000006)
>>> feature = layer.GetNextFeature()
>>> while feature is not None:
>>>     layernew.CreateFeature(feature)
>>>     feature = layer.GetNextFeature()
>>> newds.Destroy()
>>> dir(feature)[:6] + ['... ...'] + dir(feature)[-3:]
['__bool__','__class__','__delattr__','__dir__','__doc__','__eq__','... ...','__sizeof__','__str__','__subclasshook__']

特别注意:Destroy()不能省略,Destroy()除了销毁数据还有数据flush到磁盘的作用。如果没有此命令,那么刚才创建的一系列要素就不会被写入磁盘的文件中。

GDAL python教程基础篇(4)OGR拷贝方法相关推荐

  1. GDAL python教程基础篇(6)OGR空间滤波器

    1.空间过滤器 如果说按照属性筛选要素是带有数据库特征的话,那么,根据空间位置的筛选就是纯GIS了.在OGR中,使用了Spatial filters(空间过滤)这一术语表征这一功能. OGR提供的空间 ...

  2. GDAL python教程基础篇(2)——用OGR写入矢量数据

    上一篇博客介绍了如何使用OGR读取矢量数据,那么怎么用OGR写入呢,下面就让我们一起学习怎么写入数据吧. 1.创建新文件 在写入数据之前我们首先需要确定写入对象,也就是先创建一个可供写入数据的对象. ...

  3. 1.Python教程--基础篇(全)

    Python人工智能总目录 人工智能总目录网页链接 文章目录 Python人工智能总目录 1.Linux-基础 Day01笔记 1.1 开发简介 1. 三大操作系统 2. VMware Worksta ...

  4. python人生苦短_人生苦短,我用Python(教程基础篇)

    人生苦短,我用Python(Python快速教程 - 基础篇) Life is short, you need Python 人生苦短,我用Python Python简介 本章将介绍Python的最基 ...

  5. 从零开始学 Python 之基础篇

    从零开始学 Python 之基础篇 前言 大家好,这里是「痴海」从零开始学习 Python 系列教程.此文首发于「痴海」公众号,欢迎大家去关注.学习一门语言最好的办法,就是教懂别人.在这公众号,我会从 ...

  6. 全民一起玩python视频_全民一起玩Python之基础篇,视频教程下载

    课程介绍: "全民一玩Python"系列由杨洋博士精心制作,面向所有希望学习Python编程.进而能够在学习和工作中编写办公自动化.网页信息提取.数据分析处理.人工智能应用.娱乐游 ...

  7. 视频教程-Redis进阶教程—基础篇-NoSQL

    Redis进阶教程-基础篇 雅座Java架构师,架构开发公司百万级订单支付平台 叶向阳 ¥49.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取优惠 ...

  8. 【目录】Python 入门基础篇 <(^-^)>

    Python 入门基础篇 一.关于Python的介绍与准备工作 Python基础介绍 Jupyter notebook基础介绍 Jupyter notebook打开问题 Jupyter noteboo ...

  9. Midjourney|文心一格prompt教程[基础篇]:注册使用教程、风格设置、参数介绍、隐私模式等

    Midjourney|文心一格prompt教程[基础篇]:注册使用教程.风格设置.参数介绍.隐私模式等 开头讲一下为什么选择Midjourney和文心一格,首先Midjourney功能效果好不多阐述: ...

最新文章

  1. 01 数据类型 、常量变量、运算符、表达式、格式化输入输出
  2. CLion 2016.1新增Python、Swift支持,并改进了C++支持
  3. iOS之设置用户头像的圆角
  4. CENTOS6.4安装vnc-server
  5. 如何选择 WebClient HttpWebRequest HttpClient ?
  6. android sd卡 格式化 rom,Android开发之获取SD卡及手机ROM容量的方法
  7. success.ftlh与error.ftlh
  8. 如何高效的将 DataReader 转成 List<T> ?
  9. Velocity 语法示例
  10. CDH页面配置HA(高可用)
  11. 解决用wps另存dbf格式文件,丢失只转换了部分数据
  12. 当前最流行的Javaweb框架有哪些?
  13. 在线社交网络(Online Social Networks,OSNs)
  14. Lick the habit 戒除恶习
  15. java打印长方形、平行四边形、三角形、菱形
  16. Onedrive如何申请免费的学生1T空间以及查看剩余空间大小
  17. CSS篇-dbMovies和dbBooks小网页
  18. LINUX NGINX 环境禁止访问指定后缀文件
  19. 靶机18 driftingblues1
  20. 是什么扼杀了大学后的成长?

热门文章

  1. 北航计算机九推经验,前辈种树 | 工科九推经验贴
  2. 2023年淘宝天猫年货节超级红包哪里领?
  3. server2008网卡驱动包_网卡工作原理详解
  4. Hadoop实战(二) 搭建Hadoop集群
  5. php获取今日、昨日、本周、本月 日期方法
  6. html 点击展开显示全部,多行溢出省略号显示及点击展开(css/js)实现!
  7. java如何利用rotate旋转图片_JAVA对图片的任意角度旋转,以及镜像操作
  8. PTA 7-222 sdut-C语言实验-N^3问题
  9. 马克一下 Michael Moore
  10. 京东按关键字搜索商品 API 返回值说明