QGIS服务器可以从数据库中读取项目吗
Posted
技术标签:
【中文标题】QGIS服务器可以从数据库中读取项目吗【英文标题】:Can QGIS server read projects from database 【发布时间】:2021-03-05 11:51:27 【问题描述】:我有 QGIS 服务器工作。标准功能是将 ?map=path/to/projectfile.qgs 添加到服务器 URL。因此,您可以在 Web 应用程序中的项目之间动态切换。现在我制作我的项目并将我的项目文件上传到服务器,让它们在我的应用程序中工作。效果很好。
但我也可以将项目存储在数据库中。如果我可以告诉我的应用程序使用我的数据库中的项目会更好。跳过繁琐的文件更新过程。
研究这个我从 QGis 文档中发现了这个信息: https://docs.qgis.org/3.16/en/docs/server_manual/config.html 在第 5.2 节中。环境变量 我看到以下信息:
QGIS_PROJECT_FILE
.qgs 或 .qgz 项目文件,通常作为查询字符串中的参数传递(使用 MAP),您也可以将其设置为环境 变量(例如通过使用 mod_rewrite Apache 模块)。 postgresql://localhost:5432?sslmode=disable&dbname=mydb&schema=myschema&project=myproject
因此,您可以为 default 项目文件指向数据库中的项目文件。但这不是我想要的。我想动态地做。
我想要的是拥有类似 ?map=projectfile_in_my_database 的东西。并在我的 conf / 环境中指定这些存储在 de DB 中的服务器上。
这可能吗?
【问题讨论】:
【参考方案1】:您可以使用存储在数据库中的项目文件(在我的例子中是 postgres)。我是怎么做到的。
-
我在包含数据库连接凭据的主目录上创建了一个 pg_service 文件,让我们只需指定服务名称即可连接到数据库,例如使用 psql 你可以连接
psql service=myservicename
并在 nginx 上设置 fastcgi 参数
fastcgi_param PGSERVICEFILE /home/qgis/.pg_service.conf;
我从 qgis 桌面连接到 postgres 数据库,指定了我在服务文件中设置的服务名称。
已将项目文件保存在数据库中。通过这样做,这个项目文件将包含通过服务名称的数据库连接。
为项目名称设置 fastcgi_param
location /
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
gzip off;
include fastcgi_params;
fastcgi_param QGIS_PROJECT_FILE postgresql:///?service=myservicename&schema=public&project=testproject;
fastcgi_pass unix:/var/run/fcgiwrap.socket;;
-
默认的qgis项目,你可以通过url在你的Web应用程序的前端设置,这并不难。
【讨论】:
以上是关于QGIS服务器可以从数据库中读取项目吗的主要内容,如果未能解决你的问题,请参考以下文章
读取/导入 .tpk 地图到 R 或 QGIS 并用作 shapefile