对于OGR库对shp文件的基本读写没有问题,整理一些对geometry简单的小操作
代码功能
1、面矢量转线:主要理解面由ring构成,提取ring直接写入线矢量文件就OK(或者构建多线几何体,将所有ring都添加进去,完成后可以在arcmap中用拆分多部件要素拆分)
2、读取面矢量文件,输出四角多边形:获取图层四角范围,直接写入ring
3、输入面矢量,输出它的凸多边形:关键在于创建多面几何体,把每一个feature都写入,geomcolle.ConvexHull()构造凸多边形,写入图层
4、读取面矢量文件中,每个面的质心并保存为点矢量文件
代码及结果
1、面转线
##面转线方法2:一个面对应一个线要素
import ogr,osr,os
def pol2line(polyfn,linefn):
driver = ogr.GetDriverByName('ESRI Shapefile')
polyds = ogr.Open(polyfn,0)
polyLayer = polyds.GetLayer()
#创建输出文件
if os.path.exists(linefn):
driver.DeleteDataSource(linefn)
lineds =driver.CreateDataSource(linefn)
linelayer = lineds.CreateLayer(linefn,geom_type = ogr.wkbLineString)
featuredefn = linelayer.GetLayerDefn()
#获取ring到几何体
#geomline = ogr.Geometry(ogr.wkbGeometryCollection)
for feat in polyLayer:
geom = feat.GetGeometryRef()
ring = geom.GetGeometryRef(0)
#geomcoll.AddGeometry(ring)
outfeature = ogr.Feature(featuredefn)
outfeature.SetGeometry(ring)
linelayer.CreateFeature(outfeature)
outfeature = None
if __name__ == '__main__':
os.chdir(r'F:\Python+gdal\CookBook\data')
pol2line('cache_towns.shp','poly2line_2.shp')
2、面转单多边形
##获取已有shp的四角范围&#x