QGIS Web Client怎么装?前端地图如何展示?

GIS基础理论
Dr.GIS
wowwwai GIS研习社 · 工具流程与项目排障

很多同学搜索“QGIS Web Client怎么装?前端地图如何展示?”,其实真正要解决的是两件事:后端如何把 QGIS 工程发布成标准地图服务,前端如何把这些图层加载成可交互的网页地图。本文以常见的 QGIS Server + QGIS Web Client 2(QWC2)思路为主,讲清安装流程、发布原理、前端展示方式和排错检查点。

引言:QGIS Web Client怎么装?前端地图如何展示?

QGIS Web Client 通常不是单独“打开一个软件就能用”的桌面程序,而是一套 WebGIS 发布方案。它一般包含三层:

  • QGIS Desktop:用于制作地图工程,配置图层样式、坐标系、标注和属性。
  • QGIS Server:用于把 QGIS 工程发布为 WMS、WFS 等 OGC 标准服务。
  • Web Client 前端:用于在浏览器中加载地图服务,实现缩放、查询、图层控制、打印等功能。

如果你只是想“把 QGIS 里的地图放到网页上”,不一定必须使用完整的 QGIS Web Client。也可以用 Leaflet、OpenLayers 直接加载 QGIS Server 发布的 WMS 服务。但如果你需要一个较完整的地图门户界面,QWC2 会更接近传统意义上的 QGIS Web Client。

QGIS Web Client安装与QGIS Server前端地图展示流程图
QGIS Web Client 的典型流程:先在 QGIS Desktop 制作工程,再由 QGIS Server 发布服务,最后由前端地图页面加载展示。

背景:为什么 QGIS Web Client 安装后地图不一定能直接显示

很多安装失败或前端空白的问题,并不是前端代码本身的问题,而是发布链路中某一环没有打通。常见原因包括:

  • QGIS Server 没有正确安装,WMS 服务无法访问。
  • QGIS 工程文件路径、数据源路径或权限配置错误。
  • 前端配置的服务地址不对,浏览器请求不到地图瓦片或 WMS 图片。
  • 坐标系不一致,地图加载了但显示在错误位置。
  • 跨域、反向代理、HTTPS 与 HTTP 混用导致请求被浏览器拦截。

所以安装 QGIS Web Client 前,建议先确认 QGIS Server 能单独返回 GetCapabilities 文档。只有后端服务正常,前端地图展示才有排错基础。

原理:QGIS Web Client 前端地图如何展示

QGIS Web Client 前端展示地图的核心原理并不复杂:浏览器不会直接读取 QGIS 工程文件,而是向 QGIS Server 发起标准地图服务请求。

以 WMS 为例,前端地图在缩放或平移时,会根据当前地图范围、屏幕大小、坐标系和图层名称,向服务器请求一张地图图片。QGIS Server 读取 QGIS 工程文件,按工程中的样式渲染图层,然后返回图片给浏览器。

常见请求类型包括:

  • GetCapabilities:查看服务中有哪些图层、支持哪些坐标系和操作。
  • GetMap:请求某个范围内的地图图片,是前端显示底图和专题图的核心。
  • GetFeatureInfo:点击地图要素时查询属性信息。
  • WFS 请求:返回矢量要素数据,适合前端需要编辑或自定义渲染的场景。

理解这个原理后,排查就会清晰很多:前端空白时,先看 WMS 请求有没有发出;请求发出了,再看服务器有没有返回正确图片;图片返回了,再看坐标系、图层名和样式是否正确。

步骤:QGIS Web Client 安装与前端地图展示流程

步骤一:准备 QGIS 工程

先在 QGIS Desktop 中整理好一个可发布的工程。建议按下面方式检查:

  1. 打开 QGIS Desktop,新建或整理一个项目。
  2. 添加矢量、栅格或数据库图层,例如 Shapefile、GeoPackage、PostGIS 图层。
  3. 设置项目坐标系,例如 WebGIS 常用的 EPSG:3857,或业务数据常用的 EPSG:4326、CGCS2000 相关坐标系。
  4. 配置图层样式、标注、透明度和图层顺序。
  5. 保存工程文件,例如保存为 demo_project.qgz

如果数据源是本地文件,建议放到服务器固定目录中,不要使用桌面临时路径。否则 QGIS Server 运行时可能找不到数据。

步骤二:安装 QGIS Server

在 Linux 服务器上,QGIS Server 通常和 Web 服务器一起使用,例如 Apache 或 Nginx。不同系统安装命令会有差异,以下以常见 Debian 或 Ubuntu 系统为例说明思路:

sudo apt update
sudo apt install qgis-server apache2 libapache2-mod-fcgid

安装完成后,需要确保 Web 服务器能够调用 QGIS Server 的 CGI 或 FastCGI 程序。你可以先检查 QGIS Server 是否存在:

which qgis_mapserv.fcgi

如果能返回类似 /usr/lib/cgi-bin/qgis_mapserv.fcgi 的路径,说明程序已安装。接下来要测试 WMS 服务是否能访问。

步骤三:配置 QGIS Server 工程路径

QGIS Server 需要知道要读取哪个 QGIS 工程文件。常用做法是在请求中通过 MAP 参数指定工程路径,例如:

http://your-server/cgi-bin/qgis_mapserv.fcgi?SERVICE=WMS&REQUEST=GetCapabilities&MAP=/data/qgis/demo_project.qgz

如果服务器返回 XML 格式的服务能力文档,说明 QGIS Server 基本可用。如果返回 500、403 或空白页面,需要先处理服务器权限和工程路径问题。

建议检查:

  • 工程文件路径是否真实存在。
  • Web 服务运行用户是否有权限读取工程文件和数据文件。
  • 工程内图层数据源路径是否仍然有效。
  • 服务器是否安装了读取相关数据格式所需的 GDAL、数据库驱动或字体。

步骤四:确认 WMS 图层名称

前端地图展示时需要填写正确的图层名称。图层名称不能靠猜,应该从 GetCapabilities 结果中查看。

在浏览器中打开 GetCapabilities 地址后,搜索 <Layer><Name>。前端加载 WMS 时使用的就是这些图层名称。

如果前端配置的图层名和服务返回的不一致,地图请求会成功发出,但返回结果可能是空图、异常图或服务错误。

步骤五:安装或部署 QGIS Web Client 前端

QGIS Web Client 相关前端方案常见有两种理解:

  • 传统 QGIS Web Client:较早期的项目,很多部署文档和依赖已经比较老,适合维护历史系统时参考。
  • QGIS Web Client 2(QWC2):更常见于现代 QGIS Web 发布场景,通常需要 Node.js 环境构建前端。

如果你是新项目,建议优先评估 QWC2 或直接使用 OpenLayers、Leaflet。完整 QWC2 的配置项较多,实际部署时通常要配置主题、图层、服务地址、打印服务和权限。对于初学者,可以先用最小前端验证 WMS 是否能展示,再考虑完整客户端。

步骤六:用 OpenLayers 快速验证前端地图展示

在正式配置 QGIS Web Client 前,可以先用一个最小 OpenLayers 页面验证 QGIS Server 的 WMS 服务是否能显示。这样可以排除很多客户端配置问题。

<div id="map" style="width:100%;height:500px;"></div>
<script src="https://cdn.jsdelivr.net/npm/ol@latest/dist/ol.js"></script>
<script>
const map = new ol.Map({
  target: 'map',
  layers: [
    new ol.layer.Tile({
      source: new ol.source.OSM()
    }),
    new ol.layer.Image({
      source: new ol.source.ImageWMS({
        url: 'http://your-server/cgi-bin/qgis_mapserv.fcgi',
        params: {
          'SERVICE': 'WMS',
          'VERSION': '1.3.0',
          'LAYERS': 'your_layer_name',
          'MAP': '/data/qgis/demo_project.qgz'
        },
        ratio: 1,
        serverType: 'qgis'
      })
    })
  ],
  view: new ol.View({
    center: ol.proj.fromLonLat([116.39, 39.90]),
    zoom: 10
  })
});
</script>

这段代码只用于说明加载逻辑。实际项目中,建议把样式文件、脚本文件和服务地址改为你自己的部署方式。如果这个最小页面可以显示地图,再接入 QGIS Web Client 会更稳妥。

步骤七:配置前端地图中心点和坐标系

前端地图不显示,有时不是服务失败,而是地图中心点不在数据范围内。尤其是数据是 EPSG:4326,经纬度范围在中国附近,但前端视图却设置到其他区域,就会看到空白。

建议从 GetCapabilities 或 QGIS Desktop 中确认图层范围,然后设置前端地图的中心点和缩放级别。对于 WebGIS 页面,常见做法是:

  • 底图使用 EPSG:3857。
  • 业务图层通过 WMS 请求由服务器完成坐标转换。
  • 前端中心点使用经纬度后转换为 Web Mercator。
  • 避免把经纬度坐标直接当成 EPSG:3857 米制坐标使用。

常见坑:QGIS Web Client 前端地图不显示的排查点

1. GetCapabilities 能打开,但 GetMap 不显示

这种情况通常说明服务入口是通的,但图层请求参数有问题。重点检查:

  • LAYERS 是否写成了正确的图层名称。
  • CRSSRS 是否被服务支持。
  • BBOX 是否落在图层实际范围内。
  • 图层比例尺可见范围是否限制太严格。
  • 样式是否把符号颜色设置成了透明或与底图相同。

2. QGIS Desktop 能打开,QGIS Server 报错

QGIS Desktop 能打开工程,不代表 QGIS Server 一定能读取。服务器环境通常没有桌面用户的权限,也可能缺少字体、插件、数据库连接配置。

应重点检查:

  • 工程和数据文件是否对 Web 服务用户可读。
  • PostGIS 数据库连接是否允许服务器访问。
  • 工程中是否使用了服务器未安装的字体。
  • 图层路径是否是本机桌面路径,例如 C:Users.../home/user/Desktop/...

3. 浏览器控制台出现跨域错误

如果 QGIS Server 和前端页面不在同一个域名、端口或协议下,浏览器可能会触发跨域限制。解决方式通常是:

  • 把前端和 QGIS Server 放到同一个域名下,通过 Nginx 反向代理区分路径。
  • 在代理层配置允许的跨域响应头。
  • 避免页面是 HTTPS,而地图服务仍然是 HTTP。

4. 中文标注乱码或不显示

中文标注问题多与服务器字体有关。QGIS Desktop 中有字体,不代表服务器也有。建议在服务器安装常用中文字体,并在 QGIS 工程中使用服务器确定存在的字体。

5. 地图位置偏移

位置偏移常见于坐标系混用。例如数据是 CGCS2000、高斯投影或地方坐标,但前端按 EPSG:4326 或 EPSG:3857 加载。排查时要确认:

  • QGIS 工程坐标系是否正确。
  • 每个图层自身坐标系是否定义正确。
  • 是否把未定义投影的数据强行当成经纬度数据。
  • 前端中心点是否做了正确坐标转换。

方法比较:QGIS Web Client、OpenLayers、Leaflet 怎么选

方案 适合场景 优点 注意事项
QGIS Web Client 2 需要完整地图门户、图层树、查询、打印、权限等功能 与 QGIS Server 结合紧密,适合工程化发布 配置和部署复杂度较高,适合有一定 WebGIS 基础的团队
OpenLayers 需要灵活控制 WMS、WFS、矢量样式和复杂交互 功能强,适合中大型 WebGIS 应用 学习成本略高,需要自己开发界面功能
Leaflet 轻量地图展示、简单点线面叠加、快速原型 上手快,插件生态丰富 复杂投影、复杂 WMS/WFS 工作流需要额外处理
直接发布静态瓦片 只看图、不需要实时查询和动态样式 访问速度快,服务器压力小 更新成本高,不适合频繁变化的数据

如果你的目标是快速验证“前端地图如何展示”,建议先用 OpenLayers 或 Leaflet 加载 QGIS Server 的 WMS。等服务链路稳定后,再部署完整的 QGIS Web Client。

检查清单:发布前必须确认的事项

  • QGIS 工程文件已经保存为稳定路径,例如 /data/qgis/demo_project.qgz
  • 工程中所有数据源路径在服务器上可访问。
  • QGIS Server 的 GetCapabilities 请求可以正常返回。
  • GetCapabilities 中能看到目标图层名称。
  • 前端配置的 LAYERS 与服务返回的 Name 一致。
  • 前端地图中心点和图层范围一致。
  • 坐标系设置清楚,避免 EPSG:4326 与 EPSG:3857 混用。
  • 浏览器控制台没有跨域、404、500 等错误。
  • 服务器安装了中文字体,标注显示正常。
  • 如果使用 PostGIS,数据库账号、密码、主机和端口在服务器环境中可访问。

FAQ:QGIS Web Client 安装与前端展示常见问题

QGIS Web Client 必须配合 QGIS Server 使用吗?

通常是的。QGIS Web Client 的核心价值是展示 QGIS Server 发布的地图服务。如果没有 QGIS Server,也可以用其他 WMS、WMTS、XYZ、GeoJSON 服务作为数据源,但就不是典型的 QGIS 工程发布流程了。

QGIS Web Client 和 QGIS Server 是一回事吗?

不是。QGIS Server 是后端服务,负责读取 QGIS 工程并输出 WMS、WFS 等服务;QGIS Web Client 是前端客户端,负责在浏览器中展示地图、图层树、查询结果和工具按钮。

前端地图空白,应该先查哪里?

先查浏览器开发者工具中的网络请求。看 WMS 请求是否发出、返回状态码是否为 200、返回内容是图片还是错误 XML。然后再检查图层名、坐标系、范围和服务器日志。

QGIS 工程里的样式能在网页里保持一致吗?

如果通过 QGIS Server 的 WMS 发布,通常可以较好保留 QGIS 工程中的符号、标注和图层顺序。但服务器字体、插件、表达式函数和数据源权限可能影响最终效果。

QGIS Web Client 适合初学者吗?

如果只是想学习前端地图展示,直接用 Leaflet 或 OpenLayers 加载 WMS 更容易。如果目标是搭建完整的地图发布平台,再学习 QGIS Web Client 2 会更合适。

可以把 QGIS Web Client 部署在 Windows 上吗?

可以做测试,但生产环境更常见的是 Linux 服务器。因为 QGIS Server、Web 服务器、反向代理、权限和服务管理在 Linux 上更稳定,也更容易自动化维护。

为什么 QGIS Server 发布后图层点击查询没有结果?

需要确认图层是否允许查询、WMS 是否支持 GetFeatureInfo、前端是否传入正确的图层名和坐标参数。另外,某些栅格图层或特殊图层并不适合做属性点击查询。

结论:先打通 QGIS Server,再配置 QGIS Web Client

“QGIS Web Client怎么装?前端地图如何展示?”的关键不是只安装一个前端页面,而是建立完整的发布链路:QGIS Desktop 制作工程,QGIS Server 发布 WMS 或 WFS,前端客户端加载服务并设置正确的图层、范围和坐标系。

实际操作时,建议按低风险顺序推进:先让 GetCapabilities 正常返回,再用最小 OpenLayers 页面验证 WMS 显示,最后再部署和配置完整的 QGIS Web Client。这样排错路径最清晰,也最适合 GIS 学生、初级 GIS 工程师和 WebGIS 开发者逐步掌握。