首页 > 解决方案 > QGIS服务器可以从数据库中读取项目吗

问题描述

我有 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

因此,您可以指向默认项目文件的数据库中的项目文件。但这不是我想要的。我想动态地做。

我想要的是有类似 ?map=projectfile_in_my_database 的东西。并在我的 conf / 环境中指定这些存储在 de DB 中的服务器上。

这可能吗?

标签: databasepostgresqlserverprojectqgis

解决方案


您可以使用存储在数据库中的项目文件(在我的例子中是 postgres)。我是怎么做到的。

  1. 我在包含数据库连接凭据的主目录上创建了一个 pg_service 文件,让我们只需指定服务名称即可连接到数据库,例如使用 psql 你可以连接psql service=myservicename 并在 nginx 上设置 fastcgi 参数 fastcgi_param PGSERVICEFILE /home/qgis/.pg_service.conf;
  2. 我从 qgis 桌面连接到 postgres 数据库,指定了我在服务文件中设置的服务名称。
  3. 将项目文件保存在数据库中。通过这样做,这个项目文件将包含通过服务名称的数据库连接。
  4. 为项目名称设置 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;;
    }
  1. 您可以通过 url 在 Web 应用程序的前端设置默认的 qgis 项目,这并不难。

推荐阅读