11.2. Lesson: 服务WMS

本练习使用的数据位于 qgis-server-tutorial-data 的子目录 training data 你下载了。为方便起见并避免可能出现的权限问题,我们假定这些文件存储在 /home/qgis/projects 目录。因此,请根据您的路径调整以下说明。

演示数据包含名为的QGIS工程 world.qgs 它已经准备好与QGIS服务器一起使用。如果您想使用自己的项目,或者想了解项目是如何准备的,请参阅 配置您的项目 一节。

备注

此模块提供URL,以便受众可以轻松区分参数和参数值。而标准格式为:

...&field1=value1&field2=value2&field3=value3

本教程使用:

&field1=value1
&field2=value2
&field3=value3

将它们粘贴到Mozilla Firefox中可以正常工作,但其他Web浏览器(如Chrome)可能会在 field:parameter 成对的。因此,如果您遇到这个问题,您可以使用Firefox或修改URL,使其为一行格式。

让我们在Web浏览器中或使用cURL发出一个WMS GetCapables请求:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetCapabilities
&map=/home/qgis/projects/world.qgs

在上一课中的apache配置中, QGIS_PROJECT_FILE 变量将默认项目设置为 /home/qgis/projects/world.qgs 。但是,在上述请求中,我们使用了 map 参数必须是显式的,并表明它可用于指向任何项目。如果您删除 map 来自上述请求的参数QGIS服务器将输出相同的响应。

通过将任何WMS客户端指向 GetCapabilities URL,客户端得到一个带有Web地图服务器信息元数据的XML文档作为响应,例如,它提供什么层、地理覆盖范围、以什么格式、什么版本的WMS等。

由于QGIS也是一种 WMS/WMTS客户端 您可以使用上面的GetCapability url创建新的WMS服务器连接。请参阅 Lesson: Web地图服务选择WMS/WMTS服务器 关于如何做到这一点的部分。

通过添加 countries 将WMS图层添加到您的QGIS项目中,您应该会得到如下所示的图像:

../../../_images/qgis_getmap_request.png

图 11.30 使用QGIS Server Country Layer WMS服务的QGIS Desktop

备注

QGIS服务器提供在中定义的图层 world.qgs 项目。通过使用QGIS打开项目,您可以看到Country层有多种样式。QGIS服务器也知道这一点,您可以在请求中选择您想要的样式。这个 classified_by_population 风格是在上图中选择的。

11.2.1. 日志记录

当您设置服务器时,日志总是很重要,因为它们向您显示正在发生的事情。我们已经在 *.conf 将以下日志归档:

  • QGIS服务器登录地址: /logs/qgisserver.log

  • qgisplatform.demo Apache access log at qgisplatform.demo.access.log

  • qgisplatform.demo Apache error log at qgisplatform.demo.error.log

日志文件只是文本文件,因此您可以使用文本编辑器将其签出。您也可以使用 tail 终端中的命令: sudo tail -f /logs/qgisserver.log

这将在终端中持续输出该日志文件中写入的内容。您还可以为每个日志文件打开三个终端,如下所示:

../../../_images/terminal_tail_log.jpg

图 11.31 使用 tail 用于可视化QGIS服务器日志输出的命令

当您使用QGIS Desktop使用QGIS服务器WMS服务时,您将在访问日志中看到QGIS发送到服务器的所有请求,在QGIS服务器日志中看到QGIS服务器的错误等。

备注

  • 如果您查看以下部分中的日志,您应该会更好地理解正在发生的事情。

  • 通过在查看QGIS服务器日志的同时重新启动Apache,您可以找到一些关于事情如何工作的额外提示。

11.2.2. GetMap请求

为了显示 countries 图层,QGIS Desktop与任何其他WMS客户端一样,正在使用 GetMap 请求。

一个简单的请求如下所示:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?MAP=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetMap
&BBOX=-432786,4372992,3358959,7513746
&SRS=EPSG:3857
&WIDTH=665
&HEIGHT=551
&LAYERS=countries
&FORMAT=image/jpeg

上述请求应输出以下图像:

Figure: simple GetMap request to QGIS Server

../../../_images/getmap_simple_request.jpg

图 11.32 简单的GetMap请求后的QGIS服务器响应

11.2.3. 适度 Try Yourself Change the Image and Layers parameters

根据上面的请求,让我们替换 countries 与另一层进行分层。

为了查看有哪些其他层可用,您可以打开 world.qgs 在QGIS中进行项目并查看其内容。但是请记住,WMS客户端没有访问QGIS项目的权限,他们只查看功能文档的内容。

此外,还提供了一个配置选项,以便QGIS在提供WMS服务时忽略QGIS项目中存在的一些层。

因此,当您将QGIS Desktop指向 GetCapabilities URL,或者您可以尝试在 GetCapabilities XML响应。

您可以找到并使用的其中一个层名称是 countries_shapeburst 。你可能会发现其他的,但请记住,有些可能在这么小的比例下看不到,所以你可能会得到一张空白的图像作为回应。

您还可以使用上面的其他参数,比如将返回的图像类型更改为 image/png

11.2.4. 适度 Follow Along: Use Filter, Opacities and Styles parameters

让我们做另一个请求,添加另一个层,一些 basic parametersFILTEROPACITIES ,但也使用标准样式参数。

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?MAP=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetMap
&BBOX=-432786,4372992,3358959,7513746
&SRS=EPSG:3857
&WIDTH=665
&HEIGHT=551
&FORMAT=image/jpeg
&LAYERS=countries,countries_shapeburst
&STYLES=classified_by_name,blue
&OPACITIES=255,30
&FILTER=countries:"name" IN ( 'Germany' , 'Italy' )

上述请求应输出以下图像:

../../../_images/getmap_filter_opacities.jpg

图 11.33 使用滤镜和不透明度参数响应GetMap请求

正如您从上面的图像中看到的,除了其他内容外,我们还告诉QGIS服务器仅渲染 GermanyItaly 从国家层。

11.2.5. 适度 Follow Along: Use Redlining

让我们执行另一个GetMap请求,该请求利用 redlining 功能和 SELECTION 参数的详细信息请参阅 Basics 部分:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?MAP=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0
&REQUEST=GetMap
&BBOX=-432786,4372992,3358959,7513746
&SRS=EPSG:3857
&WIDTH=665
&HEIGHT=551
&LAYERS=countries,countries_shapeburst
&FORMAT=image/jpeg
&HIGHLIGHT_GEOM=POLYGON((590000 6900000, 590000 7363000, 2500000 7363000, 2500000 6900000, 590000 6900000))
&HIGHLIGHT_SYMBOL=<StyledLayerDescriptor><UserStyle><Name>Highlight</Name><FeatureTypeStyle><Rule><Name>Symbol</Name><LineSymbolizer><Stroke><SvgParameter name="stroke">%233a093a</SvgParameter><SvgParameter name="stroke-opacity">1</SvgParameter><SvgParameter name="stroke-width">1.6</SvgParameter></Stroke></LineSymbolizer></Rule></FeatureTypeStyle></UserStyle></StyledLayerDescriptor>
&HIGHLIGHT_LABELSTRING=QGIS Tutorial
&HIGHLIGHT_LABELSIZE=30
&HIGHLIGHT_LABELCOLOR=%23000000
&HIGHLIGHT_LABELBUFFERCOLOR=%23FFFFFF
&HIGHLIGHT_LABELBUFFERSIZE=3
&SELECTION=countries:171,65

在您的Web浏览器中粘贴上述请求应会输出以下图像:

../../../_images/getmap_redlining_selection.jpg

图 11.34 使用红线圈阅功能和选择参数响应请求

从上图可以看到,ID为171和65的国家/地区(罗马尼亚和法国)使用 SELECTION 参数,并且我们使用 REDLINING 功能将矩形与 QGIS Tutorial 标签。

11.2.6. GetPrint请求

QGIS Server的一个非常好的功能是它利用了QGIS Desktop打印布局。您可以在 GetPrint 一节。

如果您打开 world.qgs 使用QGIS Desktop进行工程时,您将找到名为 Population distribution 。一种简化的 GetPrint 体现这一令人惊叹的功能的请求是:

http://qgisplatform.demo/cgi-bin/qgis_mapserv.fcgi
?map=/home/qgis/projects/world.qgs
&SERVICE=WMS
&VERSION=1.3.0&
REQUEST=GetPrint
&FORMAT=pdf
&TRANSPARENT=true
&SRS=EPSG:3857
&DPI=300
&TEMPLATE=Population distribution
&map0:extent=-432786,4372992,3358959,7513746
&LAYERS=countries
../../../_images/getprint.jpg

图 11.35 显示了上述GetPrint请求产生的pdf

很自然地,很难写出你的 GetMapGetPrint 等。请求。

QGIS Web Client 或者QWC是一个Web客户端项目,可以与QGIS Server一起工作,这样您就可以在Web上发布您的项目,或者帮助您创建QGIS Server请求,以便更好地了解这些可能性。

您可以这样安装它:

  • 作为用户 qgis 使用以下命令转到主目录 cd /home/qgis

  • 从下载QWC项目 here 然后解压它。

  • 创建一个指向 /var/www/html 目录,因为它是 DocumentRoot 我们已经在虚拟主机配置中进行了设置。如果您将归档文件解压到 /home/qgis/Downloads/QGIS-Web-Client-master 我们可以做到这一点 sudo ln -s /home/qgis/Downloads/QGIS-Web-Client-master /var/www/html/

  • 从网络浏览器访问http://qgisplatform.demo/QGIS-Web-Client-master/site/qgiswebclient.html?map=/home/qgis/projects/world.qgs。

现在,您应该能够看到如下图所示的映射:

../../../_images/qwc.jpg

图 11.36 使用World.qgs项目的QGIS Web客户端

如果您在QWC中单击打印按钮,则可以交互创建 GetPrint 请求。您也可以点击 ? 图标以访问可用的帮助,以便您可以更好地发现QWC的可能性。

11.2.7. In Conclusion

您了解了如何使用QGIS服务器提供WMS服务。

11.2.8. What's Next?

接下来,您将看到如何使用QGIS作为著名的GRASS地理信息系统的前端。