数据集
创建点状数据集
from osgeo import ogrimport os,mathdriver = ogr.GetDriverByName("ESRI Shapefile")extfile = 'point_demo.shp'point_coors = [[300,450], [750, 700], [1200, 450], [750, 200], [750, 450]]print point_coorsdriver = 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 ogrimport os,mathdriver = ogr.GetDriverByName("ESRI Shapefile")extfile = 'line_demo.shp'point_coors = [300,450, 750, 700, 1200, 450, 750, 200]print point_coorsdriver = 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()
创建多边形数据集
from osgeo import ogrimport os,mathdriver = 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/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())feat.SetGeometry(geom)layernew.CreateFeature(feat)newds.Destroy()
属性
创建属性
from osgeo import ogrimport os,mathdriver = ogr.GetDriverByName("ESRI Shapefile") #shp驱动器extfile = 'rect_field_demo.shp' #输出的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) #创建图层# 创建字段fieldcnstr = ogr.FieldDefn("fd",ogr.OFTString) #创建字段(字段名,类型)fieldcnstr.SetWidth(32) #设置宽度layernew.CreateField(fieldcnstr) #将字段设置到layerfieldf = ogr.FieldDefn("f",ogr.OFTReal) layernew.CreateField(fieldf)# wkt格式的polygonwkt = '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) #根据wkt创建geometryfeat = ogr.Feature( layernew.GetLayerDefn() ) #从layer中得到feature的要求,创建一个Feature对象feat.SetField('fd',"这里是字段的值") #设置字段值feat.SetGeometry(geom) #设置要素的geometry属性layernew.CreateFeature(feat) #在图层中创建该featurenewds.Destroy() #删除(包括保存)
Geometry
创建点Geometry
from osgeo import ogrpoint = ogr.Geometry(ogr.wkbPoint)point.AddPoint(10,20) #向Point添加多个点,不会报错,但最终只会用最后添加的点
创建线Geometry
from osgeo import ogrline = ogr.Geometry(ogr.wkbLineString) # 创建line.AddPoint(10, 20) # 添加点line.SetPoint(1, 50, 50) # 修改点坐标line.GetPointCount() # 得到所有点数目line.GetX(0); line.GetY(0) # 读取0号点的坐标
创建多边形Geometry
from osgeo ipmort ogr# 创建环ring = ogr.Geometry(ogr.wkbLinearRing) #创建ring.AddPoint(10,10) #添加点ring.CloseRings() #闭合 或 添加的最后一个点和第一个相同# 将环添加到多边形中polygon = ogr.Geometry(ogr.wkbPolygon)polygon.AddGeometry(outring)polygon.AddGeometry(inring)ring = polygon.GetGeometryRef(0) #得到多边形内的几何对象