当前位置: 首页 > 知识库问答 >
问题:

如何在PyQGIS中向地理包追加/添加图层

权玉泽
2023-03-14

对于一个项目,我正在创建不同的层,这些层都应该被写入一个geopackage。我正在使用QGIS 3.16.1和运行在Python 3.7上的QGIS中的Python控制台

我尝试了很多事情,但不知道如何做到这一点。这是我目前使用的。

vl = QgsVectorLayer("Point", "points1", "memory")
vl2 = QgsVectorLayer("Point", "points2", "memory")

pr = vl.dataProvider()
pr.addAttributes([QgsField("DayID", QVariant.Int), QgsField("distance", QVariant.Double)])
vl.updateFields()

f = QgsFeature()
for x in range(len(tag_temp)):
    f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(lon[x],lat[x])))
    f.setAttributes([dayID[x], distance[x]])
    pr.addFeature(f)
vl.updateExtents()

# I'll do the same for vl2 but with other data

uri ="D:/Documents/QGIS/test.gpkg"
options = QgsVectorFileWriter.SaveVectorOptions()
context = QgsProject.instance().transformContext()
QgsVectorFileWriter.writeAsVectorFormatV2(vl1,uri,context,options)
QgsVectorFileWriter.writeAsVectorFormatV2(vl2,uri,context,options)

问题是,在“测试”中。“gpkg”创建的层称为“测试”,而不是“点1”或“点2”。和第二个QgsVectorFileWriter。writeAsVectorFormatV2()还会覆盖第一个图层的输出,而不是将图层附加到现有地理数据包中。

我还尝试创建单个. geopackages,然后使用'Package Layers'处理工具(processing.run(本地:包)将所有层合并到一个geopackage中,但随后属性类型不幸地全部转换为字符串。

任何帮助都非常感谢。非常感谢提前。

共有1个答案

戚泰
2023-03-14

创建gpkg文件后,您需要更改SaveVectorOptions,尤其是ActionOneExistingFile的模式:

options = QgsVectorFileWriter.SaveVectorOptions()
#options.driverName = "GPKG" 

options.layerName = v1.name()
QgsVectorFileWriter.writeAsVectorFormatV2(v1,uri,context,options)
#switch mode to append layer instead of overwriting the file
options.actionOnExistingFile = QgsVectorFileWriter.CreateOrOverwriteLayer
options.layerName = v2.name()
QgsVectorFileWriter.writeAsVectorFormatV2(v2,uri,context,options)

文档如下:SaveVectorOptions

我还尝试创建单个. geopackages,然后使用'Package Layers'处理工具(processing.run(本地:包)将所有层合并到一个geopackage中,但随后属性类型不幸地全部转换为字符串。

这是推荐的方式,请考虑报告错误。

 类似资料:
  • 问题内容: 有没有一种方法可以修改.class文件,以便向某些方法添加Java注释?基本上,我想遍历jar文件中每个类文件的方法并注释某些方法。请注意,使用jar文件时,这不是在运行时。相反,完成后,我想使用注释修改类文件。 我确实可以访问源代码,因此,如果有一个自动的源代码修改器,那也可以工作… 我假设我需要Javassist或ASM之类的工具。如果是这样,我应该使用哪一个,我将如何处理? 问题

  • 问题内容: 我正在使用JDeveloper在Java中设计一个表单。我是JDeveloper的新手。在JDeveloper工具中,我没有找到任何直接将图像添加到.Net之类的选项。而且我不知道如何手动添加图像以形成表单。还有其他解决方法。所以请帮我解决。 问题答案: 就这么简单: 耶!现在,您的图像是摆动组件!将其添加到框架或面板或通常执行的任何操作中!可能也需要重新粉刷,例如

  • 以下是firebase文档数据 我想向购买的id添加一个新的映射值。这是当前代码 但是使用此代码替换了map值,如何向现有map添加另一个map值 这样地

  • 我使用React-Leaflet显示Leaflet.js地图。我使用React-Leaflet GeoJSON(这里的来源)在地图上显示一个多边形层。 虽然我可以改变多边形填充()的不透明度,但我找不到用图案(如方格、条纹等)填充多边形的选项 我发现了一个项目(Leaflet.pattern),它支持将填充模式添加到形状,但是它还没有被修改为与一起使用。 所以我的问题是:我如何向形状中添加模式,或

  • 嗨,我正在尝试重新创建一个足球锦标赛,已经能够创建一个地图的集团,但现在想要添加到每个国家的点数。有人有什么好主意吗?请看看我已经做了什么。

  • 最近我加入了GitHub。我在那里主持了一些项目。 我需要在自述文件中包含一些图像。我不知道怎么做。 我搜索了一下,但我得到的只是一些链接,告诉我“在web上托管图像并在readme.md文件中指定图像路径”。 有没有什么方法可以做到这一点,而不将图像托管在任何第三方web托管服务上?