GDAL python教程基础篇(3)——创建geometry对象

1. 创建点要素

新建点point,使用方法AddPoint( <x>, <y>, [<z>])。其中的z坐标一般是省略的,默认值是0

例如:

>>> from osgeo import ogr
>>> point = ogr.Geometry(ogr.wkbPoint)
>>> point.AddPoint(10,20)
>>> print(point)
POINT (10 20 0)

注意,若向point中添加多个点,并不会出错, 但结果只会是最后添加的点。

2. 创建线要素

新建Line方法与点基本一致。与点不同的是,线需要添加多个点。

使用**AddPoint(<x>, <y>, [<z>])**添加点

使用**SetPoint(<index>, <x>, <y>, [<z>])**更改点的坐标

例如下面这段代码,更改了0号点的坐标:

>>> from osgeo import ogr
>>> line = ogr.Geometry(ogr.wkbLineString)
>>> line.AddPoint(10,10)
>>> line.AddPoint(20,20)
>>> print (line)
LINESTRING (10 10 0,20 20 0)

使用线对象的SetPoint修改点坐标,例如:

>>> print (line)
LINESTRING (10 10 0,20 20 0)

另外,还有一些其他有用的函数,如统计所有点数量:

>>> print (line.GetPointCount())
2

又如读取0号点的x坐标和y坐标:

>>> print (line.GetX(0))
10.0
>>> print (line.GetY(0))
10.0

3. 创建线环(Ring)

创建线环(Ring)与创建线(Line)类似,先创建一个ring对象,然后向里逐个添加点:

>>> ring = ogr.Geometry(ogr.wkbLinearRing)
>>> ring.AddPoint(0,0)
>>> ring.AddPoint(100,0)
>>> ring.AddPoint(100,100)
>>> ring.AddPoint(0,100)

在结尾处,用命令CloseRings闭合ring,或者设定最后一个点坐标与第一个点相同,也可以闭合ring。

>>> ring.CloseRings()
>>> print(ring)
LINEARRING (0 0 0,100 0 0,100 100 0,0 100 0,0 0 0)

可以看出,最后点坐标与起始点坐标是一致的。

4. 创建多边形(Polygon)

创建Polygon与创建Point与Line的区别较大。创建多边形,首先要创建ring,然后把ring添加到多边形中。下面是创建Polygon的例子,由两层ring构成。

>>> outring = ogr.Geometry(ogr.wkbLinearRing)
>>> outring.AddPoint(0,0)
>>> outring.AddPoint(100,0)
>>> outring.AddPoint(100,100)
>>> outring.AddPoint(0,100)
>>> outring.AddPoint(0,0)

这里将最后点坐标设置与起始点相同,来闭合ring:

>>> inring = ogr.Geometry(ogr.wkbLinearRing)
>>> inring.AddPoint(25,25)
>>> inring.AddPoint(75,25)
>>> inring.AddPoint(75,75)
>>> inring.AddPoint(25,75)
>>> inring.CloseRings()
>>> polygon = ogr.Geometry(ogr.wkbPolygon)
>>> polygon.AddGeometry(outring)
>>>
0
>>> polygon.AddGeometry(inring)
0

最后三行命令比较重要:先建立一个polygon对象,然后再添加外层ring和内层ring。

若查看polygon有几个ring,可运行下列代码:

>>> print (polygon.GetGeometryCount())
2

对于polygon对象,无法直接输出坐标,而是先获取几何对象,也就是ring。从polygon中读取ring、index的顺序与创建polygon的顺序相同。

>>> outring2 = polygon.GetGeometryRef(0)
>>> inring2 = polygon.GetGeometryRef(1)
>>> print(outring2)
LINEARRING (0 0 0,100 0 0,100 100 0,0 100 0,0 0 0)
>>> print(inring2)
LINEARRING (25 25 0,75 25 0,75 75 0,25 75 0,25 25 0)

5. 创建复合几何形状(MultiGeometry)

运用AddGeometry方法将普通的几何形状如MultiPoint, MultiLineString, MultiPolygon添至复合几何形状中:

>>> multipoint = ogr.Geometry(ogr.wkbMultiPoint)
>>> point = ogr.Geometry(ogr.wkbPoint)
>>> point.AddPoint(10,10)
>>> multipoint.AddGeometry(point)
0
>>> point.AddPoint(20,20)
>>> multipoint.AddGeometry(point)
0

读取MultiGeometry的Geometry,其方法与polygon读取ring是一样的,因此Polygon是一种内置的MultiGeometry。

注意:不要删除一个已存在Feature geometry,可能会导致python崩溃,可以删除脚本运行期间创建的Geometry,可能是手动创建,或者调用其他函数自动创建的。就算这个Geometry已经创建了其它的Feature,你还是可以删除它:

例如:Polygon.Destroy()
对于创建Geometry来讲,wkt是比较直观的。wkt是最简单的字符串格式,而且Python提供了大量的函数来处理字符串。使用wkt创建矢量数据集与拷贝创建数据集的基本步骤是一致的。首先是创建Driver,按照顺序依次创建:dataSource,Layer,Feature。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值