You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在pyQGIS中对选中的单个点执行缓冲区分析

问题描述

在多边形内生成若干随机点后,随机选中其中一个点,希望仅对该选中点执行缓冲区分析,但当前代码会对所有点进行缓冲操作。请问是否需要先将选中的点创建为新的内存图层?如果需要,该如何操作?

现有代码
# 在"aoi"多边形文件内生成随机点
pnts = processing.runAndLoadResults("native:randompointsinpolygons", {'INPUT':aoi,
                                                        'POINTS_NUMBER':10,
                                                        'MIN_DISTANCE':0,
                                                        'MIN_DISTANCE_GLOBAL':0,
                                                        'MAX_TRIES_PER_POINT':10,
                                                        'SEED':None,
                                                        'INCLUDE_POLYGON_ATTRIBUTES':True,
                                                        'OUTPUT':'memory:'}) 

# 随机选择一个点
processing.run("qgis:randomselection", 
               {'INPUT':pnts['OUTPUT'],
                'METHOD':0,'NUMBER':1})

# 对点进行缓冲
pnt_buf = processing.runAndLoadResults("native:buffer", 
                          {'INPUT':pnts,
                           'DISTANCE':3000,
                           'SEGMENTS':6,
                           'END_CAP_STYLE':0,
                           'JOIN_STYLE':1,
                           'MITER_LIMIT':3,
                           'DISSOLVE':True,
                           'SEPARATE_DISJOINT':False,
                           'OUTPUT':'memory:'})
解决方案

需要创建新的内存图层。原因是qgis:randomselection仅在原图层上标记选中要素,并未生成独立的选中要素图层,后续缓冲操作默认会处理整个原图层的所有要素。

具体操作步骤:

  • 使用native:saveselectedfeatures工具,将原图层中选中的单个点导出为新的内存图层
  • 基于这个新的内存图层执行缓冲区分析

修改后的完整代码:

# 在"aoi"多边形文件内生成随机点
pnts = processing.runAndLoadResults("native:randompointsinpolygons", {'INPUT':aoi,
                                                        'POINTS_NUMBER':10,
                                                        'MIN_DISTANCE':0,
                                                        'MIN_DISTANCE_GLOBAL':0,
                                                        'MAX_TRIES_PER_POINT':10,
                                                        'SEED':None,
                                                        'INCLUDE_POLYGON_ATTRIBUTES':True,
                                                        'OUTPUT':'memory:'}) 

# 随机选择一个点
processing.run("qgis:randomselection", 
               {'INPUT':pnts['OUTPUT'],
                'METHOD':0,'NUMBER':1})

# 将选中的点导出为新的内存图层
selected_pnt = processing.runAndLoadResults("native:saveselectedfeatures",
                                            {'INPUT':pnts['OUTPUT'],
                                             'OUTPUT':'memory:'})

# 对选中的单个点执行缓冲操作
pnt_buf = processing.runAndLoadResults("native:buffer", 
                          {'INPUT':selected_pnt['OUTPUT'],
                           'DISTANCE':3000,
                           'SEGMENTS':6,
                           'END_CAP_STYLE':0,
                           'JOIN_STYLE':1,
                           'MITER_LIMIT':3,
                           'DISSOLVE':True,
                           'SEPARATE_DISJOINT':False,
                           'OUTPUT':'memory:'})

内容的提问来源于stack exchange,提问作者seak23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 20:12:40