
我的尝试是在上面的对话框后面使用相同的函数,在这个对话框中,QGIS允许通过给出连接,路径来加载项目,形成一个重力场。这个想法是为了能够检查一个地质公园是否包含项目。到目前为止,我所做的是
prj = QgsProject.instance()
prj.read('geopackage:/home/me/Downloads/test.gpkg')但是这给了我一个错误:ogr error no more rows
谢谢
发布于 2022-05-11 03:26:00
尝试这样做以检查Geopackage是否有一个项目:
import sqlite3
import contextlib
geopackage = r"D:\temp\test.gpkg"
with contextlib.closing(sqlite3.connect(geopackage)) as connection:
cursor = connection.cursor()
cursor.execute("""
SELECT name
FROM sqlite_master
WHERE type='table'
AND name='qgis_projects';
""");
row = cursor.fetchone()
print(f"Contains no projects? {not row}")并开展一个项目:
PROJECT_NAME = "proj"
iface.addProject(rf"geopackage:D:\temp\test.gpkg?projectName={PROJECT_NAME}")我花了好长时间才想出解决办法,尽管它就在我面前。
无论如何,我会留下下面的初步答案,因为它可能对其他人有用,或者如果你想了解更多关于QGIS项目和Geopackage.
看看这个GitHub项目pka/qgpkg。
QGIS添加了一个工具栏按钮,用于将当前项目保存在GeoPackage文件中,另一个按钮用于从GeoPackage文件中加载QGIS项目。
然而,该项目似乎不再维持了4年。因此,在QGIS3.24.1(我使用)中没有使用它,因为项目代码仍然使用PyQt4。
还有一个项目卡达斯-albireo/kadas-gpkg-plugin似乎也这样做,并且使用PyQt5。
我假设这些是QGIS中的相关C++类:
您可以反向设计代码,并根据这些项目编写自己的代码。
https://stackoverflow.com/questions/71997312
复制相似问题