我在多边形内生成了一些随机点。我随机选择了其中一个点并想缓冲该点。在下面的情况下,缓冲将应用于所有点,而不是所选点。我需要先为所选点创建一个新的存储层吗?如果是的话,怎么办?
#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:'})
您不必经过中间内存层(尽管您可以)。您不需要做太多改变,只需修改缓冲区处理工具的输入值即可,如下所示。
获取 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:'})'