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
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
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
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