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。