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服务器可以从数据库中读取项目吗的主要内容,如果未能解决你的问题,请参考以下文章

Flash SWF,可以从浏览器内部读取文件内容吗?

PostGIS 和与 QGIS 的连接问题?

无论如何我们可以直接从sas服务器读取sas数据吗?

读取/导入 .tpk 地图到 R 或 QGIS 并用作 shapefile

QGIS SERVER QGIS 用于 发布环境WEB 地图

QGIS 二三维效果