前言

空间缓冲区分析是地理信息系统中基本的空间操作功能之一,它是根据研究目标的点、线、面实体,在其周围建立一定距离的带状区,用以识别这些目标实体对邻近对象的辐射范围或影响度,以便为某项分析或决策提供依据。

缓冲区根据研究目标的不同,可分为:点目标缓冲区、线目标缓冲区、面目标缓冲区。点目标缓冲区,是以目标点为圆心,缓冲距为半径的圆周所包围的区域;线目标缓冲区,是以目标线为中心线,向双侧或单侧平移一定距离的条状区域;面目标缓冲区,是以目标面的边界线为中心线,向外或向内扩展一定距离所形成的多边形区域(如下图所示)。
基于gdal的空间缓冲区分析(python)_地理信息系统
本文将以线矢量为例来介绍如何建立缓冲区。

矢量数据可视化

输入
基于gdal的空间缓冲区分析(python)_数据可视化_02
输出
基于gdal的空间缓冲区分析(python)_地理信息系统_03

代码

from pathlib import Path
import ogr

def buffer(inShp, fname, bdistance=0.01):
"""
:param inShp: 输入的矢量路径
:param fname: 输出的矢量路径
:param bdistance: 缓冲区距离
:return:
"""
ogr.UseExceptions()
in_ds = ogr.Open(inShp)
in_lyr = in_ds.GetLayer()
# 创建输出Buffer文件
driver = ogr.GetDriverByName('ESRI Shapefile')
if Path(fname).exists():
driver.DeleteDataSource(fname)
# 新建DataSource,Layer
out_ds = driver.CreateDataSource(fname)
out_lyr = out_ds.CreateLayer(fname, in_lyr.GetSpatialRef(), ogr.wkbPolygon)
def_feature = out_lyr.GetLayerDefn()
# 遍历原始的Shapefile文件给每个Geometry做Buffer操作
for feature in in_lyr:
geometry = feature.GetGeometryRef()
buffer = geometry.Buffer(bdistance)
out_feature = ogr.Feature(def_feature)
out_feature.SetGeometry(buffer)
out_lyr.CreateFeature(out_feature)
out_feature = None
out_ds.FlushCache()
del in_ds, out_ds


if __name__ == '__main__':
inShp = './data/shp/bj_line.shp'
fname = 'Buffer.shp'
buffer(inShp, fname)