使用插件创建的功能未正确保存 - QGIS

时间:2021-03-29 15:10:56

标签: plugins save pyqgis

我正在编写一个插件,它为图层添加不同的多边形。 Shapefile 的路径在 lineEditV 中定义,然后添加到项目中。新创建的多边形的坐标与在 comboBoxVestas 中选择的图层的坐标相关。一切正常,但是当我关闭项目并在之后重新打开它时,所有功能和属性都被删除,它仍然只是一个“空”Shapefile。我在 PyQGIS 编程方面没有太多经验,并且已经尝试了很多来解决问题,但一切都失败了。那么,有人知道我做错了什么吗?

        fields = QgsFields()
        
        crs = QgsProject.instance().crs()
        transform_context= QgsProject.instance().transformContext()
        
        path = self.dlg.lineEditV.text()
        
        save_options = QgsVectorFileWriter.SaveVectorOptions()
        save_options.driverName = "ESRI Shapefile"
        save_options.fileEncoding = "UTF-8"
        
        writer = QgsVectorFileWriter.create(
            path,
            fields,
            QgsWkbTypes.Polygon,
            crs,
            transform_context,
            save_options
            )
        
        if writer.hasError() != QgsVectorFileWriter.NoError:
            print("Error when creating shapefile: ", writer.errorMessage())
            
        del writer
        
        vlayer = iface.addVectorLayer(path, "", "ogr")
            
        pr = vlayer.dataProvider()
        vlayer.startEditing()
    
        pr.addAttributes([QgsField("Befestigung", QVariant.String)])
            
        vlayer.updateFields()              
        
        coords = self.dlg.comboBoxVestas.currentLayer()       
        features = coords.getFeatures()
             
        for feature in features: 
            geom = feature.geometry()
            coords = geom.asPoint()      
            x = coords[0]
            y = coords[1]
            
            fet = QgsFeature()                    
            points_BL1 = [QgsPointXY(x-47, y-76), QgsPointXY(x-47, y-56), QgsPointXY(x+5.5, y-56), QgsPointXY(x+5.5, y-76), QgsPointXY(x-47, y-76)]
            fet.setGeometry(QgsGeometry.fromPolygonXY([points_BL1]))
            fet.setAttributes(["Blattlager"])
            pr.addFeatures([fet])
            vlayer.updateExtents()
            
            fet = QgsFeature()
            points_BL2 = [QgsPointXY(x+8.5, y-76), QgsPointXY(x+8.5, y-56), QgsPointXY(x+34, y-56), QgsPointXY(x+34, y-76)]
            fet.setGeometry(QgsGeometry.fromPolygonXY([points_BL2]))
            fet.setAttributes(["Blattlager"])
            pr.addFeatures([fet])
            vlayer.updateExtents()
            
            fet = QgsFeature()
            points_HK1 = [QgsPointXY(x-82, y-40.5), QgsPointXY(x-88, y-40.5), QgsPointXY(x-88, y-34.5)]
            fet.setGeometry(QgsGeometry.fromPolygonXY([points_HK1]))
            fet.setAttributes(["Hilfskranfläche"])
            pr.addFeatures([fet])
            vlayer.updateExtents()
            
            fet = QgsFeature()
            points_HK2 = [QgsPointXY(x-117, y-40.5), QgsPointXY(x-123, y-40.5), QgsPointXY(x-123, y-34.5)]
            fet.setGeometry(QgsGeometry.fromPolygonXY([points_HK2]))
            fet.setAttributes(["Hilfskranfläche"])
            pr.addFeatures([fet])
            vlayer.updateExtents()          

            
        vlayer.updateExtents() ```

0 个答案:

没有答案
相关问题