
Python与开源GIS:使用OGR创建数据集的几何形状.docx
4页Python与开源GIS :使用OGR创建数据集的几何形状2012-05-2514:52作者:bukunu来源:本站浏览:648views我要评论字号:大中小摘要:下面我们来看一下使用OGR创建数据集的更常用的情形这一部分重点说明一下如 何使用OGR创建数据集的几何形状,对于字段、属性的处理,放到后面对于创建Geometry 来讲,wkt是最直观的wkt是最简单的字符串格式,Python提供了丰富的函数来对字符串进 行...下面我们来看一下使用OGR创建数据集的更常用的情形这一部分重点说明一下如何 使用OGR创建数据集的几何形状,对于字段、属性的处理,放到后面对于创建Geometry来讲,wkt是最直观的wkt是最简单的字符串格式,Python提 供了丰富的函数来对字符串进行处理使用wkt创建矢量数据集与使用拷贝的方法创建数据集的基本步骤是一样的首先是创 建Driver,然后创建dataSource,再创建Layer,接下来就创建Feature 了这是分别创建点、线、与多边形,使用exte nt变量来存储多边形的四个角点,点、线 的坐标根据exte nt变量来生成卜面先看一下生成的数据的图,可能会更加有助于理解。
创建点状数据集下面是生成点状要素的Python代码一般情况不会生成一个单独的点,需要使用For循环来对数组参数进行遍历,得到想要的结果1«| I J1 from osgeo import ogr2 import os,math3 driver = ogr.GetDriverByName("ESRI Shapefile")45 extfile = 'point_demo.shp'6 point_coors = [[300,450], [750, 700], [1200, 450], [750, 200], [750, 450]]7 print point_coors8 driver = ogr.GetDriverByName("ESRI Shapefile")9 if os.access( extfile, os.F_OK ):10 driver.DeleteDataSource( extfile )11 newds = driver.CreateDataSource(extfile)12 layernew = newds.CreateLayer('point',None,ogr.wkbPoint)13 for aa in point_coors:14 wkt = 'POINT (' + str(aa[0]) + ' ' + str(aa[1]) + ')'15 geom = ogr.CreateGeometryFromWkt(wkt)16 feat = ogr.Feature(layernew.GetLayerDefn())17 feat.SetGeometry(geom)18 layernew.CreateFeature(feat)1920 newds.Destroy()创建线状数据集下面解释一下如何单独创建一个线状数据集。
1 from osgeo import ogr2 import os,math3 driver = ogr.GetDriverByName("ESRI Shapefile")45 extfile = 'line_demo.shp'6 point_coors = [300,450, 750, 700, 1200, 450, 750, 200]7 print point_coors8 driver = ogr.GetDriverByName("ESRI Shapefile")9 if os.access( extfile, os.F_OK ):10 driver.DeleteDataSource( extfile )11 newds = driver.CreateDataSource(extfile)12 layernew = newds.CreateLayer('point',None,ogr.wkbLineString)1314 wkt = 'LINESTRING (%f %f,%f %f,%f %f,%f %f,%f %f)' % (point_coors[0],point_coors[1],15 point_coors[2],point_coors[3], point_coors[4],point_coors[5],16 point_coors[6],point_coors[7], point_coors[0],point_coors[1])17 print(wkt)18 geom = ogr.CreateGeometryFromWkt(wkt)19 feat = ogr.Feature(layernew.GetLayerDefn())20 feat.SetGeometry(geom)21 layernew.CreateFeature(feat)22 newds.Destroy()注意坐标的格式:不同点的坐标之间用:”分割,坐标的不同维度用空格分割。
创建多边形数据集下面解释一下如何单独创建一个矢量的矩形,这里使用wkt来定义一个矩形矩形的范 围由extend变量定义,把矩形四个角点坐标根据extend生成,存储到wkt变量, 通过CreateGeometryFromWkt()创建了一个矩形形状,然后放入Feature中,最后用调 用Destroy将数据写入磁盘就构成了一个矩形的数据集1 from osgeo import ogr2 import os,math3 driver = ogr.GetDriverByName("ESRI Shapefile")45 extfile = 'rect_demo.shp'6 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/2th = width/2extnew = extent[0]+twwkt = '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())7891011121314151617181920212223242526feat.SetGeometry(geom) layernew.CreateFeature(feat) newds.Destroy()。












