上一篇博客介绍了如何使用OGR读取矢量数据,那么怎么用OGR写入呢,下面就让我们一起学习怎么写入数据吧。

1.创建新文件

在写入数据之前我们首先需要确定写入对象,也就是先创建一个可供写入数据的对象。
创建对象使用driver.CreateDataSource(<filename>),这里的driver即前面创建的数据驱动,需要注意的是这里面的filename不能已经存在,否则会报错。如果文件存在可以使用OGR的删除数据函数 DeleteDataSource(<filename>)进行删除。

2.创建Layer

数据源对象表示含有OGRLayer对象的一个文件或一个数据库,因此在写入数据之前我们还需要创建Layer,也就是图层要素。
这里用的方法为dataSource.CreateLayer(<name>, geom_type=<OGRwkbGeometryType>, [srs]),其中dataSource即第一步创建的数据库。

这里的OGRwkbGeometryType为几何类型,常见的几何类型有ogr.wkbPoint、org.wkbLineString、org.wkbPolygon, [srs]为空间参考

举个例子:

from osgeo import ogrdriver = ogr.GetDriverByName('ESRI Shapefile')
ds2 = driver.CreateDataSource('test.shp')
layer2 = ds2.CreateLayer('test', geom_type=ogr.wkbPoint)

运行这段代码之后会在文件目录下生成test.dbf test.shp test.shx三个文件

文件拓展名 用途
.shp *必要文件 用于存储要素几何的主文件,其中包括几何图形
.shx *必要文件 形状索引文件,适当尺寸的几何元素索引信息可以加快访问速度
.dbf *必要文件 数据库文件,其中包括几何元素的属性信息

3.删除文件

要删除一个shp文件,使用DeleteDataSource

driver.DeleteDataSource(‘test.shp’)

4.添加数据

OGRFeatureDefn里面封装了feature的属性,类型、名称及其默认的空间参考系统等。一个OGRFeatureDefn对象通常与一个层(layer)对应。

4.1 添加字段

在添加字段之前需要先定义,而且只能在layer里面加,而且还不能有数据,添加的字段如果是字符串,还要设定宽度。

字段数据类型 OGR常量
Integer OFTInteger
List of integers OFTIntegerList
Floating point number OFTReal
List of floating point numbers OFTRealList
String OFTString
List of strings OFTStringList
Date OFTDate
Time of day OFTTime
Date and time OFTDateTime
fieldDefn = ogr.FieldDefn('id', ogr.OFTString)
fieldDefn.SetWidth(4)
layer.CreateField(fieldDefn)

4.2添加feature

添加一个新的feature,首先得完成上一步,把字段field都添加齐了
然后从layer中读取相应的feature类型,并创建feature。

featureDefn = layer.GetLayerDefn()
feature = ogr.Feature(featureDefn)

4.3设定字段值和几何形状

设定几何形状
WKB(二进制Well-KnownBinary),用于不同软件程序间进行几何要素类型转换的一种二进制表示标准。
因为它是二进制格式,所以人们无法直接阅读获取其表示的内容,但是熟知文本格式(Well-Known Text,WKT)可以阅读。
几何要素类型 对应OGR常量

Point wkbPoint
Multipoint wkbMultiPoint
Line wkbLineString
Multiline wkbMultiLineString
Polygon wkbPolygon
Multipolygon wkbMultiPolygon
Unknown geometry type wkbUnknown(图层如果有多种几何类型就返回wkbUnknown)
No geometry wkbNone

1.建立空的geometry对象:ogr.Geometry
定义各种不同的geometry使用的方法是不一样的(point, line, polygon, etc)
新建点point,使用方法AddPoint( , , [])。其中的z坐标一般是省略的,默认值是0
例如:

point = ogr.Geometry(ogr.wkbPoint)
point.AddPoint(10,20)

2.设置几何形状

feature.SetGeometry(point)

设定某字段的数值

feature.SetField('id', 23)

4.4将feature写入layer

layer.CreateFeature(feature)

完整代码

from osgeo import ogrdriver = ogr.GetDriverByName('ESRI Shapefile')
ds2 = driver.CreateDataSource('test.shp')
layer = ds2.CreateLayer('test', geom_type=ogr.wkbPoint)#定义字段
fieldDefn = ogr.FieldDefn('id', ogr.OFTString)
fieldDefn.SetWidth(4)
layer.CreateField(fieldDefn)#定义要素
featureDefn = layer.GetLayerDefn()
feature = ogr.Feature(featureDefn)point = ogr.Geometry(ogr.wkbPoint)
point.AddPoint(10,20)#设置几何形状
feature.SetGeometry(point)#设定某字段的数值
feature.SetField('id', 23)#将feature写入layer
layer.CreateFeature(feature)

最后,从内存中清除 ds,将数据写入磁盘中。

ds.Destroy()

4.3.2. 使
运行结果
在arcmap中打开如下,由于我们没有添加投影信息,因此得到也是无投影的文件。

GDAL python教程基础篇(2)——用OGR写入矢量数据相关推荐

  1. GDAL python教程基础篇(4)OGR拷贝方法

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

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

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

  3. python的ogr模块_GDAL python教程(1)——用OGR读写矢量数据

    本教程的讲义和源码都是取自Utah State University的openGIS课程 本人只是做点翻译,写写学习体会而已,版权属于原作者. 欢迎转载,不过别忘了上面这段话. =========== ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. chrome 看每行代码的运行时间
  2. Python高级编程(三)
  3. mysql show 存储过程_mysql 存储过程 show errors
  4. vue3 el-form表单验证 自定义校验
  5. Node.js的集群功能以及在Express的配置
  6. django实战——常见web攻击与防范
  7. plc通讯的握手信号_PLC工程师教你:从原理搞懂RS485串口通讯
  8. 通讯录制作(.csv文件转.vcf文件即vcard格式)
  9. usb声卡驱动_哑巴电脑拯救者——它可能是你见过使用最简单的外接声卡!
  10. 小米手机Android怎么截屏,小米手机怎么截屏 5种截屏方法分享
  11. 窗口函数preceding和following字段
  12. 【实践案例分享】美团配送A/B评估体系建设与实践
  13. python-cheatsheet,一款很全的Python小抄库
  14. vue.js创建网站实例1
  15. vue中created、mounted、activated的区别
  16. GEA 3.1 重温C++以及实践
  17. discuz 数据字典大全
  18. 最新StarrySky星空简约记录型模板源码+Typecho内核
  19. 【Kubernetes系列】Pod
  20. 在github上写自己的博客

热门文章

  1. C/C++编程学习 - 第19周 ⑩ 派
  2. 2019python下半年考试报名时间_【2019下半年CATTI考试报名时间汇总】- 环球网校
  3. 按键精灵sub子程序篇
  4. 支付渠道接入设计及实现
  5. [centos7]linux-101-软硬件查看
  6. 初级前端工程师课程导航-姜威-专题视频课程
  7. chrome + IDM + 油猴插件 实现百度网盘大文件的高速下载
  8. 活字印刷引入简单工厂模式
  9. 如何找回OneNote 误删、丢失的笔记
  10. PPI网络比对文章汇总