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()
Example #2
0
    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정위치 작업이 종료되었습니다.")
Example #3
0
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)
Example #6
0
 def cancelClicked(self, fid, l):
     l.deleteFeature(fid)
     l.commitChanges()
     iface.vectorLayerTools().stopEditing(l)
     l.triggerRepaint()
     self.window.close()
Example #7
0
 def okClicked(self, l):
     l.commitChanges()
     iface.vectorLayerTools().stopEditing(l)
     self.window.close()