Skip to content

36_制作交互式显示地图 QGIS3

原文链接: https://www.qgistutorials.com/en/docs/3/interactive_reveal_maps.html

制作交互式显示地图 (QGIS3)

本教程展示了如何在图层组中使用动态遮罩层结合表达式,制作一个交互式地图,当您在画布上移动光标时,可以显示当前层下方的图层。这利用了 QGIS 中新的遮罩混合模式以及先前教程制作交互式画布地图 (QGIS3)中展示的添加交互性的技术。

本教程灵感来源于 Hamish Campbell 在 LinkedIn 上分享的交互式可视化作品。

任务概述

我们将加载 2 个栅格瓦片图层,并使用一个带有几何生成器符号的遮罩层,随着光标在画布上移动,来显示下方的图层。

../../_images/output2.gif

操作步骤

  1. 我们将从加载 2 个栅格图层开始。一个在顶部,另一个在底部,将通过遮罩层显示。我们将从 QuickMapServices 插件获取这些图层。从 QGIS 官方插件仓库搜索并安装 QuickMapServices 插件。有关安装插件的说明,请参阅 使用插件 (QGIS3)。安装完成后,我们需要向该插件添加一些额外的服务。转到 Web ‣ QuickMapServices ‣ Settings。

../../_images/1104.png

  1. 在 QuickMapServices Settings 对话框中,切换到 More Services 选项卡,然后单击 Get contributed pack 按钮。此步骤是获取 Google Satellite 底图所必需的。

../../_images/2100.png

  1. 现在我们可以添加图层了。我们地图中的顶层将是 OpenStreetMap 图层。转到 Web ‣ QuickMapServices ‣ OSM ‣ OSM Standard 以添加它。将地图缩放并居中到您选择的任意位置。

../../_images/338.png

  1. 接下来添加 Google Satellite 图层,路径为 Web ‣ QuickMapServices ‣ Google ‣ Google Satellite。这将是位于底部、将通过遮罩显示的图层。

../../_images/419.png

  1. 我们将创建一个新图层作为遮罩。转到 Layer ‣ Create Layer ‣ New GeoPackage Layer…。

../../_images/518.png

  1. 在 New GeoPackage Layer 对话框中,单击 Database 旁的 … 按钮,浏览到您计算机上的一个目录。将图层保存为 mask.gpkg。将 Geometry type 更改为 Polygon,将 CRS 更改为 Project CRS: EPSG:3857 - WGS84 / Pseudo-Mercator。将此图层保存在投影坐标系中很有用,因为它允许我们以米(而不是度)为单位指定遮罩的半径。单击 OK。

../../_images/618.png

  1. 一个新图层 mask 将被添加到图层面板。单击“打开图层样式面板”按钮。单击 Single Symbol 以查看渲染器的其他选项。

../../_images/717.png

  1. 选择 Inverted Polygons 作为渲染器。向下滚动并单击 Simple Fill 以查看其他符号图层类型。

../../_images/817.png

注意

反向多边形渲染器用于显示要素区域之外的部分。在我们的例子中,mask 图层是空的,因此“反向”区域是整个画布。这就是为什么您会看到整个画布都使用所选符号系统进行渲染。我们在教程中使用此渲染器,因为它无需图层中存在任何要素即可渲染地图,并且适用于世界任何地方。

  1. 选择 Geometry Generator 作为符号图层类型。我们现在将输入一个表达式来更改图层的渲染方式。单击 Expression 按钮。

../../_images/917.png

  1. 在 Expression Builder 对话框中输入以下表达式。此表达式将在当前光标位置周围创建一个半径为 5000 米的缓冲区多边形。单击 OK。

bash buffer(@canvas_cursor_point, 5000)

../../_images/1023.png

  1. 您将在画布上点击的任何位置看到一个圆形多边形的渲染。如果需要,请为您所在的区域调整缓冲区的大小,然后关闭“图层样式面板”。要使用遮罩混合模式,我们必须创建一个图层组。按住 Ctrl 键并选择 maskOSM Standard 图层。右键单击选定的图层并选择 Group Selected。

../../_images/1126.png

  1. 将创建一个新的图层组。输入名称为 mask_group。单击“打开图层样式面板”按钮。

../../_images/1224.png

  1. 勾选 Render Layers as a Group 按钮。此步骤为此组中的图层启用了遮罩混合模式。

../../_images/1322.png

  1. mask_group 中选择 mask 图层。在“图层样式”面板中,向下滚动并展开 Layer Rendering 部分。

../../_images/1420.png

  1. 单击 Layer Blending Mode 的下拉选择器。选择 Inverse Mask Below 混合模式。现在,图层组下方图层中,被缓冲区多边形覆盖的部分将会显示出来。

../../_images/1517.png

  1. 地图画布尚未响应光标移动,因为除非您移动地图,否则它不会刷新。让我们使其自动刷新。右键单击 mask 图层并选择 Properties。

../../_images/1616.png

  1. 切换到 Rendering 选项卡。向下滚动并勾选 Refresh layer at interval。将间隔设置为一个较小的数字,例如 0.1(即 100 毫秒),然后单击 OK。

../../_images/1717.png

  1. 现在,当您移动光标时,光标位置下方的区域将以交互方式显示出来。

../../_images/output2.gif


如果您想提供反馈或分享您对本教程的体验,请在下方留言。(需要 GitHub 帐户)