Skip to content

35_制作交互式画布地图 QGIS3

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

制作交互式画布地图 (QGIS3)

本教程展示了如何在 QGIS 画布中移动光标时,使要素动态更新。我们将使用表达式实现画布笔刷效果,使要素能够响应光标移动。

任务概述

我们将创建一个由 QGIS 图标组成的网格,并应用数据定义的覆盖来控制图标旋转,使图标跟随光标移动。

../../_images/output1.gif

操作步骤

  1. 我们将从创建一个网格开始。为了创建具有全球范围的网格,我们可以在画布上加载世界地图。您可以在 QGIS 窗口底部的坐标框中输入 world 并按回车。 这是 QGIS 中几个隐藏的 彩蛋 之一。您可以在我们的 YouTube 频道 发现其他彩蛋。

    ../../_images/1103.png

  2. 一个新的 World Map 图层将被添加到 QGIS 图层面板中。转到 处理 ‣ 工具箱。

    ../../_images/290.png

  3. 搜索并找到 矢量创建 ‣ 创建网格 算法。双击打开它。

    ../../_images/337.png

  4. 在"创建网格"对话框中,点击下拉菜单 从图层计算 ‣ World Map。

    ../../_images/418.png

  5. 接下来,将 水平间距 和 垂直间距 设置为 20 度。点击 网格 旁边的 ... 按钮,选择 保存到文件。浏览到计算机上的一个文件夹,输入文件名 grid.gpkg。点击 运行。

    ../../_images/517.png

  6. 一个新的 grid 图层将被添加。点击图层面板中的 打开图层样式面板 按钮。点击 简单标记。

    ../../_images/617.png

  7. 在下拉菜单中,选择 SVG 标记 作为符号类型。

    ../../_images/716.png

  8. 向下滚动到 SVG 浏览器部分,选择 logos 文件夹。选择 QGIS 图标。

    ../../_images/816.png

  9. 滚动到 大小 选项,将大小设置为 5

    ../../_images/916.png

  10. 接下来,找到 旋转 选项,点击数据定义的覆盖按钮。选择 编辑…。

    ../../_images/1022.png

  11. 我们将添加一个表达式,该表达式将根据当前光标位置动态计算图标的旋转。由于我们的图标指向 135° 方位角,这将是 0 旋转。当光标移动时,表达式将计算图标和光标位置之间的方位角,并计算其需要旋转以指向光标的角度。输入以下表达式并点击 确定。

    bash degrees(azimuth(@geometry, @canvas_cursor_point)) - 135

    ../../_images/1125.png

  12. 地图画布尚未对光标移动做出响应,因为除非移动地图,否则它不会刷新。让我们使其自动刷新。右键单击 grid 图层并选择 属性。

    ../../_images/1223.png

  13. 切换到 渲染 选项卡。向下滚动并勾选 按间隔刷新图层。将间隔设置为一个较小的数字,例如 0.1(即 100 毫秒),然后点击 确定。

    ../../_images/1321.png

  14. 回到主窗口,关闭 World Map 图层的可见性。现在,当您移动光标时,所有图标都会旋转以指向您当前的位置。

    ../../_images/1419.png

  15. 这个有趣的练习旨在帮助您理解如何使用 @canvas_cursor_point 变量来创建响应鼠标移动的动态图层。

    ../../_images/output1.gif


如果您想就本教程提供反馈或分享您的经验,请在下方评论。(需要 GitHub 帐户)