def copy_geometry(self, geometry):
     if geometry is None:
         return None
     vs = []
     for v in geometry.vertices():
         vs.append(QgsPointXY(v.x(), v.y()))
     new_geometry = QgsGeometry()
     if geometry.wkbType() == QgsWkbTypes.Polygon:
         new_geometry.addPointsXY(vs, QgsWkbTypes.PolygonGeometry)
         return new_geometry
     elif geometry.wkbType() == QgsWkbTypes.LineGeometry:
         new_geometry.addPointsXY(vs, QgsWkbTypes.LineGeometry)
         return new_geometry
     else:
         return None
Ejemplo n.º 2
0
    def getFeatureWithMultiGeomFromSpatialite(self, filmNumber, geomType,
                                              source):
        uri = QgsDataSourceUri()
        uri.setDatabase(self.dbm.db.databaseName())
        uri.setDataSource(
            '', 'luftbild_{0}_cp'.format(
                self.filmsDict[filmNumber]['orientation']), 'geometry')
        sourceLayer = QgsVectorLayer(uri.uri(),
                                     'kartierung {0} p'.format(filmNumber),
                                     'spatialite')
        sourceLayer.setSubsetString(u'"filmnummer" = "{0}"'.format(filmNumber))

        sourceCrs = sourceLayer.crs()
        targetCrs = QgsCoordinateReferenceSystem(
            4326, QgsCoordinateReferenceSystem.EpsgCrsId)
        coordinateTransform = QgsCoordinateTransform(sourceCrs, targetCrs,
                                                     QgsProject.instance())

        if sourceLayer.hasFeatures():
            targetMultiGeom = QgsGeometry()
            sortedFeatures = sorted(sourceLayer.getFeatures(),
                                    key=lambda f: f['bildnummer_nn'])
            pointList = []
            for feature in sortedFeatures:
                sourceSingleGeom = feature.geometry()
                sourceSingleGeom.transform(coordinateTransform)
                point = sourceSingleGeom.asPoint()
                pointList.append(point)
                targetMultiGeom.addPointsXY([point], geomType)

            if geomType == QgsWkbTypes.geometryType(
                    QgsWkbTypes.MultiLineString):
                targetMultiGeom = QgsGeometry.fromPolylineXY(pointList)

            feature = QgsFeature()
            feature.setGeometry(targetMultiGeom)
            feature.setAttributes([filmNumber, source] +
                                  self.getAttributesForFilm(filmNumber))
            return feature
        else:
            return None
Ejemplo n.º 3
0
    def generateMultiLineShape(self, listGeometries):
        # ... and combine the geometries. NB: May be more than one

        TOMsMessageLog.logMessage("In generateMultiLineShape ... ", level=Qgis.Info)

        outputGeometry = QgsGeometry()

        for (shape) in listGeometries:

            res = outputGeometry.addPointsXY(shape.asPolyline(), QgsWkbTypes.LineGeometry)

            if res != QgsGeometry.OperationResult.Success:
                TOMsMessageLog.logMessage(
                    "In generateMultiLineShape: NOT able to add part  ...", level=Qgis.Info)

        return outputGeometry
Ejemplo n.º 4
0
    def generatePolygon(self, listGeometryPairs):
        # ... and combine the two paired geometries. NB: May be more than one pair

        QgsMessageLog.logMessage("In generatePolygon ... ", tag="TOMs panel")

        outputGeometry = QgsGeometry()

        for (shape, line) in listGeometryPairs:

            QgsMessageLog.logMessage("In generatePolygon:  shape ********: " +
                                     shape.asWkt(),
                                     tag="TOMs panel")
            QgsMessageLog.logMessage("In generatePolygon:  line ********: " +
                                     line.asWkt(),
                                     tag="TOMs panel")

            newGeometry = shape.combine(line)

            if newGeometry.wkbType() == QgsWkbTypes.MultiLineString:

                linesList = newGeometry.asMultiPolyline()

                outputGeometry = QgsGeometry.fromPolygonXY(linesList)
                """for verticesList in linesList:

                    res = outputGeometry.addPointsXY(verticesList.asPolyline(), QgsWkbTypes.PolygonGeometry)
                    if res != QgsGeometry.OperationResult.Success:
                        QgsMessageLog.logMessage(
                            "In generatePolygon: NOT able to add part  ...", tag="TOMs panel")"""

            else:

                res = outputGeometry.addPointsXY(newGeometry.asPolyline(),
                                                 QgsWkbTypes.PolygonGeometry)

                if res != QgsGeometry.OperationResult.Success:
                    QgsMessageLog.logMessage(
                        "In generatePolygon: NOT able to add part  ...",
                        tag="TOMs panel")

        return outputGeometry