Python与开源GIS:使用OGR生成几何要素对象

Python与开源GIS:使用OGR生成几何要素对象


发布日期: 2017-10-22 更新日期: 2019-10-28 编辑:xuzhiping 浏览次数: 14584

标签:

摘要: Python与开源GIS教程的内容,开发了单独的内容,请打开 https://www.osgeo.cn/pygis/ 查看。 本页面的内容不再更新。 前面部分我们详细地介绍了如何读取矢量数据,包括数据源、图层、要素、几何形状、字段属性等各个部...

Python与开源GIS教程的内容,开发了单独的内容,请打开 https://www.osgeo.cn/pygis/ 查看。
本页面的内容不再更新。



前面部分我们详细地介绍了如何读取矢量数据,包括数据源、图层、要素、几何形状、字段属性等各个部分。 下面来看一下 如何使用OGR来创建矢量数据,亦即使用OGR写GIS矢量文件。首先先看一下写文件的示意。在这里先不对这个图做太多的 解释,但是在后面介绍各个部分的时候,请自行参考此图。

建立空的geometry对象:org.Geometry

ogr中提供了不同的类型,常用的有:ogr.wkbPoint,ogr.wkbLineString,ogr.wkbPolygon。

定义各种不同的geometry使用的方法是不一样的。在构建 这三种不同的要素时,要注意使用的格式。

创建点要素

下面我们先来看一下如何创建一个点。注意,此时只是在内存 中将对象创建出来,跟文件没有关系。

    # -- coding: utf-8 --
    from osgeo import ogr
    point = ogr.Geometry(ogr.wkbPoint)
    point.AddPoint(10,20)
    print(type(point))
    print(point)

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

创建线要素

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

    from osgeo import ogr
    line = ogr.Geometry(ogr.wkbLineString)
    line.AddPoint(10,20)
    line.AddPoint(20,30)
    line.AddPoint(10,30)
    print(type(line))
    print(line)

可以使用线对象的SetPoint方法来修改点的坐标,譬如:

    line.SetPoint(1,50,50)
    print(line)

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

    print line.GetPointCount()

读取0号点的x坐标和y坐标

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

创建多边形要素

创建多边形要素与创建点和线的方法的区别就比较大了。新建多边形,首先要新建环(ring),然后把环添加到多 边形对象中。那么怎样创建一个ring呢?这个与创建线 比较类似:先新建一个ring对象,然后向里面逐个添加点。

    from osgeo import ogr
    ring = ogr.Geometry(ogr.wkbLinearRing)
    ring.AddPoint(10,10)
    ring.AddPoint(50,0)
    ring.AddPoint(50,50)
    ring.AddPoint(0,10)

与创建线不同的是,ring是需要封闭的,这可以使用 CloseRings()方法,或者将最后一个点的坐标设置成 与第一个点相同。一般情况下,最好是使用 CloseRings() 方法。

    ring.CloseRings()

然后,使用下面的语句,将ring对象添加到多边形中。

    polygon = ogr.Geometry(ogr.wkbPolygon)
    polygon.AddGeometry(outring)
    polygon.AddGeometry(inring)

对于polygon对象,没法直接打印它里面的坐标,而是需要先获取它其中的几何对象,也就是ring。

    ring = polygon.GetGeometryRef(0)
    print(outring)

这样,我们就学会了使用OGR创建最简单的点、线、多边三种几何形状了。

返回目录:Python与开源GIS

关注公众号
获取免费资源

随机推荐


Copyright © Since 2014. 开源地理空间基金会中文分会 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org