如何在pyQGIS中缓冲选定点

问题描述 投票:0回答:1

我在多边形内生成了一些随机点。我随机选择了其中一个点并想缓冲该点。在下面的情况下,缓冲将应用于所有点,而不是所选点。我需要先为所选点创建一个新的存储层吗?如果是的话,怎么办?

#Generating random points within an "aoi" polygon file
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:'}) 

#Randomly Choose one of the Points
processing.run("qgis:randomselection", 
               {'INPUT':pnts['OUTPUT'],
                'METHOD':0,'NUMBER':1})

#Buffering the point
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:'})
python buffer qgis pyqgis
1个回答
0
投票

您不必经过中间内存层(尽管您可以)。您不需要做太多改变,只需修改缓冲区处理工具的输入值即可,如下所示。

获取 QgsVectorLayer 实例(此处使用您的原始代码):

'pnts_0 = iface.activeLayer()'

然后设置您的“pnts”输入以仅使用所选功能:

'pnts = QgsProcessingFeatureSourceDefinition(pnts_0.id(), selectedFeaturesOnly=True, featureLimit=-1, geometryCheck=QgsFeatureRequest.GeometryAbortOnInvalid)'

缓冲点

'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:'})'
© www.soinside.com 2019 - 2024. All rights reserved.