我正在编写一个插件,它将不同的多边形添加到图层中。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() ```