QGIS 3.14|地震数据动画效果实战(三)进度条设置

在之前的版本中,QGIS对时间的处理是通过Time Manager插件实现的,QGIS 3.14将Temporal Controller引入软件整体框架之中,以原生的方式支持各类数据集对时间维度的处理。

使用过Time Manager的朋友知道,Time Manager默认提供时间标签,显示当前地图的时间,如下图:

然而,Temporal Controller默认并不提供时间标签。

 01 添加时间标签

对于Temporal Controller缺少默认时间标签的问题,可以通过设置点图层标签,达到类似Time Manager标签的效果。操作步骤如下:

首先,新建点图层。点击【数据源管理器】工具栏上的【新建临时草稿图层】按钮,在打开的对话框中,【几何图形类型】选择“点”,点击【OK】,将新建临时草图添加到地图窗口中。此处,也可以建立Shapefile、GeoPackage、SpatiaLite等其他数据源,将时间标签保存在到其他数据源中。

然后,在新图层中添加一个点,用该点的标签关联时间属性。在【图层】面板中,右键单击刚添加的“新建草图图层”,弹出菜单选择【切换编辑状态】,将该图层设置为可编辑状态。

点击【数字化】工具栏上的【添加点要素】按钮,在地图窗口适当的位置点击,以添加一个点要素。

接下来,设置点符号化表达。点击【图层】面板上方的【打开图层样式面板】按钮,在右侧打开【图层样式】。点击切换到标签设置页面。

选择“单一标注”,点击【值】右侧的【Ɛ】按钮,打开表达式对话框。

在表达式代码编辑区输入:

format_date(@map_start_time,'yyyy-MM-dd')

该表达式将地图时间进行格式化后,作为点标签绘制到地图上:

format_date:字符串函数,以指定的格式输出日期类型。

@map_start_time:变量,表示当前地图帧的开始时间。

'yyyy-MM-dd':格式化字符串,遵循Qt日期/时间格式,具体可参考文档:https://doc.qt.io/qt-5/qdatetime.html#toString。

关闭表达式对话框,返回QGIS地图窗口。可以看到根据表达式,在点的右侧出现了时间标签。调整标签的字体和大小,直到满意为止。

如果不想看到时间标签旁边的点显示在地图上,可以将【图层样式】面板切换到页面,符号设置为“无符号”,如下图。

此时,播放动画发现标签并没有随地图动画推进而发生变化,这是因为Temporal Controller在动画播放的过程中,智能地判断每个图层是否需要重绘,该图层没有设置Temporal属性,所以不会被重绘,时间标签也不会发生变化。

右键点击【新建草图图层】,打开图层的属性对话框。切换到Temporal页面,勾选【Temporal】复选框,在【configuration】下拉框中选择“Redraw Layer Only”,表示动画过程中重绘该图层。

点击Temporal Controller面板中的按钮播放动画,查看效果。

可以看到,随着动画的播放,时间标签始终更新为当前地图时间,与Time Manager时间标签的效果相同。

 02 添加进度条

为了让地图动画效果更生动,可以为动画添加进度条:

首先,新建一个点图层,用于存储进度条,新建图层的参数设置如下:

编辑“进度条”图层,添加代表进度条的点。

接下来,对“进度条”图层进行符号化设置。

在【图层样式】面板中,切换到页面,选择“单一符号”。点击【标记】->【简单标记】,下方的【标记图层类型】选择“椭圆标记”,【锚点】选择“左边”,使进度条从左向右增长。设置标记类型为方块。如下图:

然后,用表达式设置符号宽度,使宽度随着时间变化逐渐增加,呈现进度条效果。

点击【符号宽度】右侧的【由数据定义重载】按钮,在弹出菜单中选择【助理】,打开符号宽度设置面板。

点击【输入】->【源】右侧的【Ɛ】按钮,打开表达式对话框。

在表达式代码编辑区中输入:

second(@map_start_time  -  @animation_start_time)/second( @animation_interval )

该表达式用时间函数和相关变量,将符号宽度进行归一化,其中:

Second:时间函数,计算两个时间间隔的秒数。

@map_start_time:变量,表示当前地图帧的开始时间。

@animation_start_time:变量,动画开始时间。

@animation_interval:变量,动画的总时长。

“@map_start_time  -  @animation_start_time”为当前地图帧与动画开始时间之差,除以“@animation_interval”总时长,得到进度数值,取值范围是[0,1]。

设置【输入】部分的其他参数。【值 从】填写0,表示上述表达式的最小取值。【到】填写1,表示上述表达式的最大取值。

【输出】部分,【输出表单】填写0,表示进度条在地图上绘制的最小宽度,【到】填写200,表示进度条在地图上的最大宽度。

至此,进度条的前景色设置完成,点击上方的按钮,返回【图层样式】面板,开始设置进度条的背景色。

选中【标记】->【椭圆标记】,点击右侧的【创建符号图层副本】按钮,将该符号复制。

选择刚复制的【椭圆标记】,【符号宽度】填入200,点击右侧的【由数据定义重载】,在弹出菜单中选择【取消激活】,使表达式不再与符号宽度取值相关联。

设置背景色为深灰色。

最后,设置图层的Temporal属性为“Redraw Layer Only”。

点击Temporal Controller面板中的按钮播放动画,查看效果。

可以看到,随着动画播放,进度条滑块和时间标签也根据当前进度发生变化。

 03 小结

地震数据动画效果实战的操作流程就介绍到这里。

与持续使用了10年的Time Manager相比, 作为新的时间插件,Temporal Controller仍有一些不足的地方,例如对时间字段类型的支持、大数据量刷新效率低、缺少默认的时间标签等。相信在后续的版本中,开发团队会逐步对Temporal Controller做出相应的改善和提升,让我们拭目以待。

吴建玲

2020年8月31日


版权声明

本文欢迎转载,转载时请注明出处。

本文是参考了Nyall Dawson的视频整理而成。Nyall Dawson是QGIS开发团队成员,有10年的QGIS开发经验,他的直播条理清楚、思路新颖,感兴趣的朋友可以去观看相关视频,地址为:

https://www.youtube.com/watch?v=vgDg5cRwPRw。

猜你喜欢

转载自blog.csdn.net/QGISClass/article/details/108403845