QGIS服务器可以从数据库中读取项目吗

Can QGIS server read projects from database

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

The .qgs or .qgz project file, normally passed as a parameter in the query string (with MAP), you can also set it as an environment variable (for example by using mod_rewrite Apache module). postgresql://localhost:5432?sslmode=disable&dbname=mydb&schema=myschema&project=myproject

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

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

这可能吗?

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

  1. 我在包含数据库连接凭据的主目录上创建了一个 pg_service 文件,让我们连接到数据库只需指定服务名称,例如使用 psql 你可以连接 psql service=myservicename 并设置 fastcgi nginx 参数 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 项目,这并不难。