22_时间序列数据动画化 QGIS3
原文链接: https://www.qgistutorials.com/en/docs/3/animating_time_series.html
动画化时间序列数据 (QGIS3)¶
时间是许多空间数据集的重要组成部分。除位置信息外,时间为数据的分析和可视化提供了另一个维度。如果您正在处理包含时间戳的数据集,或拥有在多时间步长下记录的观测数据,您可以使用时态控制器轻松地对其进行可视化。时态控制器允许您查看和导出特定时间间隔内的数据“切片”,这些切片可以组合成动画。
注意
时态控制器从 QGIS 3.14 版本开始可用。对于旧版本的 QGIS,Time Manager 插件提供了类似的功能。
任务概述¶
我们将使用一个海上盗版事件点图层,创建热力图可视化,并制作一个展示过去20年间盗版热点区域如何变化的动画。
您将学到的其他技能¶
- 使用热图渲染器快速可视化密集的点数据
- 创建和使用自定义地图投影
获取数据¶
美国国家地理空间情报局的海事安全信息门户以反航运活动消息的形式,提供了所有海上盗版事件的 shapefile 文件。下载数据库的 Arc Shape 文件版本。
Natural Earth 提供多个全球矢量图层。下载包含陆地多边形的 10m Physical Vectors - Land。
为方便起见,您可以直接从下方下载上述图层的副本:
数据来源: [NGA_MSI] [NATURALEARTH]
操作步骤¶
- 在 QGIS 浏览面板中,定位到您保存下载数据的目录。展开
ne_10m_land.zip并选择ne_10m_land.shp图层。将其拖动到画布上。接着,定位ASAM_shp.zip文件。展开它,选择asam_data_download/ASAM_events.shp图层并将其拖到画布上。
- 图层加载完成后,您可以看到代表盗版事件位置的各个点。有成千上万的事件,很难确定哪里盗版更多。与显示单个点相比,更好的可视化方式是热力图。选择
ASAM_events图层,点击图层面板中的打开图层样式面板按钮。点击单一符号下拉菜单。
- 在渲染器选择下拉菜单中,选择
热图渲染器。接着,在配色方案选择器中选择Viridis配色方案。
- 将半径值调整为
5.0。在底部,展开图层渲染部分,将不透明度调整为75.0%。这样能为热点区域与下方的陆地图层提供良好的视觉效果。
- 现在让我们将此数据动画化,以显示盗版事件的年度地图。右键点击
ASAM_event图层,选择属性。
- 在图层属性对话框中,选择时态选项卡,并通过勾选复选框启用它。
- 源数据包含一个属性
dateofocc— 表示事件发生的日期。该字段将用于确定每个时间段内要渲染的点。在配置下拉菜单中选择包含日期/时间的单个字段,并选择dateofocc作为字段。
- 现在图层名称旁边会出现一个时钟符号。从地图导航工具栏中点击
时态控制面板(时钟图标)。
- 点击
动画时态导航(播放图标)以激活动画控件。点击范围旁边的设置为完整范围(刷新图标),自动将时间范围设置为匹配数据集的范围。
- 现在您可以预览动画了。将步长设置为
1年,然后点击播放按钮开始动画。
注意
如果动画太快,您可以点击时态控制器面板右上角的 时态设置(黄色齿轮图标)来调整帧率。降低帧率(每秒帧数)会使动画变慢。
- 在 map 上显示一个展示当前时间帧的标签会很有帮助。我们可以使用内置的标题装饰来实现。转到 视图 ‣ 装饰 ‣ 标题标签。
- 勾选复选框启用它,点击
插入表达式按钮,并输入以下表达式以显示年份。这里变量@map_start_time包含当前显示时间切片的的时间戳。因此我们可以使用该时间戳并将其格式化以显示发生年份。有关支持的时间戳格式化选项的详细信息,请参阅 QGIS 文档。
bash format_date(@map_start_time, 'yyyy')
- 选择字体大小为
25,设置背景栏颜色为白色,并将透明度设置为50%。在位置中选择右下角。现在点击确定。
- 相应设置参数后,年份将如图所示显示。要将这些导出为图像并转换为 GIF,请在时态控制窗口中选择
导出动画(保存图标)。
- 点击
...输出目录,选择图像将保存到的目录。
- 在范围下,选择 根据图层计算 ‣ ne_10_land 图层。点击保存。
- 导出完成后,您将在输出目录中看到每年的 PNG 图像(总共 18 张图像)。
- 现在让我们从这些图像创建一个动画 GIF。从单张图像帧创建动画有很多选择。我喜欢使用 ezgif 这个简单便捷的在线工具。访问该网站,点击选择文件并选中所有的 .png 文件。选择完成后,点击 上传并制作 GIF!按钮。创建完成后,您可以使用保存按钮下载 GIF。
如果您想提供反馈或分享您对本教程的体验,请在下方评论。(需要 GitHub 帐户)

















