def addEnrichedLayer(self): if self.enrichLayer == None: layers = QgsProject.instance().layerTreeRoot().children() selectedLayerIndex = self.dlg.chooseLayerEnrich.currentIndex() self.enrichLayer = layers[selectedLayerIndex].layer().clone() self.enrichLayerCounter += 1 self.enrichLayer.setName(self.enrichLayer.name() + "_enrich" + str(self.enrichLayerCounter)) self.enrichLayer.startEditing() row = 0 fieldnames = [field.name() for field in self.enrichLayer.fields()] for f in self.enrichLayer.getFeatures(): fieldcounter = 0 for field in fieldnames: if self.dlg.enrichTableResult.item(row, fieldcounter) != None: f[field] = self.dlg.enrichTableResult.item( row, fieldcounter).text() else: f[field] = "" fieldcounter += 1 self.enrichLayer.updateFeature(f) row += 1 self.enrichLayer.commitChanges() iface.vectorLayerTools().stopEditing(self.enrichLayer) QgsProject.instance().addMapLayer(self.enrichLayer, True) canvas = iface.mapCanvas() canvas.setExtent(self.enrichLayer.extent()) iface.messageBar().pushMessage("Add layer", "OK", level=Qgis.Success) self.dlg.close()
def run_move_action(self): self.layer_selector() assert self.node_layer != None, "self.node_layer != None" assert self.link_layer != None, "self.link_layer != None" if self.move_node_action.isChecked() == True: self.changeTool(self.move_node_action) print("node정위치 작업이 시작되었습니다.") # node 이동 self.moveNode() ## node 레이어에 feature geometry changed 이벤트 함수 연결 # node 이동 시, link 자동 수정 self.node_layer.geometryChanged.connect(self.updateLink) else: # checked 아니면 이벤트함수 disconnect self.node_layer.geometryChanged.disconnect(self.updateLink) # commit self.node_layer.commitChanges() ## edit 종료 iface.vectorLayerTools().stopEditing(self.node_layer) print("node정위치 작업이 종료되었습니다.")
def AddDrawPolygonOnMap(poly_coordinates): """ Add Polygon Layer """ polyLyr = selectLayerByName(Polygon_lyr, groupName) if polyLyr is None: return polyLyr.startEditing() feature = QgsFeature() point = QPointF() # create float polygon --> construcet out of 'point' list_polygon = QPolygonF() for x in range(0, len(poly_coordinates)): if x % 2 == 0: point.setX(poly_coordinates[x]) point.setY(poly_coordinates[x + 1]) list_polygon.append(point) point.setX(poly_coordinates[0]) point.setY(poly_coordinates[1]) list_polygon.append(point) geomP = QgsGeometry.fromQPolygonF(list_polygon) feature.setGeometry(geomP) # Calculate Area WSG84 (Meters) area_wsg84 = QgsDistanceArea() area_wsg84.setSourceCrs( QgsCoordinateReferenceSystem.fromOgcWmsCrs("EPSG:4326"), _layerreg.transformContext(), ) if area_wsg84.sourceCrs().isGeographic(): area_wsg84.setEllipsoid(area_wsg84.sourceCrs().ellipsoidAcronym()) # Calculate Centroid try: centroid = feature.geometry().centroid().asPoint() except Exception: iface.vectorLayerTools().stopEditing(polyLyr, False) return False feature.setAttributes([ centroid.x(), centroid.y(), 0.0, area_wsg84.measurePolygon(geomP.asPolygon()[0]), ]) polyLyr.addFeatures([feature]) CommonLayer(polyLyr) return True
def enrichLayerProcess(self): layers = QgsProject.instance().layerTreeRoot().children() selectedLayerIndex = self.dlg.chooseLayerEnrich.currentIndex() self.enrichLayer = layers[selectedLayerIndex].layer().clone() attlist = {} itemlist = [] propertylist = [] excludelist = [] resultmap = {} self.dlg.enrichTableResult.clear() self.dlg.enrichTableResult.setRowCount(0) self.dlg.enrichTableResult.setColumnCount( self.dlg.enrichTable.rowCount()) fieldnames = [] for row in range(self.dlg.enrichTable.rowCount()): fieldnames.append(self.dlg.enrichTable.item(row, 0).text()) self.dlg.enrichTableResult.setHorizontalHeaderLabels(fieldnames) self.enrichLayer.startEditing() for row in range(self.dlg.enrichTable.rowCount()): idfield = self.dlg.enrichTable.cellWidget(row, 5).currentText() idprop = self.dlg.enrichTable.item(row, 6).text() if idprop == None or idprop == "": msgBox = QMessageBox() msgBox.setText( "ID Property has not been specified for column " + str(self.dlg.enrichTable.item(row, 0).text())) msgBox.exec() return item = self.dlg.enrichTable.item(row, 0).text() propertyy = self.dlg.enrichTable.item(row, 1) triplestoreurl = "" if self.dlg.enrichTable.item(row, 2) != None: triplestoreurl = self.dlg.enrichTable.item(row, 2).text() print(self.dlg.enrichTable.item(row, 2).text()) strategy = self.dlg.enrichTable.cellWidget(row, 3).currentText() content = "" if self.dlg.enrichTable.cellWidget(row, 4) != None: content = self.dlg.enrichTable.cellWidget(row, 4).currentText() if item != idfield: propertylist.append(self.dlg.enrichTable.item(row, 1)) if strategy == "Exclude": excludelist.append(row) if strategy != "No Enrichment" and propertyy != None: progress = QProgressDialog( "Enriching column " + self.dlg.enrichTable.item(row, 0).text(), "Abort", 0, 0, self.dlg) progress.setWindowModality(Qt.WindowModal) progress.setCancelButton(None) self.qtask = EnrichmentQueryTask( "Enriching column: " + self.dlg.enrichTable.item(row, 0).text(), triplestoreurl, self.enrichLayer, strategy, self.dlg.enrichTable.item(row, 8).text(), row, len(self.enrichLayer.fields()), self.dlg.enrichTable.item(row, 0).text(), self.dlg.enrichTable, self.dlg.enrichTableResult, idfield, idprop, self.dlg.enrichTable.item(row, 1), content, progress) QgsApplication.taskManager().addTask(self.qtask) else: rowww = 0 for f in self.enrichLayer.getFeatures(): if rowww >= self.dlg.enrichTableResult.rowCount(): self.dlg.enrichTableResult.insertRow(rowww) #if item in f: newitem = QTableWidgetItem(str(f[item])) self.dlg.enrichTableResult.setItem(rowww, row, newitem) #if ";" in str(newitem): # newitem.setBackground(QColor.red) print(str(newitem)) rowww += 1 self.enrichLayer.commitChanges() row += 1 iface.vectorLayerTools().stopEditing(self.enrichLayer) self.enrichLayer.dataProvider().deleteAttributes(excludelist) self.enrichLayer.updateFields() self.dlg.enrichTable.hide() self.dlg.enrichTableResult.show() self.dlg.startEnrichment.setText("Enrichment Configuration") self.dlg.startEnrichment.clicked.disconnect() self.dlg.startEnrichment.clicked.connect(self.dlg.showConfigTable) self.dlg.addEnrichedLayerRowButton.setEnabled(False) return self.enrichLayer
def run(self, checked): """Run method that performs all the real work""" # Create the dialog with elements (after translation) and keep reference # Only create GUI ONCE in callback if self.first_start == True: self.first_start = False self.dlg = Edit3DiSchematisationDialog() if checked: # run sql file to add triggers to views try: v2_global_settings = QgsProject.instance().mapLayersByName( "v2_global_settings")[0] except: QMessageBox.information(None, "Warning", "No model found") return sqlite_dir = (v2_global_settings.dataProvider().dataSourceUri( ).split(" table")[0].replace("dbname=", "").replace("'", "")) view_connection = ViewTriggers({"db_path": sqlite_dir}) view_connection.add_triggers() QSettings().setValue('/Map/identifyAutoFeatureForm', 'true') configure_snapping_settings() oned_layers = [ "v2_connection_nodes", "v2_manhole_view", "v2_cross_section_location_view", "v2_cross_section_location", "v2_pumpstation_view", "v2_pumpstation_point_view", "v2_weir_view", "v2_culvert_view", "v2_orifice_view", "v2_pipe_view", "v2_culvert", # yes.. this table has its own geom "v2_channel", ] boundary_condition_layers = [ "v2_1d_boundary_conditions_view", "v2_2d_boundary_conditions" ] lateral_layers = ["v2_1d_lateral_view", "v2_2d_lateral"] qgs_signals(oned_layers) qgs_signals(boundary_condition_layers) qgs_signals(lateral_layers) set_relations() configure_open_file_button() for layer in iface.mapCanvas().layers(): if layer.type() == QgsMapLayer.VectorLayer: layer.setDataSource(layer.source(), layer.name(), layer.providerType()) layer.startEditing() tables_to_editmode = [ 'v2_numerical_settings', 'v2_simple_infiltration', 'v2_cross_section_definition', 'v2_aggregation_settings', 'v2_groundwater', 'v2_interflow' ] for table in tables_to_editmode: qgs_table = QgsProject.instance().mapLayersByName(table)[0] qgs_table.setDataSource(qgs_table.source(), qgs_table.name(), qgs_table.providerType()) qgs_table.startEditing() else: for layer in iface.mapCanvas().layers(): if layer.isEditable(): if layer.isModified(): layer.commitChanges() iface.vectorLayerTools().stopEditing(layer, False) else: iface.vectorLayerTools().stopEditing(layer, False) tables_to_editmode = [ 'v2_numerical_settings', 'v2_simple_infiltration', 'v2_cross_section_definition', 'v2_aggregation_settings', 'v2_groundwater', 'v2_interflow' ] for table in tables_to_editmode: qgs_table = QgsProject.instance().mapLayersByName(table)[0] if qgs_table.isModified(): qgs_table.commitChanges() iface.vectorLayerTools().stopEditing(qgs_table, False) else: iface.vectorLayerTools().stopEditing(qgs_table, False)
def cancelClicked(self, fid, l): l.deleteFeature(fid) l.commitChanges() iface.vectorLayerTools().stopEditing(l) l.triggerRepaint() self.window.close()
def okClicked(self, l): l.commitChanges() iface.vectorLayerTools().stopEditing(l) self.window.close()