plugins - 使用插件创建的功能未正确保存 - QGIS
问题描述
我正在编写一个插件,它将不同的多边形添加到图层中。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() ```
解决方案
推荐阅读
- javascript - 如何使输入显示 HEX?
- javascript - 如何定期提升 CSS 价值?
- reactjs - 如何更新用该行打开模式的行索引表按钮的道具
- asp.net - ASP.NET 身份更改密码注销用户
- google-sheets - 谷歌表格将数据添加到下拉列表
- ladder-logic - 如何在 Scheinder 梯形程序中使用 SYSTIMEDATE
- python - ModuleNotFoundError:运行 Pyinstaller 时没有名为 PIL 的模块
- r - 比较两个数据帧之间的纬度和经度
- swift - 如何更改 Xcode 为每个堆栈创建单独的预览?
- python - Python:AttributeError:模块'kubernetes'没有属性'config'