摘要: Python与开源GIS教程的内容,开发了单独的内容,请打开 https://www.osgeo.cn/pygis/ 查看。 本页面的内容不再更新。 下面我们来看一下使用OGR创建数据集的更常用的情形。这一部 分重点说明一下如何使用OGR创建...
本页面的内容不再更新。
下面我们来看一下使用OGR创建数据集的更常用的情形。这一部 分重点说明一下如何使用OGR创建数据集的几何形状,对于字段、属性的处理,放到后面。
对于创建Geometry来讲,wkt是最直观的。wkt是最简单的字符 串格式,Python提供了丰富的函数来对字符串进行处理。 使用 wkt创建矢量数据集与使用拷贝的方法创建数据集的基本步骤是 一样的。首先是创建Driver,然后创建dataSource,再创建 Layer,接下来就创建Feature了。
这是分别创建点、线、与多边形,使用extent变量来存储多边 形的四个角点,点、线的坐标根据extent变量来生成。下面先看一下生成的数据的图,可能会更加有助于理解。
创建点状数据集
下面是生成点状要素的Python代码。 一般情况不会生成一个 单独的点, 需要使用For循环来对数组参数进行遍历,得到 想要的结果。
from osgeo import ogr import os,math driver = ogr.GetDriverByName("ESRI Shapefile") extfile = 'point_demo.shp' point_coors = [[300,450], [750, 700], [1200, 450], [750, 200], [750, 450]] print point_coors driver = ogr.GetDriverByName("ESRI Shapefile") if os.access( extfile, os.F_OK ): driver.DeleteDataSource( extfile ) newds = driver.CreateDataSource(extfile) layernew = newds.CreateLayer('point',None,ogr.wkbPoint) for aa in point_coors: wkt = 'POINT (' + str(aa[0]) + ' ' + str(aa[1]) + ')' geom = ogr.CreateGeometryFromWkt(wkt) feat = ogr.Feature(layernew.GetLayerDefn()) feat.SetGeometry(geom) layernew.CreateFeature(feat) newds.Destroy()
创建线状数据集
下面解释一下如何单独创建一个线状数据集。
from osgeo import ogr import os,math driver = ogr.GetDriverByName("ESRI Shapefile") extfile = 'line_demo.shp' point_coors = [300,450, 750, 700, 1200, 450, 750, 200] print point_coors driver = ogr.GetDriverByName("ESRI Shapefile") if os.access( extfile, os.F_OK ): driver.DeleteDataSource( extfile ) newds = driver.CreateDataSource(extfile) layernew = newds.CreateLayer('point',None,ogr.wkbLineString) wkt = 'LINESTRING (%f %f,%f %f,%f %f,%f %f,%f %f)' % (point_coors[0],point_coors[1], point_coors[2],point_coors[3], point_coors[4],point_coors[5], point_coors[6],point_coors[7], point_coors[0],point_coors[1]) print(wkt) geom = ogr.CreateGeometryFromWkt(wkt) feat = ogr.Feature(layernew.GetLayerDefn()) feat.SetGeometry(geom) layernew.CreateFeature(feat) newds.Destroy()
注意坐标的格式:不同点的坐标之间用“,”分割,坐标的不同 维度用空格分割。
创建多边形数据集
下面解释一下如何单独创建一个矢量的矩形,这里使用wkt来定义 一个矩形。矩形的范围由extend变量定义,把矩形四个角点坐标 根据extend生成,存储到wkt变量, 通过CreateGeometryFromWkt() 创建了一个矩形形状,然后放入Feature中,最后用调用Destroy(),将数据写入磁盘。就构成了一个矩形的数据集。
from osgeo import ogr import os,math driver = ogr.GetDriverByName("ESRI Shapefile") extfile = 'rect_demo.shp' if os.access( extfile, os.F_OK ): driver.DeleteDataSource( extfile ) extent = [400, 1100, 300, 600] newds = driver.CreateDataSource(extfile) layernew = newds.CreateLayer('rect',None,ogr.wkbPolygon) width = math.fabs(extent[1]-extent[0]) height = math.fabs(extent[3]-extent[2]) tw = width/2 th = width/2 extnew = extent[0]+tw wkt = 'POLYGON ((%f %f,%f %f,%f %f,%f %f,%f %f))' % (extent[0],extent[3], extent[1],extent[3], extent[1],extent[2], extent[0],extent[2], extent[0],extent[3]) geom = ogr.CreateGeometryFromWkt(wkt) feat = ogr.Feature(layernew.GetLayerDefn()) feat.SetGeometry(geom) layernew.CreateFeature(feat) newds.Destroy()
返回目录:Python与开源GIS