Ejemplo n.º 1
0
 def updateAttributesAfterAdding(self):
     """
     Updates feature attributes according to the button configuration
     :return:
     """
     layer = self.sender()
     while self.addedFeatures:
         featureId = self.addedFeatures.pop()
         #begining the edit command
         # layer.beginEditCommand(self.tr("DSG Tools reclassification tool: adjusting feature's attributes"))
         #accessing added features
         editBuffer = layer.editBuffer()
         features = editBuffer.addedFeatures()
         for key in features:
             #just checking the newly added feature, the other I don't care
             if key == featureId:
                 feature = features[key]
                 #setting the attributes using the reclassification dictionary
                 self.setFeatureAttributes(feature, editBuffer)
                 # layer.endEditCommand()
                 if 'openForm' in self.reclassificationDict[self.category][
                         self.edgvClass][self.buttonName]['buttonProp']:
                     layer.updateFeature(feature)
                     form = QgsAttributeDialog(layer, feature, False)
                     form.setMode(int(QgsAttributeForm.SingleEditMode))
                     form.exec_()
                     layer.updateFeature(feature)
Ejemplo n.º 2
0
 def createGeometry(self, geom):
     geom = self.reprojectRubberBand(geom)
     if geom:
         layer = self.canvas.currentLayer()
         feature = QgsFeature()
         fields = layer.fields()
         feature.setGeometry(geom)
         feature.initAttributes(fields.count())
         provider = layer.dataProvider()
         for i in range(fields.count()):
             defaultClauseCandidate = provider.defaultValueClause(i)
             if defaultClauseCandidate:
                 feature.setAttribute(i, defaultClauseCandidate)
         form = QgsAttributeDialog(layer, feature, False)
         form.setMode(int(QgsAttributeForm.AddFeatureMode))
         formSuppress = layer.editFormConfig().suppress()
         if formSuppress == QgsEditFormConfig.SuppressDefault:
             if self.getSuppressOptions(
             ):  #this is calculated every time because user can switch options while using tool
                 layer.addFeature(feature)
             else:
                 if not form.exec_():
                     feature.setAttributes(form.feature().attributes())
         elif formSuppress == QgsEditFormConfig.SuppressOff:
             if not form.exec_():
                 feature.setAttributes(form.feature().attributes())
         else:
             layer.addFeature(feature)
         layer.endEditCommand()
         self.canvas.refresh()
         self.initVariable()
Ejemplo n.º 3
0
 def createFeature(self, Id):
     lyr = self.iface.mapCanvas().currentLayer()
     formValue = self.botaoConfig[self.getButton()][1]
     if (lyr) and (Id < 0) and (formValue != u"sim"):
         lyr.select(Id)
         f = lyr.selectedFeatures()[0]
         lyr.deselect(Id)
         provider = lyr.dataProvider()
         fields = lyr.pendingFields()
         try:
             attr = f.initAttributes(len(fields))
             for i in range(len(fields)):
                 f.setAttribute(i,  provider.defaultValue(i))
         except AttributeError:
             for i in fields:
                 f.addAttribute(i,  provider.defaultValue(i))
         attrDialog = QgsAttributeDialog(lyr, f, False)
         self.attributeForm(attrDialog, lyr)
         result = attrDialog.exec_()
         if not result:
             lyr.deleteFeature(Id)
             self.iface.mapCanvas().refresh()
     elif (lyr) and (Id < 0) and (formValue == u"sim"):
         lyr.select(Id)
         f = lyr.selectedFeatures()[0]
         lyr.deselect(Id)
         self.autoAttribute(lyr, f)
Ejemplo n.º 4
0
 def addFeature(self, feature, layer, field, pointValue):
     fields = layer.fields()
     feature.initAttributes(fields.count())            
     provider = layer.dataProvider()             
     for i in range(fields.count()):
         value = provider.defaultValue(i) if fields[i].name() != field else pointValue
         if value:
             feature.setAttribute(i, value)                
     form = QgsAttributeDialog(layer, feature, False)
     form.setMode(QgsAttributeForm.AddFeatureMode)
     formSuppress = layer.editFormConfig().suppress()
     if formSuppress == QgsEditFormConfig.SuppressDefault:
         if self.getSuppressOptions(): #this is calculated every time because user can switch options while using tool
             layer.addFeature(feature, True)
         else:
             if not form.exec_():
                 feature.setAttributes(form.feature().attributes())
     elif formSuppress == QgsEditFormConfig.SuppressOff:
         if not form.exec_():
             feature.setAttributes(form.feature().attributes())
     else:
         layer.addFeature(feature, True)
Ejemplo n.º 5
0
    def insert_line(self, method):
        layer = self.iface.activeLayer()
        if not isinstance(layer,
                          QgsVectorLayer) or layer.geometryType() != QGis.Line:
            self.iface.messageBar().pushMessage(
                self.tr("ReconstructLine"),
                self.
                tr("Line can\'t be inserted! Select lines layer for inserting new geom!"
                   ),
                level=QgsMessageBar.WARNING,
                duration=5)
            return

        if not layer.isEditable():
            self.iface.messageBar().pushMessage(
                self.tr("ReconstructLine"),
                self.tr("Line can\'t be inserted! Layer is not editable!"),
                level=QgsMessageBar.WARNING,
                duration=5)
            return

        if not self._geom_buffer:
            self.iface.messageBar().pushMessage(
                self.tr("ReconstructLine"),
                self.tr("Line can\'t be inserted! Copy points first!"),
                level=QgsMessageBar.WARNING,
                duration=5)
            return

        #show message
        self.iface.messageBar().clearWidgets()
        self.iface.messageBar().pushMessage(
            self.tr("ReconstructLine"),
            self.tr("Processing points. Please wait..."),
            level=QgsMessageBar.INFO)
        QgsApplication.setOverrideCursor(Qt.WaitCursor)
        QgsApplication.processEvents()
        QgsApplication.processEvents()
        QgsApplication.processEvents()

        try:
            # Create line

            # QGS geoms to np
            points = [(in_geom.x(), in_geom.y())
                      for in_geom in self._geom_buffer]
            data = np.array(points)

            # Make line

            if method == 'MST':
                conn = MST(data)
                result = conn.connect()
            elif method == 'SOM':
                som = SOM1d(data)
                result = som.connect()
            else:
                raise ValueError

            #np to QGS
            lines = []
            for line in result:
                lines.append(
                    [QgsPoint(out_geom[0], out_geom[1]) for out_geom in line])

            geom_list = []
            if layer.wkbType() == QGis.WKBMultiLineString:
                geom_list.append(QgsGeometry.fromMultiPolyline(lines))
            else:
                for line in lines:
                    geom_list.append(QgsGeometry.fromPolyline(line))

            # Check crs and reproject
            target_crs = layer.crs()
            if target_crs.srsid() != self._srid.srsid():
                transf = QgsCoordinateTransform(self._srid, target_crs)
                for geom in geom_list:
                    geom.transform(transf)

            # Insert feature(s)
            features = []
            for geom in geom_list:
                feat = QgsFeature()
                feat.setFields(layer.dataProvider().fields())
                feat.setGeometry(geom)
                features.append(feat)

            default_suppress = (method == 'MST')
            suppressForm = QSettings().value(
                "/qgis/digitizing/disable_enter_attribute_values_dialog",
                type=bool,
                defaultValue=default_suppress)

            if suppressForm:
                # quite insert feature
                result = layer.addFeatures(features)
            else:
                # show dialog
                QgsApplication.restoreOverrideCursor()
                for feat in features:
                    attrDialog = QgsAttributeDialog(layer, feat, False)
                    attrDialog.setIsAddDialog(True)
                    result = attrDialog.exec_()

            # show message
            self.iface.messageBar().clearWidgets()
            if result:
                self.iface.messageBar().pushMessage(
                    self.tr("ReconstructLine"),
                    self.tr("%s line segment(s) was sucesfull added" %
                            (len(features))),
                    level=QgsMessageBar.INFO)
            else:
                self.iface.messageBar().pushMessage(
                    self.tr("ReconstructLine"),
                    self.tr("Line was not added"),
                    level=QgsMessageBar.CRITICAL)

            self.iface.mapCanvas().refresh()
        finally:
            QgsApplication.restoreOverrideCursor()
Ejemplo n.º 6
0
 def openFormAttribute(self):
     lyr = self.iface.mapCanvas().currentLayer()
     if lyr:
         f = lyr.selectedFeatures()[0]
         attrDialog = QgsAttributeDialog(lyr, f, False)
         result = attrDialog.exec_()
Ejemplo n.º 7
0
    def insert_line(self):
        layer = self.iface.activeLayer()
        if not isinstance(layer, QgsVectorLayer) or layer.geometryType() != QGis.Line:
            self.iface.messageBar().pushMessage(self.tr("ReconstructLine"),
                                    self.tr("Line can\'t be inserted! Select lines layer for inserting new geom!"),
                                    level=QgsMessageBar.WARNING,
                                    duration=5)
            return

        if not layer.isEditable():
            self.iface.messageBar().pushMessage(self.tr("ReconstructLine"),
                                    self.tr("Line can\'t be inserted! Layer is not editable!"),
                                    level=QgsMessageBar.WARNING,
                                    duration=5)
            return

        if not self._geom_buffer:
            self.iface.messageBar().pushMessage(self.tr("ReconstructLine"),
                        self.tr("Line can\'t be inserted! Copy points first!"),
                        level=QgsMessageBar.WARNING,
                        duration=5)
            return

        #show message
        self.iface.messageBar().clearWidgets()
        self.iface.messageBar().pushMessage(self.tr("ReconstructLine"),
                                            self.tr("Processing points. Please wait..."),
                                            level=QgsMessageBar.INFO
                                            )
        QgsApplication.setOverrideCursor(Qt.WaitCursor)
        QgsApplication.processEvents()
        QgsApplication.processEvents()
        QgsApplication.processEvents()

        try:
            # Create line

            # QGS geoms to np
            points = [(in_geom.x(), in_geom.y()) for in_geom in self._geom_buffer]
            data = np.array(points)

            # Make line
            som = SOM1d(data)
            result = som.connect()

            #np to QGS
            self._geom_buffer = [QgsPoint(out_geom[0], out_geom[1]) for out_geom in result]

            if layer.wkbType() == QGis.WKBMultiLineString:
                geom = QgsGeometry.fromMultiPolyline([self._geom_buffer])
            else:
                geom = QgsGeometry.fromPolyline(self._geom_buffer)

            # Check crs and reproject
            target_crs = layer.crs()
            if target_crs.srsid() != self._srid.srsid():
                transf = QgsCoordinateTransform(self._srid, target_crs)
                geom.transform(transf)

            # Insert feature
            feat = QgsFeature()
            feat.setFields(layer.dataProvider().fields())
            feat.setGeometry(geom)

            suppressForm = QSettings().value("/qgis/digitizing/disable_enter_attribute_values_dialog", type=bool, defaultValue=False)

            if suppressForm:
                # quite insert feature
                result = layer.addFeatures([feat])
            else:
                # show dialog
                QgsApplication.restoreOverrideCursor()
                attrDialog = QgsAttributeDialog(layer, feat, False)
                attrDialog.setIsAddDialog(True)
                result = attrDialog.exec_()

            # show message
            self.iface.messageBar().clearWidgets()
            if result:
                self.iface.messageBar().pushMessage(self.tr("ReconstructLine"),
                                                self.tr("One line was sucesfull added"),
                                                level=QgsMessageBar.INFO)
            else:
                self.iface.messageBar().pushMessage(self.tr("ReconstructLine"),
                                                self.tr("Line was not added"),
                                                level=QgsMessageBar.CRITICAL)

            self.iface.mapCanvas().refresh()
        finally:
            QgsApplication.restoreOverrideCursor()