def click_button_snapping(self, point, btn): # @UnusedVariable if not self.layer_dimensions: return layer = self.layer_dimensions self.iface.setActiveLayer(layer) layer.startEditing() snapper = QgsMapCanvasSnapper(self.canvas) map_point = self.canvas.getCoordinateTransform().transform(point) x = map_point.x() y = map_point.y() event_point = QPoint(x, y) # Snapping (retval, result) = snapper.snapToBackgroundLayers( event_point) # @UnusedVariable # That's the snapped point if result: # Check feature for snapped_point in result: if snapped_point.layer == self.layer_node: feat_type = 'node' elif snapped_point.layer == self.layer_connec: feat_type = 'connec' else: continue # Get the point point = QgsPoint(snapped_point.snappedVertex) snapp_feature = next( snapped_point.layer.getFeatures( QgsFeatureRequest().setFilterFid( snapped_point.snappedAtGeometry))) element_id = snapp_feature.attribute(feat_type + '_id') # Leave selection snapped_point.layer.select([snapped_point.snappedAtGeometry]) # Get depth of the feature if self.project_type == 'ws': fieldname = "depth" elif self.project_type == 'ud' and feat_type == 'node': fieldname = "ymax" elif self.project_type == 'ud' and feat_type == 'connec': fieldname = "connec_depth" sql = ("SELECT " + fieldname + "" " FROM " + self.schema_name + "." + feat_type + "" " WHERE " + feat_type + "_id = '" + element_id + "'") row = self.controller.get_row(sql) if not row: return utils_giswater.setText(self.dialog, "depth", row[0]) utils_giswater.setText(self.dialog, "feature_id", element_id) utils_giswater.setText(self.dialog, "feature_type", feat_type.upper())
def action_rotation(self): # Set map tool emit point and signals self.emit_point = QgsMapToolEmitPoint(self.canvas) self.canvas.setMapTool(self.emit_point) self.snapper = QgsMapCanvasSnapper(self.canvas) self.canvas.xyCoordinates.connect(self.action_rotation_mouse_move) self.emit_point.canvasClicked.connect( self.action_rotation_canvas_clicked) # Store user snapping configuration self.snapper_manager = SnappingConfigManager(self.iface) self.snapper_manager.store_snapping_options() # Clear snapping self.snapper_manager.clear_snapping() # Set snapping layer = self.controller.get_layer_by_tablename("v_edit_arc") self.snapper_manager.snap_to_layer(layer) layer = self.controller.get_layer_by_tablename("v_edit_connec") self.snapper_manager.snap_to_layer(layer) layer = self.controller.get_layer_by_tablename("v_edit_node") self.snapper_manager.snap_to_layer(layer) # Set marker color = QColor(255, 100, 255) self.vertex_marker = QgsVertexMarker(self.canvas) self.vertex_marker.setIconType(QgsVertexMarker.ICON_CROSS) self.vertex_marker.setColor(color) self.vertex_marker.setIconSize(15) self.vertex_marker.setPenWidth(3)
def __init__(self, canvas, areaType): QgsMapTool.__init__(self, canvas) self.mCanvas = canvas self.areaType = areaType self.annotation = None self.rubberBand = QgsRubberBand(canvas, QGis.Point) self.rubberBand.setColor(Qt.red) self.rubberBand.setWidth(10) self.rubberBandClick = QgsRubberBand(canvas, QGis.Point) self.rubberBandClick.setColor(Qt.green) self.rubberBandClick.setWidth(3) self.obstaclesLayerList = QgisHelper.getSurfaceLayers(SurfaceTypes.Obstacles) self.demLayerList = QgisHelper.getSurfaceLayers(SurfaceTypes.DEM) self.mRubberBand = None self.mRubberBand0 = QgsRubberBand( self.mCanvas, QGis.Polygon ) self.mCursor = Qt.ArrowCursor self.mFillColor = QColor( 254, 178, 76, 63 ) self.mBorderColour = QColor( 254, 58, 29, 100 ) self.mRubberBand0.setBorderColor( self.mBorderColour ) self.polygonGeom = None self.drawFlag = False self.mSnapper = QgsMapCanvasSnapper(canvas) self.resultPolylineArea = PolylineArea() # self.constructionLayer = constructionLayer self.menuString = "" self.isPrimaryPolylineStarted = False self.primaryPolyline = PolylineArea()
def __init__(self, iface, controller): """ Class constructor """ self.iface = iface self.canvas = self.iface.mapCanvas() self.controller = controller # Call superclass constructor and set current action QgsMapTool.__init__(self, self.canvas) self.dragging = False # Vertex marker color = QColor(255, 100, 255) self.vertex_marker = QgsVertexMarker(self.canvas) self.vertex_marker.setIconType(QgsVertexMarker.ICON_CIRCLE) self.vertex_marker.setColor(color) self.vertex_marker.setIconSize(15) self.vertex_marker.setPenWidth(3) # Rubber band self.rubber_band = QgsRubberBand(self.canvas, QGis.Line) self.rubber_band.setColor(color) self.rubber_band.setWidth(1) # Select rectangle self.select_rect = QRect() # TODO: Parametrize self.connec_group = ["Wjoin", "Tap", "Fountain", "Greentap"] #self.snapperManager = SnappingConfigManager(self.iface) self.snapper = QgsMapCanvasSnapper(self.canvas)
def init_config_form(self): ''' Custom form initial configuration ''' # Set snapping self.canvas = self.iface.mapCanvas() self.emit_point = QgsMapToolEmitPoint(self.canvas) self.canvas.setMapTool(self.emit_point) self.snapper = QgsMapCanvasSnapper(self.canvas) # Vertex marker self.vertex_marker = QgsVertexMarker(self.canvas) self.vertex_marker.setColor(QColor(255, 0, 255)) self.vertex_marker.setIconSize(11) self.vertex_marker.setIconType( QgsVertexMarker.ICON_CROSS) # or ICON_CROSS, ICON_X, ICON_BOX self.vertex_marker.setPenWidth(3) btn_orientation = self.dialog.findChild(QPushButton, "btn_orientation") btn_orientation.clicked.connect(self.orientation) self.set_icon(btn_orientation, "133") btn_snapping = self.dialog.findChild(QPushButton, "btn_snapping") btn_snapping.clicked.connect(self.snapping) self.set_icon(btn_snapping, "129") # Set layers dimensions, node and connec self.layer_dimensions = self.controller.get_layer_by_tablename( "v_edit_dimensions") self.layer_node = self.controller.get_layer_by_tablename("v_edit_node") self.layer_connec = self.controller.get_layer_by_tablename( "v_edit_connec") self.create_map_tips()
def __init__(self, iface, controller, group): """ Class constructor """ self.group_layers = group self.iface = iface self.canvas = self.iface.mapCanvas() # Call superclass constructor and set current action QgsMapTool.__init__(self, self.canvas) self.controller = controller self.rubber_band = QgsRubberBand(self.canvas, QGis.Polygon) mFillColor = QColor(254, 178, 76, 63) self.rubber_band.setColor(mFillColor) self.rubber_band.setWidth(1) self.reset() self.snapper = QgsMapCanvasSnapper(self.canvas) self.selected_features = [] # Vertex marker self.vertex_marker = QgsVertexMarker(self.canvas) self.vertex_marker.setColor(QColor(255, 0, 255)) self.vertex_marker.setIconSize(11) self.vertex_marker.setIconType( QgsVertexMarker.ICON_CROSS) # or ICON_CROSS, ICON_X, ICON_BOX self.vertex_marker.setPenWidth(3)
def __init__(self, iface, controller, layers, mincut=None, parent_manage=None, table_object=None): """ Class constructor """ self.layers = layers self.iface = iface self.canvas = self.iface.mapCanvas() self.mincut = mincut self.parent_manage = parent_manage self.table_object = table_object # Call superclass constructor and set current action QgsMapTool.__init__(self, self.canvas) self.controller = controller self.rubber_band = QgsRubberBand(self.canvas, QGis.Polygon) self.rubber_band.setColor(QColor(255, 100, 255)) self.rubber_band.setFillColor(QColor(254, 178, 76, 63)) self.rubber_band.setWidth(1) self.reset() self.snapper = QgsMapCanvasSnapper(self.canvas) self.selected_features = []
def __init__(self, iface, settings, action, index_action): """ Class constructor """ self.iface = iface self.canvas = self.iface.mapCanvas() self.settings = settings self.show_help = bool(int(self.settings.value('status/show_help', 1))) self.index_action = index_action self.layer_arc = None self.layer_connec = None self.layer_node = None self.layer_arc_man = None self.layer_connec_man = None self.layer_node_man = None self.layer_gully_man = None self.schema_name = None self.controller = None self.dao = None # Call superclass constructor and set current action QgsMapTool.__init__(self, self.canvas) self.setAction(action) # Snapper self.snapper_manager = SnappingConfigManager(self.iface) self.snapper = QgsMapCanvasSnapper(self.canvas) # Change map tool cursor self.cursor = QCursor() self.cursor.setShape(Qt.CrossCursor) # Get default cursor self.std_cursor = self.parent().cursor() # Set default vertex marker color = QColor(255, 100, 255) self.vertex_marker = QgsVertexMarker(self.canvas) self.vertex_marker.setIconType(QgsVertexMarker.ICON_CIRCLE) self.vertex_marker.setColor(color) self.vertex_marker.setIconSize(15) self.vertex_marker.setPenWidth(3) # Set default rubber band color_selection = QColor(254, 178, 76, 63) self.rubber_band = QgsRubberBand(self.canvas, QGis.Polygon) self.rubber_band.setColor(color) self.rubber_band.setFillColor(color_selection) self.rubber_band.setWidth(1) self.reset() self.force_active_layer = True # Set default encoding reload(sys) sys.setdefaultencoding('utf-8') #@UndefinedVariable
def __init__(self, canvas, distance): self.mCanvas = canvas QgsMapTool.__init__(self, canvas) self.mCursor = Qt.ArrowCursor self.mRubberBand = None self.mDragging = False self.mSelectRect = QRect() self.rubberBandLine = None self.distance = distance self.mSnapper = QgsMapCanvasSnapper(canvas)
def __init__(self, iface): self.iface = iface self.canvas = self.iface.mapCanvas() QgsMapTool.__init__(self, self.canvas) # Snapper object that reads the settings from project and applies to the map canvas self._snapper = QgsMapCanvasSnapper(self.canvas) # Dialog for setting textual attributes of the spatial unit being digitized. self._editorWidget = None # Initial context menu state of the map canvas self._mpCanvasContentMenuPolicy = self.canvas.contextMenuPolicy()
def __init__(self, canvas, disType = DistanceUnits.M): ''' Constructor ''' self.canvas = canvas QgsMapTool.__init__(self, self.canvas) self.mSnapper = QgsMapCanvasSnapper(self.canvas) self.rubberBand = QgsRubberBand(self.canvas,QGis.Line) self.rubberBand.setColor(Qt.red) self.rubberBand.setWidth(1) self.rubberBandPt = QgsRubberBand(canvas, QGis.Point) self.rubberBandPt.setColor(Qt.red) self.rubberBandPt.setWidth(10) self.type = disType self.reset()
def __init__(self, canvas, areaType): self.mCanvas = canvas self.areaType = areaType QgsMapTool.__init__(self, canvas) self.mCursor = Qt.ArrowCursor self.mRubberBand = None self.mDragging = False self.mSelectRect = QRect() self.mRubberBandResult = None self.mSnapper = QgsMapCanvasSnapper(canvas) self.lineCount = 0 self.resultGeomList = [] self.geomList = [] self.area = None self.isFinished = False
def __init__(self, iface): ''' Class constructor ''' self.iface = iface self.canvas = self.iface.mapCanvas() self.layer_arc = None self.layer_connec = None self.layer_node = None self.previous_snapping = None self.controller = None # Snapper self.snapper = QgsMapCanvasSnapper(self.canvas) proj = QgsProject.instance() proj.writeEntry('Digitizing', 'SnappingMode', 'advanced')
def activate_snapping_node2(self): # Create the appropriate map tool and connect the gotPoint() signal. self.emit_point = QgsMapToolEmitPoint(self.canvas) self.canvas.setMapTool(self.emit_point) self.snapper = QgsMapCanvasSnapper(self.canvas) # Get layer 'v_edit_node' layer = self.controller.get_layer_by_tablename("v_edit_node", log_info=True) if layer: self.layer_valve_analytics = layer self.canvas.connect(self.canvas, SIGNAL("xyCoordinates(const QgsPoint&)"), self.mouse_move) self.emit_point.canvasClicked.connect(self.snapping_node2)
def __init__(self, canvas, txtXCoord, txtYCoord, annotation=None): self.canvas = canvas self.txtXCoord = txtXCoord self.txtYCoord = txtYCoord QgsMapToolEmitPoint.__init__(self, self.canvas) self.annotation = annotation self.mSnapper = QgsMapCanvasSnapper(canvas) self.rubberBand = QgsRubberBand(canvas, QGis.Point) self.rubberBand.setColor(Qt.red) self.rubberBand.setWidth(10) self.rubberBandClick = QgsRubberBand(canvas, QGis.Point) self.rubberBandClick.setColor(Qt.green) self.rubberBandClick.setWidth(3) # lblDoc = QTextDocument(label) # self.annotation.setDocument(lblDoc) # self.annotation.setFrameBackgroundColor(QColor(0,0,0,0)) # self.annotation.setFrameSize( QSizeF( 30, 20 ) ) self.reset()
def activate_snapping(self, emit_point): # Set circle vertex marker color = QColor(255, 100, 255) self.vertex_marker = QgsVertexMarker(self.canvas) self.vertex_marker.setIconType(QgsVertexMarker.ICON_CIRCLE) self.vertex_marker.setColor(color) self.vertex_marker.setIconSize(15) self.vertex_marker.setPenWidth(3) self.node1 = None self.node2 = None self.canvas.setMapTool(emit_point) self.snapper = QgsMapCanvasSnapper(self.canvas) self.layer_node = self.controller.get_layer_by_tablename("v_edit_node") self.iface.setActiveLayer(self.layer_node) self.canvas.connect(self.canvas, SIGNAL("xyCoordinates(const QgsPoint&)"), self.mouse_move) emit_point.canvasClicked.connect(partial(self.snapping_node))
def __init__(self, canvas, txtBearing, txtBearingGeodetic=None): self.canvas = canvas self.txtBearing = txtBearing self.txtBearingGeodetic = txtBearingGeodetic QgsMapTool.__init__(self, self.canvas) self.rubberBand = QgsRubberBand(self.canvas, QGis.Line) self.rubberBand.setColor(Qt.red) self.rubberBand.setWidth(1) self.mSnapper = QgsMapCanvasSnapper(canvas) self.M_PI = 3.14159265358979323846 self.rubberBandPt = QgsRubberBand(canvas, QGis.Point) self.rubberBandPt.setColor(Qt.red) self.rubberBandPt.setWidth(10) self.reset() parent = self.parent() self.startPoint = None self.endPoint = None pass
def __init__(self, canvas, dataBaseProcedureData0, point3d0, procEntityListType0): self.canvas = canvas QgsMapToolEmitPoint.__init__(self, self.canvas) self.mSnapper = QgsMapCanvasSnapper(canvas) self.rubberBand = QgsRubberBand(canvas, QGis.Point) self.rubberBand.setColor(Qt.red) self.rubberBand.setWidth(10) self.rubberBandClick = QgsRubberBand(canvas, QGis.Point) self.rubberBandClick.setColor(Qt.green) self.rubberBandClick.setWidth(3) self.obstaclesLayerList = QgisHelper.getSurfaceLayers( SurfaceTypes.Obstacles) self.demLayerList = QgisHelper.getSurfaceLayers(SurfaceTypes.DEM) self.reset() self.dataBaseProcedureData_0 = dataBaseProcedureData0 self.point3d_0 = point3d0 self.procEntityListType_0 = procEntityListType0
def __init__(self, canvas, annotation=None): self.canvas = canvas # self.tableView = tableView # self.standardItemModel = standardItemModel # self.txtXCoord = txtXCoord # self.txtYCoord = txtYCoord QgsMapToolEmitPoint.__init__(self, self.canvas) self.annotation = annotation self.mSnapper = QgsMapCanvasSnapper(canvas) self.rubberBand = QgsRubberBand(canvas, QGis.Point) self.rubberBand.setColor(Qt.red) self.rubberBand.setWidth(10) self.rubberBandClick = QgsRubberBand(canvas, QGis.Point) self.rubberBandClick.setColor(Qt.green) self.rubberBandClick.setWidth(3) self.obstaclesLayerList = QgisHelper.getSurfaceLayers( SurfaceTypes.Obstacles) self.demLayerList = QgisHelper.getSurfaceLayers(SurfaceTypes.DEM) # lblDoc = QTextDocument(label) # self.annotation.setDocument(lblDoc) # self.annotation.setFrameBackgroundColor(QColor(0,0,0,0)) # self.annotation.setFrameSize( QSizeF( 30, 20 ) ) self.reset()
def add_point(self): """ Create the appropriate map tool and connect to the corresponding signal """ active_layer = self.iface.activeLayer() if active_layer is None: active_layer = self.controller.get_layer_by_tablename('version') self.iface.setActiveLayer(active_layer) # Vertex marker self.vertex_marker = QgsVertexMarker(self.canvas) self.vertex_marker.setColor(QColor(255, 100, 255)) self.vertex_marker.setIconSize(15) self.vertex_marker.setIconType(QgsVertexMarker.ICON_CROSS) self.vertex_marker.setPenWidth(3) # Snapper self.snapper = QgsMapCanvasSnapper(self.canvas) self.emit_point = QgsMapToolEmitPoint(self.canvas) self.previous_map_tool = self.canvas.mapTool() self.canvas.setMapTool(self.emit_point) #self.canvas.connect(self.canvas, SIGNAL("xyCoordinates(const QgsPoint&)"), self.mouse_move) self.canvas.xyCoordinates.connect(self.mouse_move) self.xyCoordinates_conected = True self.emit_point.canvasClicked.connect(partial(self.get_xy))
def click_button_snapping(self, point, btn): #@UnusedVariable # Disconnect mouse movement self.vertex_marker.hide() self.canvas.disconnect(self.canvas, SIGNAL("xyCoordinates(const QgsPoint&)"), self.mouse_move) if not self.layer_dimensions: return layer = self.layer_dimensions self.iface.setActiveLayer(layer) layer.startEditing() # TODO: node_group = [ "Junction", "Valve", "Reduction", "Tank", "Meter", "Manhole", "Source", "Hydrant", "Wtp", "Netsamplepoint", "Netelement", "Flexunion", "Expantank", "Netwjoin", "Register", "Pump", "Waterwell", "Filter" ] snapper = QgsMapCanvasSnapper(self.canvas) map_point = self.canvas.getCoordinateTransform().transform(point) x = map_point.x() y = map_point.y() event_point = QPoint(x, y) # Snapping (retval, result) = snapper.snapToBackgroundLayers( event_point) # @UnusedVariable # That's the snapped point if result <> []: # Check feature for snap_point in result: element_type = snap_point.layer.name() if element_type in node_group: feat_type = 'node' else: continue # Get the point point = QgsPoint(snap_point.snappedVertex) snapp_feature = next( snap_point.layer.getFeatures( QgsFeatureRequest().setFilterFid( snap_point.snappedAtGeometry))) element_id = snapp_feature.attribute(feat_type + '_id') # Leave selection snap_point.layer.select([snap_point.snappedAtGeometry]) # Get depth of the feature if self.project_type == 'ws': fieldname = "depth" elif self.project_type == 'ud' and feat_type == 'node': fieldname = "ymax" elif self.project_type == 'ud' and feat_type == 'connec': fieldname = "connec_depth" sql = "SELECT " + fieldname sql += " FROM " + self.schema_name + "." + feat_type sql += " WHERE " + feat_type + "_id = '" + element_id + "'" row = self.controller.get_row(sql) if not row: return utils_giswater.setText("depth", row[0]) utils_giswater.setText("feature_id", element_id) utils_giswater.setText("feature_type", element_type)
def click_button_add(self, layer_view, tablename, table_view, elem_type, point, button): """ :param layer_view: it is the view we are using :param tablename: Is the name of the table that we will use to make the SELECT and INSERT :param table_view: it's QTableView we are using, need ir for upgrade his own view :param elem_type: Used to buy the object that we "click" with the type of object we want to add or delete :param point: param inherited from signal canvasClicked :param button: param inherited from signal canvasClicked """ if button == Qt.LeftButton: node_group = ["Junction", "Valve", "Reduction", "Tank", "Meter", "Manhole", "Source", "Hydrant"] arc_group = ["Pipe"] canvas = self.iface.mapCanvas() snapper = QgsMapCanvasSnapper(canvas) map_point = canvas.getCoordinateTransform().transform(point) x = map_point.x() y = map_point.y() event_point = QPoint(x, y) # Snapping (retval, result) = snapper.snapToBackgroundLayers(event_point) # @UnusedVariable # That's the snapped point if result: # Check feature for snapped_feat in result: element_type = snapped_feat.layer.name() feat_type = None if element_type in node_group: feat_type = 'node' elif element_type in arc_group: feat_type = 'arc' if feat_type is not None: # Get the point feature = next(snapped_feat.layer.getFeatures(QgsFeatureRequest().setFilterFid(snapped_feat.snappedAtGeometry))) element_id = feature.attribute(feat_type + '_id') # LEAVE SELECTION snapped_feat.layer.select([snapped_feat.snappedAtGeometry]) # Get depth of feature if feat_type == elem_type: sql = "SELECT * FROM " + self.schema_name + "." + tablename sql += " WHERE " + feat_type+"_id = '" + element_id+"' AND psector_id = '" + self.psector_id.text() + "'" row = self.dao.get_row(sql) if not row: self.list_elemets[element_id] = feat_type else: message = "This id already exists" self.controller.show_info(message) else: message = self.tr("You are trying to introduce")+" "+feat_type+" "+self.tr("in a")+" "+elem_type self.controller.show_info(message) elif button == Qt.RightButton: for element_id, feat_type in self.list_elemets.items(): sql = "INSERT INTO " + self.schema_name + "." + tablename + "(" + feat_type + "_id, psector_id)" sql += "VALUES (" + element_id + ", " + self.psector_id.text() + ")" self.controller.execute_sql(sql) table_view.model().select() self.emit_point.canvasClicked.disconnect() self.list_elemets.clear() self.dlg.btn_add_arc_plan.setText('Add') self.dlg.btn_add_node_plan.setText('Add')
def _startSnapping(self): self._snapper = QgsMapCanvasSnapper() self._snapper.setMapCanvas(self.canvas()) if self._showSnappableVertices: self._startSnappableVertices()
def set_snapping(self): self.emit_point = QgsMapToolEmitPoint(self.canvas) self.canvas.setMapTool(self.emit_point) self.snapper = QgsMapCanvasSnapper(self.canvas)
def _startSnapping(self): self._snapper = QgsMapCanvasSnapper() self._snapper.setMapCanvas(self.canvas())