def __init__(self, iface, layer): QgepMapToolAddFeature.__init__(self, iface, layer) self.nodeLayer = QgepLayerManager.layer('vw_wastewater_node') assert self.nodeLayer self.reachLayer = QgepLayerManager.layer('vw_qgep_reach') assert self.reachLayer self.setMode(QgsMapToolAdvancedDigitizing.CaptureLine)
def activate(self): """ Called by QGIS whenever the tool is activated. """ source_snap_layers = list() target_snap_layers = list() # A dict of layers and the fields that are foreign keys # pointing to wastewater networkelements self.network_element_sources = { QgepLayerManager.layer('vw_qgep_reach'): [ ('rp_to_fk_wastewater_networkelement', QCoreApplication.translate('QgepMapToolConnectNetworkElements', 'Reach Point To')), ('rp_from_fk_wastewater_networkelement', QCoreApplication.translate('QgepMapToolConnectNetworkElements', 'Reach Point From')) ], QgepLayerManager.layer('od_catchment_area'): [ ('fk_wastewater_networkelement_rw_current', QCoreApplication.translate( 'QgepMapToolConnectNetworkElements', 'Rainwater current')), ('fk_wastewater_networkelement_rw_planned', QCoreApplication.translate( 'QgepMapToolConnectNetworkElements', 'Rainwater planned')), ('fk_wastewater_networkelement_ww_current', QCoreApplication.translate( 'QgepMapToolConnectNetworkElements', 'Wastewater current')), ('fk_wastewater_networkelement_ww_planned', QCoreApplication.translate( 'QgepMapToolConnectNetworkElements', 'Wastewater planned')) ] } # A list of layers that can be used as wastewater networkelement # targets self.network_element_targets = [ QgepLayerManager.layer('vw_wastewater_node'), QgepLayerManager.layer('vw_qgep_reach') ] for layer in self.network_element_sources.keys(): if layer: snap_layer = QgsSnappingUtils.LayerConfig( layer, QgsPointLocator.All, 16, QgsTolerance.Pixels) source_snap_layers.append(snap_layer) for layer in self.network_element_targets: if layer: snap_layer = QgsSnappingUtils.LayerConfig( layer, QgsPointLocator.All, 16, QgsTolerance.Pixels) target_snap_layers.append(snap_layer) self.source_snapper.setLayers(source_snap_layers) self.source_snapper.setSnapToMapMode(QgsSnappingUtils.SnapAdvanced) self.target_snapper.setLayers(target_snap_layers) self.target_snapper.setSnapToMapMode(QgsSnappingUtils.SnapAdvanced) self.reset() self.action.setChecked(True) self.iface.mapCanvas().setCursor(QCursor(Qt.CrossCursor))
def stateChanged(self): if self.stateButton.text() == 'Start Data Entry': self.layerComboBox.setEnabled(True) self.layerChanged(0) self.stateButton.setText( 'Stop Data Entry' ) else: for lyr in [QgepLayerManager.layer('vw_wizard_cover_manhole'), QgepLayerManager.layer('vw_wizard_reach_channel')]: lyr.commitChanges() self.layerComboBox.setEnabled(False) self.stateButton.setText( 'Start Data Entry' )
def stateChanged(self): if self.stateButton.text() == 'Start Data Entry': self.layerComboBox.setEnabled(True) self.layerChanged(0) self.stateButton.setText('Stop Data Entry') else: for lyr in [QgepLayerManager.layer('vw_qgep_reach'), QgepLayerManager.layer('vw_qgep_wastewater_structure')]: lyr.commitChanges() self.layerComboBox.setEnabled(False) self.stateButton.setText('Start Data Entry')
def stateChanged(self): if self.stateButton.property('state') != 'active': self.layerComboBox.setEnabled(True) self.layerChanged(0) self.stateButton.setText(self.tr('Stop Data Entry')) self.stateButton.setProperty('state', 'active') else: for lyr in [QgepLayerManager.layer('vw_qgep_reach'), QgepLayerManager.layer('vw_qgep_wastewater_structure')]: lyr.commitChanges() self.layerComboBox.setEnabled(False) self.stateButton.setText(self.tr('Start Data Entry')) self.stateButton.setProperty('state', 'inactive')
def layerChanged(self, index): for lyr in [QgepLayerManager.layer('vw_qgep_wastewater_structure'), QgepLayerManager.layer('vw_qgep_reach')]: lyr.commitChanges() if self.layerComboBox.itemData(self.layerComboBox.currentIndex()) == 'wastewater_structure': lyr = QgepLayerManager.layer('vw_qgep_wastewater_structure') lyr.startEditing() self.iface.setActiveLayer(lyr) self.iface.actionAddFeature().trigger() elif self.layerComboBox.itemData(self.layerComboBox.currentIndex()) == 'reach': lyr = QgepLayerManager.layer('vw_qgep_reach') lyr.startEditing() self.iface.mapCanvas().setMapTool(self.mapToolAddReach)
def layerChanged(self, index): for lyr in [QgepLayerManager.layer('vw_qgep_wastewater_structure'), QgepLayerManager.layer('vw_qgep_reach')]: lyr.commitChanges() if self.layerComboBox.currentText() == 'Wastewater Structure': lyr = QgepLayerManager.layer('vw_qgep_wastewater_structure') lyr.startEditing() self.iface.setActiveLayer(lyr) self.iface.actionAddFeature().trigger() elif self.layerComboBox.currentText() == 'Reach': lyr = QgepLayerManager.layer('vw_qgep_reach') lyr.startEditing() self.iface.mapCanvas().setMapTool(self.mapToolAddReach)
def layerChanged(self,index): for lyr in [QgepLayerManager.layer('vw_wizard_cover_manhole'), QgepLayerManager.layer('vw_wizard_reach_channel')]: lyr.commitChanges() if self.layerComboBox.currentText() == 'Manhole': self.logger.debug( 'manhole' ) lyr = QgepLayerManager.layer('vw_wizard_cover_manhole') lyr.startEditing() self.iface.setActiveLayer(lyr) self.iface.actionAddFeature().trigger() elif self.layerComboBox.currentText() == 'Reach': lyr = QgepLayerManager.layer('vw_wizard_reach_channel') lyr.startEditing() self.iface.mapCanvas().setMapTool( self.mapToolAddReach )
def __init__(self, parent, iface): QDockWidget.__init__(self, parent) self.setupUi(self) self.layerComboBox.currentIndexChanged.connect(self.layerChanged) self.stateButton.clicked.connect(self.stateChanged) self.iface = iface self.mapToolAddReach = QgepMapToolAddReach(self.iface, QgepLayerManager.layer('vw_qgep_reach'))
def activate(self): """ Called by QGIS whenever the tool is activated. """ # A dict of layers # and for each layer the fields to use as foreign key # as well as the possible target layers # Reaches can be connected to reaches and nodes # Catchment areas only to nodes self.network_element_sources = { QgepLayerManager.layer('vw_qgep_reach'): { 'fields': [ ('rp_to_fk_wastewater_networkelement', QCoreApplication.translate('QgepMapToolConnectNetworkElements', 'Reach Point To')), ('rp_from_fk_wastewater_networkelement', QCoreApplication.translate('QgepMapToolConnectNetworkElements', 'Reach Point From')) ], 'target_layers': [ QgepLayerManager.layer('vw_wastewater_node'), QgepLayerManager.layer('vw_qgep_reach') ]}, QgepLayerManager.layer('od_catchment_area'): {'fields': [ ('fk_wastewater_networkelement_rw_current', QCoreApplication.translate( 'QgepMapToolConnectNetworkElements', 'Rainwater current')), ('fk_wastewater_networkelement_rw_planned', QCoreApplication.translate( 'QgepMapToolConnectNetworkElements', 'Rainwater planned')), ('fk_wastewater_networkelement_ww_current', QCoreApplication.translate( 'QgepMapToolConnectNetworkElements', 'Wastewater current')), ('fk_wastewater_networkelement_ww_planned', QCoreApplication.translate( 'QgepMapToolConnectNetworkElements', 'Wastewater planned')) ], 'target_layers': [ QgepLayerManager.layer('vw_wastewater_node') ]} } self.setSnapLayers(self.source_snapper, self.network_element_sources.keys()) self.reset() self.action.setChecked(True) self.iface.mapCanvas().setCursor(QCursor(Qt.CrossCursor))
def __init__(self, parent, iface): QDockWidget.__init__(self, parent) self.setupUi(self) self.layerComboBox.currentIndexChanged.connect(self.layerChanged) self.stateButton.clicked.connect(self.stateChanged) self.iface = iface self.layerComboBox.insertItem(self.layerComboBox.count(), self.tr('Wastewater Structure'), 'wastewater_structure') self.layerComboBox.insertItem(self.layerComboBox.count(), self.tr('Reach'), 'reach') self.stateButton.setProperty('state', 'inactive') self.mapToolAddReach = QgepMapToolAddReach(self.iface, QgepLayerManager.layer('vw_qgep_reach'))
def __init__(self,iface,layer): QgepMapToolAddFeature.__init__(self,iface,layer) self.nodeLayer = QgepLayerManager.layer('vw_wastewater_node') assert self.nodeLayer self.reachLayer = QgepLayerManager.layer('vw_reach') assert self.reachLayer
def onSelectCurrentPathAction(self): reaches = list() wastewater_nodes = list() wastewater_structures = list() for item in self.edges: item_information = item[2] if item_information['objType'] == 'reach': reaches.append(item_information['baseFeature']) for item in self.nodes: if item['objType'] == 'wastewater_node': wastewater_nodes.append(item['objId']) qgep_wastewater_structures_layer = QgepLayerManager.layer( 'vw_qgep_wastewater_structure') wastewater_nodes_layer = QgepLayerManager.layer('vw_wastewater_node') qgep_reach_layer = QgepLayerManager.layer('vw_qgep_reach') catchment_areas_layer = QgepLayerManager.layer('od_catchment_area') wastewater_node_list = ','.join( ("'" + id + "'" for id in wastewater_nodes)) reach_list = ','.join(("'" + id + "'" for id in reaches)) if catchment_areas_layer: request = QgsFeatureRequest() filters = list() if QgsProject.instance().readBoolEntry('Qgep', 'FollowWastewaterCurrent', True)[0]: filters.append( 'fk_wastewater_networkelement_ww_current IN ({})'.format( wastewater_node_list)) if QgsProject.instance().readBoolEntry('Qgep', 'FollowWastewaterPlanned', True)[0]: filters.append( 'fk_wastewater_networkelement_ww_planned IN ({})'.format( wastewater_node_list)) if QgsProject.instance().readBoolEntry('Qgep', 'FollowRainwaterCurrent', True)[0]: filters.append( 'fk_wastewater_networkelement_rw_current IN ({})'.format( wastewater_node_list)) if QgsProject.instance().readBoolEntry('Qgep', 'FollowRainwaterPlanned', True)[0]: filters.append( 'fk_wastewater_networkelement_rw_planned IN ({})'.format( wastewater_node_list)) if filters: request.setFilterExpression(' OR '.join(filters)) features = catchment_areas_layer.getFeatures(request) catchment_areas_layer.setSelectedFeatures( [f.id() for f in features]) if qgep_reach_layer: request = QgsFeatureRequest() request.setFilterExpression('obj_id IN ({})'.format(reach_list)) features = qgep_reach_layer.getFeatures(request) qgep_reach_layer.setSelectedFeatures([f.id() for f in features]) if wastewater_nodes_layer: request = QgsFeatureRequest() request.setFilterExpression( 'obj_id IN ({})'.format(wastewater_node_list)) features = wastewater_nodes_layer.getFeatures(request) ids = list() for feature in features: ids.append(feature.id()) wastewater_structures.append( feature['fk_wastewater_structure']) wastewater_nodes_layer.setSelectedFeatures(ids) wastewater_structure_list = ','.join( ("'" + id + "'" for id in wastewater_structures)) if qgep_wastewater_structures_layer: request = QgsFeatureRequest() request.setFilterExpression( 'obj_id IN ({})'.format(wastewater_structure_list)) features = qgep_wastewater_structures_layer.getFeatures(request) qgep_wastewater_structures_layer.setSelectedFeatures( [f.id() for f in features])