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

本文介绍了如何使用OGR库在Python中创建新的ESRIShapefile文件并写入矢量数据。首先,创建数据源,然后创建图层并定义几何类型。接着,添加字段和特征,包括设定字段值和几何形状。最后,将特征写入图层并保存到磁盘。由于未添加投影信息,生成的文件在ArcMap中打开将是无投影的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇博客介绍了如何使用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 ogr

driver = 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常量
IntegerOFTInteger
List of integersOFTIntegerList
Floating point numberOFTReal
List of floating point numbersOFTRealList
StringOFTString
List of stringsOFTStringList
DateOFTDate
Time of dayOFTTime
Date and timeOFTDateTime
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常量

PointwkbPoint
MultipointwkbMultiPoint
LinewkbLineString
MultilinewkbMultiLineString
PolygonwkbPolygon
MultipolygonwkbMultiPolygon
Unknown geometry typewkbUnknown(图层如果有多种几何类型就返回wkbUnknown)
No geometrywkbNone

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 ogr

driver = 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,将数据写入磁盘中。

ds2.Destroy()

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值