基于gdal的空间缓冲区分析(python)

前言

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

缓冲区根据研究目标的不同,可分为:点目标缓冲区、线目标缓冲区、面目标缓冲区。点目标缓冲区,是以目标点为圆心,缓冲距为半径的圆周所包围的区域;线目标缓冲区,是以目标线为中心线,向双侧或单侧平移一定距离的条状区域;面目标缓冲区,是以目标面的边界线为中心线,向外或向内扩展一定距离所形成的多边形区域(如下图所示)。
在这里插入图片描述
本文将以线矢量为例来介绍如何建立缓冲区。

矢量数据可视化

输入
在这里插入图片描述
输出
在这里插入图片描述

代码

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)

猜你喜欢

转载自blog.csdn.net/weixin_42990464/article/details/111310000