def snap(self, pos):
     """
     Snap to nearby points on the wastewater node layer which may be used as connection
     points for this reach.
     :param pos: The position to snap
     :return: The snapped position
     """
     snapper = QgsSnapper(self.iface.mapCanvas().mapSettings())
     snap_nodelayer = QgsSnapper.SnapLayer()
     snap_nodelayer.mLayer = self.nodeLayer
     snap_nodelayer.mTolerance = 10
     snap_nodelayer.mUnitType = QgsTolerance.Pixels
     snap_nodelayer.mSnapTo = QgsSnapper.SnapToVertex
     snapper.setSnapLayers([snap_nodelayer])
     (_, snappedPoints) = snapper.snapPoint(pos)
     if snappedPoints:
         self.currentSnappingResult = snappedPoints[0]
         return self.currentSnappingResult.snappedVertex
     else:
         snapper = QgsSnapper(self.iface.mapCanvas().mapSettings())
         snap_reachlayer = QgsSnapper.SnapLayer()
         snap_reachlayer.mLayer = self.reachLayer
         snap_reachlayer.mTolerance = 10
         snap_reachlayer.mUnitType = QgsTolerance.Pixels
         snap_reachlayer.mSnapTo = QgsSnapper.SnapToVertexAndSegment
         snapper.setSnapLayers([snap_reachlayer])
         (_, snappedPoints) = snapper.snapPoint(pos)
         if snappedPoints:
             self.currentSnappingResult = snappedPoints[0]
             return self.currentSnappingResult.snappedVertex
         else:
             self.currentSnappingResult = None
             return pos
Ejemplo n.º 2
0
 def getSnapper(self):
     """
     Getter for the snapper
     """
     self.snapper = QgsSnapper(self.iface.mapCanvas().mapRenderer())
     snap_layer = QgsSnapper.SnapLayer()
     snap_layer.mLayer = self.nodeLayer
     snap_layer.mTolerance = 10
     snap_layer.mUnitType = QgsTolerance.Pixels
     snap_layer.mSnapTo = QgsSnapper.SnapToVertex
     self.snapper.setSnapLayers([snap_layer])
     return self.snapper
Ejemplo n.º 3
0
 def getFeatures(self, pixPoint):
     snapper = QgsSnapper(self.mapCanvas.mapRenderer())
     snapper.setSnapLayers([self.snapLayer])
     snapper.setSnapMode(QgsSnapper.SnapWithResultsWithinTolerances)
     ok, snappingResults = snapper.snapPoint(pixPoint, [])
     # output snapped features
     features = []
     alreadyGot = []
     for result in snappingResults:
         featureId = result.snappedAtGeometry
         f = QgsFeature()
         if featureId not in alreadyGot:
             if result.layer.getFeatures(QgsFeatureRequest().setFilterFid(
                     featureId)).nextFeature(f) is not False:
                 features.append(QgsFeature(f))
                 alreadyGot.append(featureId)
     return features