在之前的版本中,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。

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

  1. QGIS 3.14|地震数据动画效果实战(二)动画设置篇

     01 设置图层Temporal属性 在QGIS 3.14中,图层的属性对话框首次加入了 Temporal标签页,提供图层的时间设置. 右键点击[图层]面板中的"quake2020" ...

  2. 大屏可视化数据面板分格渐变进度条、数字翻牌器及其刷新动效实现

    数据可视化大屏是当前可视化领域的一项热门应用,通常可以分为信息展示类.数据分析类及监控预警类.这类应用的视觉设计通常效果炫酷,动效丰富,有时候一些页面布局和动画实现会对前端人员有一定的挑战性,在这里分 ...

  3. echarts 动态数据动画效果

    在做项目时,当我们用到echarts图表时,大部分产品经理都会要求我们给图表加上一些动画效果,让页面看起来更加炫酷.其实给图表加上动画效果不难,如果数据是实时数据这样做动画效果会更简单点,就怕数据不是 ...

  4. VTK:数据动画用法实战

    VTK:数据动画用法实战 程序输出 程序完整源代码 程序输出 程序完整源代码 #include <vtkActor.h> #include <vtkCallbackCommand.h ...

  5. python 视频播放 拖动_视频画中画效果,拖动进度条可以seek到相应视频帧显示

    在视频开发中,我们常常看到这样的效果,拖动进度条时,或是在进度条上方或是在屏幕中间,显示拖动进度条位置时刻的某一帧画面. 这个需求,如果是你,你会如何做? 通常一个需求,不仅要考虑实现,还有考虑一些是 ...

  6. 肝了两宿才收集的17个超炫酷的 CSS 动画加载与进度条特效,绝对值得收藏!!!

    文章目录 一.圆形加载动画 二.上下跳动的圆球加载动画 三.3D立体加载动画 四.饼图加载动画 五.多色圆点波动效果的加载动画 六.制作顺时针放大的圆圈加载动画 七.制作小圆圈轮流放大的加载动画 八. ...

  7. Android App开发动画特效之实现百叶窗动画和马赛克动画效果实战演示(附源码和演示视频 可直接使用)

    需要图片集和源码请点赞关注收藏后评论区留言~~~ 一.实现百叶窗动画 合理运用图层规则可以实现酷炫的动画效果,比如把图片分割成一条一条,接着每条都逐渐展开,这便产生了百叶窗动画,把图片等分为若干小方格 ...

  8. Flutter进阶—实现动画效果(三)

    在上一篇文章:Flutter进阶-实现动画效果(二)的最后,我们实现了一个控件,其中包含各种布局和状态处理控件.以及使用自定义的动画感知绘图代码绘制单个Bar的控件.还有一个浮动按钮控件,用于启动条形 ...

  9. html5倒计时效果,html5+css3进度条倒计时动画特效代码【推荐】

    html5+css3进度条倒计时动画特效这个作品在今天上网找网络资源的时候无意中发现的,看到效果非常棒并且很实用,就第一时间把它整理出来与大家分享了,主要用到了html5.javascript和css ...

最新文章

  1. 零基础学python培训需要学习多久?
  2. Java面向对象知识点精华
  3. linux下ntp服务器搭建方法
  4. ASP.NET MVC 3.0学习系列文章—Model in ASP.NET MVC 3.0
  5. Retrofit 2.0
  6. 018:Django商城部署和数据库读写分离
  7. Exception in thread “main“ java.lang.NoSuchMethodError: scala.collection.mut
  8. 【POJ - 3126】Prime Path(bfs)
  9. 什么叫诚实_他爱不爱你,身体最诚实
  10. ECCV 2020 论文大盘点—显著目标检测篇
  11. 大数据的乘法实现——C语言
  12. python字典在编程中的作用_python中的字典操作及字典函数
  13. GitChat · 前端 | Vue 组件库实践和设计
  14. java在linux生成pdf文件,从 Java 应用程序动态生成 PDF 文件
  15. 屏保延迟启用密码保护
  16. 栈和排序---牛客练习赛10--B题
  17. 163Editor 编辑器概览
  18. 遥感图像计算机自动分类原理,遥感原理与应用_第5章_2遥感影像解译-遥感影像计算机自动分类讲义.ppt...
  19. 计算机用户要以ADSL,建设项目进度控制超星尔雅期末答案
  20. C 语言之父丹尼斯·里奇逝世十周年

热门文章

  1. Vim:如何退出Vim编辑器?
  2. 抽象类和接口有什么区别
  3. app直播源代码如何实现直播间红包功能
  4. 我们的愿景是在个人计算机上实现量子霸权
  5. pdf压缩工具在线,pdf在线压缩软件,在线压缩pdf文件大小的方法?
  6. 深度学习-MATLAB数据增广
  7. linux开启端口、防火墙操作
  8. TYVJ 1391 走廊泼水节
  9. 花30天整理了11个超棒的Java开源项目,雀氏牛逼
  10. 将视屏转成漫画风格的视频