如何在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
相关产品推荐
相关产品推荐

