# -*- coding: utf-8 -*- from qgis.analysis import ( QgsGeometrySnapper ) from qgis.core import ( QgsFeature, QgsGeometry, QgsProject, QgsVectorLayer, ) def create_scratch_reference_layer(): """Create a scratch reference layer to snap to""" r1 = QgsVectorLayer( path='Polygon', baseName='x', providerLib='memory' ) refGeom = QgsGeometry.fromWkt( wkt="Polygon((0 0, 10 0, 10 10, 0 10, 0 0))" ) ff = QgsFeature( id=0 ) ff.setGeometry( geometry=refGeom ) flist = [ff] r1.dataProvider().addFeatures( flist=flist ) # QgsProject.instance().addMapLayer(mapLayer=r1) return r1 polygonGeom = QgsGeometry.fromWkt( wkt="Polygon((0.1 -0.1, 10.1 0, 9.9 10.1, 0 10, 0.1 -0.1))" ) snapper = QgsGeometrySnapper( referenceSource=create_scratch_reference_layer() ) result = snapper.snapGeometry( geometry=polygonGeom, snapTolerance=1 ) print("result =", result)